4.2数据存储模块的设计与实现
4.2.1关键数据库表设计
数据库表用于存储相对较复杂的数据,如账户信息、邮件文件夹、邮件信息等。本系统采用的轻型数据库SQLite。根据概要设计数据库表的分析,系统中关键表共有如下几个:
表4.2 邮件信息表
字段 |
类型 |
NULL |
注释 |
message_id uidl size date time subject sender_address sender_nickname to_list reply_to_list content_type content_enconding html_content text_content flag_seen flag_answered flag_deleted flag_star flay_spam |
INTEGER VARCHAR(30) SMALLINT DATE TIME NTEXT VARCHAR(30) NVARCHAR(20) TEXT VARCHAR(30) VARCHAR(30) VARCHAR(30) NTEXT NTEXT BOOLEAN BOOLEAN BOOLEAN BOOLEAN BOOLEAN |
Y Y Y N N Y Y Y Y Y Y Y Y Y N N N N N |
主键 id POP 邮件唯一识别码 邮件大小 发送日期 发送时间 主题 发件人地址 发件人名称 收件人列表 回复地址列表 邮件类型 编码格式 html内容 text文本内容 已读标记 回复标记 删除标记 星标 垃圾邮件标记 |
4.3 附件信息表
字段 |
类型 |
NULL |
注释 |
attach_id message_id store_data size name mime_type content_enconding content_id content_disposition |
INTEGER VARCHAR(30) BLOB SMALLINT NVARCHAR(20) VARCHAR(20) VARCHAR(10) VARCHAR(30) VARCHAR(30) |
N N N N N N N N N |
主键 id 所属邮件id 内容数据 附件大小 附件名称 附件类型 编码类型 邮件内容ID 附件属性名 |
表4.4 文件夹与邮件存储联系表
字段 |
类型 |
NULL |
注释 |
folder_id message_id |
INTEGER INTEGER |
N N |
文件夹ID 邮件ID |
表4.5 文件夹信息表
字段 |
类型 |
NULL |
注释 |
folder_id account_address folder_name flag_sync last_update |
INTEGER VARCHAR(30) NVARCHAR(20 BOOLEAN DATETIME |
N Y N N N |
文件夹ID 所属账户地址 文件夹名称 同步标记 文件夹最后更新时间 |
表4-6邮箱账户信息表
字段 |
类型 |
NULL |
注释 |
account_address account_password account_type account_alias display_name incoming_server incoming_port incoming_auth outgoing_server outgoing_port |
VARCHAR(30) VARCHAR(20) VARCHAR(10) NVARCHAR(20) NVARCHAR(20) VARCHAR(20) INTEGER SMALLINT VARCHAR(20) INTEGER |
N Y N Y Y N N N N N |
邮箱地址(主键) 账户密码 账户类型 账户别名(显示在收件方) 账户显示名称(本地显示) 收件服务器地址 收件服务器端口 收件服务器认证方式 发件服务器地址 发件服务器端口 |
表4-7 联系人信息表
字段 |
类型 |
NULL |
注释 |
contact_id contact_alias contact_s |
SMALLINT NVARCHAR(20) VARCHAR(20) |
N N N |
主键ID 联系人名称 联系人邮箱地址 |
4.2.2数据调用实现
1.文件调用
文件调用设计到Android系统的权限问题,需要先申请权限,得到用户同意后才能获得文件的调用资格,这是Android平台的文件安全保障机制。通过代码“android.permission.WRITE_EXTERNAL_STORAGE”获得文件调用权限,实现该功能关键代码如图4.8所示:
图4.8 文件调用关键代码
2. SharedPreference 调用
SharedPreference对象不可以存储数据或者修改数据,只能对数据进行读取的操作,因此通过使用免费开源的Editor编辑器来实现,详细步骤如下:
(1)通过Context类得到SharedPreferences的实例化对象sp;
(2) 利用sp对象中的edit()方法获取对象editor(Editor实例化对象);
(3) 利用editor对象来存储键值对key-value数据;
(4) 通过editor对象中的comniit()方法保存已经取得的数据。
3. SQLite调用
SQLite数据是直接集成在Andriod平台的,首先创建SQLite数据库,实现SQLiteOpenHelper的子类MCHelper中的onCreate和onUpgrate方法,通过这两个方法来创建和更新数据库。
SQLiteDatabase的核心数据库子类MCDb可以实现数据的增、删、改、查等功能。本文采用SQLiteDatabase中提供的方法来操作数据库,数据库的增、删、查、改的方法以及说明如表4.8所示。
表4.8 数据库增删改查操作字段及说明
5系统测试及性能分析
良好的测试工作才能正确的评估系统的质量,本文对系统的功能和性能都做了详细的测试,具体介绍如下。
5.1系统测试环境
本文设计的邮件客户端在魅族手机MX3下完成,但考虑到不同Android版本可能会对邮件客户端造成影响,所以还用了不同版本的Android模拟器进行测试。
表5-1 测试设备型号及版本列表
设备型号 |
Android版本 |
Android 模拟器 Android 模拟器 Android 模拟器 魅族 MX3 |
2.3 4.1 4.3 4.4 |
5.2功能模块测试
5.2.1邮件收发模块
邮件收发模块具体分为邮件发送子模块和邮件接收子模块。发送一封新邮件的时候需要填写邮件收件人、邮件的主题和邮件内容等,如图5-1所示。新邮件的编辑中还可以添加附件进行发送,如图5-2所示。邮件的的收件箱截图效果如图5-3所示。
图5-1 发送纯文本邮件 图5-2 发送带附件邮件 图5-3 邮件收件箱
5.2.2系统登录模块
图5-4为该客户端的登录界面,这里加入了一个记住密码和自动登录功能的人性化设计,方便了用户使用本系统,经测试该功能简单实用。图5-5为登录系统后该客户端的主界面,界面简洁明了,分为联系人、发送邮件、收件箱、添加账户等几个功能,方便用户执行相应操作。
图5-4 客户端登录界面 图5-5 客户端的主界面 图5-6 收件箱的邮件分类
5.2.3邮件管理模块
图5-6为邮件收件箱里面的文件夹分类,具体包括收件箱、未读邮件、已读邮件、星标邮件、已删除邮件、垃圾邮件等分类,方便用户对邮件的分类管理和查找。
5.2.4联系人管理模块
图5-7为本软件联系人的列表,图5-8是对联系人列表进行批量操作,图5-9是添加一个联系人的模板。
图5-7 联系人列表 图5-8 多选联系人 图5-9 添加联系人
6结论与展望
6.1结论
在本课题研究中,从项目调研到系统设计,再到系统的实现大概历时4个月左右。本系统是基于Android平台,采用SMTP和POP3邮件协议,结合Java语言来开发的邮件客户端系统,核心功能邮件的收发是采用JavaMail技术来实现的。
系统选择基于Android平台客户端原因有两点:一是安卓市场的用户量庞大;二是选择客户端可以弥补B/S架构邮件系统存在的不足,如用户名和密码频繁输入等。
系统在开发期间碰到了非常多的问题,如Android开发环境配置问题、系统I/O问题、收件箱无法正常显示问题、用户名和密码无法保存问题等,在指导老师和同学的帮助下,并通过查阅大量文献、学习资料和相关技术文档,问题都逐一解决了。
系统一共分为系统登录、邮件收发、邮件管理、联系人管理四大模块。系统的核心功能已经基本实现,测试可以正常登录收发邮件。系统界面设计简洁美观,用户使用起来操作简单、方便易用。
6.2展望
虽然初步完成的邮件收发系统的设计与开发,但是我发现本软件仍然有很多提高的空间,有很多想法可以加入进去,但由于目前技术的局限性,得有待后期的持续开发。本文并未涉及邮件内容的加密模块,和垃圾邮件的过滤模块,这对于一款邮件客户端来说是很重要的用户需求,因此后期将会着重研究这两块的技术要点难点,尽力去完善好一款邮件客户端软件。