学术论文网
基于Android邮件JavaMail技术的设计与实现
发布日期:2024-10-19 17:40:22

  3.2系统概要设计

  3.2.1系统功能模块

  系统功能模块可以分成邮件收发模块、邮件管理模块、账户管理模块、联系人模块四大功能模块,每个功能模块又可以细分成几个小功能模块,具体划分如题3.2所示。邮件收发功模块包括邮件的发送与接收,是该软件最基础也是最核心的功能。邮件发送功能是用来发送或者回复编辑好的邮件,邮件接收功能当用户手动刷新或设置定时检查邮件更新时会被调用。接收到用户的相关指令后,该模块是在系统后台进行运行的,然后再通过UI界面将邮件内容呈现给用户。邮件管理模块主要是针对邮件的种类进行一个分类操作管理,方便用户在最快的时间内查询到自己所需要的邮件。具体包括可以对重要的邮件打上星标,并把它归于星标邮件文件夹。用户还可以进行邮件删除,邮件编辑,邮件转发,邮件回复等基本功能性操作。账户管理模块是为多用账户模式设计的一个模块,具体可以添加新的邮箱账户,给同时具有多个邮箱平台账户的用户提供了方便。联系人管理模块与邮件收发模块紧密联系,邮件收发模块可以调用联系人模块里面存储的联系人进行快速的发送邮件,为用户提供了高效便捷的邮件发送方式。可以对该模块中的联系人信息进行增加、修改、删除等操作。

  图3.2 系统功能模块图

  3.2.2邮件加密模块

  邮件实现传输过程加密的功能是需要邮箱服务器运营商提供支持的,具体要看其是否支持加密功能,并提供加密端口号。目前主流邮件服务器提供商都支持SSL/TLS传输加密,所以邮件客户端向服务器发送登录请求之后,一旦用户名和密码认证通过,就会建立一条加密的邮件传输通道,邮件的收发都在其通道进行的,从而邮件安全得到了保障。

  3.2.3数据存储模块

  SQLite是一个针对内存等资源有限的设备提供的一种高效的嵌入式数据库引擎。它的数据是存储在单个文件中,可以进行跨平台的拷贝,可移植性非常高。本课题综合考虑现有的数据库存储方式,最终采用SQLite作为本软件的数据存储的方式。

  一个邮件账户里面可以存在多个文件夹分类,所以它们是一对多的关系;每一个文件夹按组别可以存储多封邮件,每一封邮件又可以按其性质不同而存放在不同文件夹中,因此它们是多对多的关系;每封邮件里面可能同时附带多个附件,所以它们是一对多的关系,具体的数据库E-R图如图3.3所示。每个联系人分组可以保持多个联系人信息,每一个联系人信息又可以同时隶属于多个不同联系人分组,所以它们是多对多的关系[10],具体E-R图如图3.4所示。

  图3.3关键信息存储E-R图

  图3.4联系人和联系组E-R图

  4系统详细设计与实现

  根据之前对邮件系统的功能需求进行分析和整体概要设计,本章对系统每一个功能模块的做出相应的详细设计与实现。

  4.1功能模块的设计与实现

  4.1.1邮件收发模块

  邮件收发模块是通过JavaMail技术来实现的。JavaMail提供完美的邮件收发功能类,只需通过将其jar包倒进项目即可调用其功能。

  4.1.1.1 邮件发送

  邮件发送功能主要是利用SMTP协议将邮件由客户端发送给邮件服务器。用户需要编辑新的邮件,邮件内容包括收件人、主题、正文等,只有格式正确邮件才能发送出去。此外,基于邮件使用的特性,可以对已收到的邮件进行回复或者转发。当回复邮件时,客户端系统会自动将该封邮件的发件人设置为收件人,将收件人设置为发件人,并在原来的主题之前加上“回复”的字段,而正文部分还是复制原来邮件的正文内容,然后在此基础上用分隔符隔开。转发邮件时,收件人将为空,用户可以手动输入或者直接从联系人列表里面调用,邮件主题会加上“转发”字符。邮件在发送前还可以选择不同格式的附件发送,例如可以将一张照片或一段视频作为附件发送出去。

  具体发送一封纯文本邮件的代码如图4.1所示:

  图4.1 发送纯文本邮件代码

  具体发送一封带附件邮件的关键代码如下图4.2所示:

  图4.2 发送带附件邮件代码

  4.1.1.2 邮件接收

  邮件接收是利用POP3协议去邮箱服务器上收取邮件的过程,基本步骤如下:

  (1)设置发送邮件所使用的协议类型、收件方服务器,通过使用Properties类来实例化对象props;

  (2)使用Session类新建一个对象session,将props的值传入;

  (3)使用session从中获取POP3邮箱的存储对象store(Store抽象类的实例);

  (4)获取用户输入邮箱账号和密码连接POP3服务器,并做用户的认证;

  (5)从store对象中获取收件箱的内容,并创建folder(Folder类的实例),用于表示邮件夹;

  (6)从folder中获取已经存在的对象messages(Message类的实例),即收件箱中的邮件;

  (7)messages[i]即表示第i封邮件,其内容包括发件人、主题、正文等内容;

  当收取的邮件附带附件时,还涉及到附件导出到文件的操作,附件导出处理的主要代码如图4.3所示;

  图4.3 处理邮件附件导出的关键代码

  4.1.2邮件管理模块

  1.邮件移动

  为了方便用户分类整理邮件,本系统提供邮件分类,可将邮件移动的功能,如可以将谋一封邮件从收件箱中转移到星标邮件文件夹中。邮件移动有两种方式,分别为复制邮件和剪切邮件,可以根据该封邮件所属的文件夹ID的属性值进行移动。关键函数的代码如图4.4所示:

  图4.4 移动邮件的关键代码

  使用邮件类MMessage中的copyToFolder和moveToFolder方法,完成复制和剪切功能。使用文件夹类MFolder中的方法checkDup,可以检查目标文件夹中是否已经存在该封邮件了,有存在的话就不需要移动邮件了。

  2.邮件刷新

  邮件刷新功能是为了用户能及时接收到新邮件,系统会设置一个默认的刷新时间,每隔一定的时间,自动刷新邮件,以便及时的收到新的邮件,同时又可以尽可能的减少系统的资源损耗和避免浪费宝贵的流量。当接收到新邮件时,本软件会有相应的提示信息用来通知用户,同时会将该封新邮件交给邮件接收模块来处理。

  3.邮件删除

  考虑到邮件的重要性,删除邮件的操作将有相应的保护机制来防止误删除邮件的事情发生。所以本软件删除一封邮件后并不会真的从本地数据库中删除了,而是将该封邮件移动到已删除邮件的文件夹之下。用户可以对已删除的邮件进行恢复操作或者将邮件彻底删除。

  邮件标记

  重要的邮件用户可以打上星标,做为星标文件存储在星标文件夹中,方便用户随时查阅。

  4.1.3账户管理模块

  账户管理模块可以添加新账户和删除已存在的账户,目的是便于用户可以保存不同邮件运营商的邮箱账户和密码,实现快速切换。添加新账户必须要先通过邮件服务器认证,只有通过认证才会将该账户名和密码存储到本地数据库当中。账户管理模块包括邮件客户端的登陆界面和功能界面里面的添加新账户模块,登陆界面做了一个非常人性化的设计,可以保存用户的邮箱地址和密码,方便用户下次快速的进入邮件客户端。具体的邮箱账户登录流程如图4.5所示。

  图4.5 手动登陆添加账户流程图

  收先判断终端设备的网络是否连通,当收不到网络连接时,会提示用户手动连接网络。然后用户可以在登录界面输入邮箱帐号和密码,点击登录按钮登录。这时候邮件客户端会挂起主线程,开启一个新线程去和服务器交互,判断用户的邮箱帐号和密码是否正确。如果正确则返回true,进入邮件客户端主界面。否则提示用户邮箱账户和密码出错,需要重新输入。判断手机终端设备网络连接状态的代码如图4-6所示:

  图4-6 判断网络连接的代码

  4.1.4联系人管理模块

  本模块主要存储邮件联系人的姓名和邮件地址供邮件收发模块调用,方便了用户编写新邮件,同时也提高了本软件的方便性和实用性。用户可以添加常用的邮件收件人的地址到联系人里面,也可以对联系人进行编辑修改和删除等操作。

  4.1.5邮件传输加密

  邮件传输加密需要邮件服务器运营商提供支持,目前绝大部分邮件服务器都默认支持传输加密的,邮件服务器通过提供特定端口来实现邮件传输加密服务。邮件协议端口如表4.1所示。

  表4.1邮件协议传输端口表

  SMTP服务器开启相应的端口就有支持相应的加密方式。如果SMTP服务器打开了465端口号,邮件在传输过程中就通过SSL/TLS协议加密,该加密方式的实现方式是客户端与邮件服务器建立连接后就可以直接对传输的邮件内容进行加密的;如果SMTP服务器打开了587端口号的话,则邮件在传输过程中支持STARTTLS协议加密,该加密方式与前面提到的加密方式有点区别,只有当SMTP服务器收到客户端发给它的STARTTLS命令后,邮件客户端和服务器端才会开始加密传输邮件内容。用SSL/TLS加密方式加密IMAP协议,初始化配置程序代码如图4.7所示:

  图4.7 SSL/TLS加密方式初始化代码

 2/3     1 2 3  
Copyright © 2008-2020 学术论文网 版权所有 粤ICP备16093775号