APP下载

基于Apache James的WebMail收发第三方邮件的设计与实现

2015-10-30赵义辉乔运华张振超袁金鹏

制造业自动化 2015年11期
关键词:邮箱邮件账户

赵义辉,乔运华,张振超,袁金鹏

(北京机械工业自动化研究所,北京 100120)

0 引言

随着企业信息化的不断发展,EIP(企业信息门户)在企业中的应用越来越普及,也对用户邮件业务往来提出了更高的要求。目前几乎人人都有自己的电子邮箱,有些人甚至有多个不同的邮箱账户,诸如Gmail邮箱、新浪邮箱、网易邮箱、QQ邮箱等等。WebMail是一个基于Web的电子邮件收发系统,用户通过WebMail系统可以直接通过浏览器进行收发邮件,无需进行客户端的安装配置;另外,WebMail系统还可以根据企业需要与其他业务系统(诸如EIP系统,ERP系统)进行集成使用,用户使用方便快捷。目前在RS10系统集成了WebMail邮件系统,这样在RS10系统中处理业务时将一些处理信息通过邮件形式反馈给其他用户。而不同企业存在不同的邮箱账户,一些公用免费邮箱也存在着多样性问题,为了让用户在处理业务在一个统一的邮箱平台上,WebMail邮件系统中通过添加第三方邮箱账户便可实现不同域名的邮箱邮件的实时收发,这样便可以实现RS10系统平台化处理业务,进行统一操作界面下的收发文办公等。

1 关于Apache James

Apache James全称Java Apache Mail Enterprise Server,是Apache组织的子项目之一,是完全基于Java技术,实现了SMTP、POP3与NNTP等多种邮件相关协议的电子邮件服务器。

WebMail中所使用的邮件服务器即为Apache James Server 3.0-M3版本。通过前期技术预研以及服务器性能测试,在RS10系统中集成的WebMail选择这一邮件服务器,并在实际的部署环境中运行性能稳定。

2 WebMail与RS10系统的集成

RS10系统是集多年ERP系统设计、开发、实施的经验,结合中国国情和企业管理发展需求,适应电子商务环境的企业管理信息化的全面解决方案。RS10系统将以物流、生产、资金三大体系为主线,集成供应链、客户关系管理等外部资源,构筑信息交流的综合平台,实现物流、信息流、资金流、责任流的四流统一。在目前的RS10系统中集成了WebMail邮件系统,以便于在制造业的业务系统中处理实际业务时将处理信息及时反馈。在WebMail系统中编写了对外暴漏的接口以供EIP页面调用,并在EIP系统中设置了轮询机制来调用WebMail其中一个读取未读邮件数的接口服务,这样即可实时显示用户未读邮件数。WebMail系统中的企业通讯录数据均来自于EIP系统,用户的通讯录数据是一致的,故在Oracle数据库设计方面也保持了一致性,通过设置用户的数据库连接配置文件,使得WebMail获取的通讯录数据与EIP系统中的是一致的。

W e b M a i l系统使用了三个开源框架:SiteMesh(2.4.1)、Spring(2.5.6)、Hibernate(3)作为支撑。SiteMesh应用Decorator模式,用filter截取request和response,把页面组件head,content,banner结合为一个完整的视图,提高了页面的可维护性和复用性。Spring是基于控制反转(Inversion of Control ,IoC)和面向切面(Aspect Oriented Programming ,AOP)的容器框架,提供了WebMail接口层,其他RS10的子业务系统在需要邮件收发功能时,直接进行调用。Hibernate是为邮件系统的MySql数据库提供数据持久化支撑的。

3 收发第三方邮件的设计

首先配置邮件服务器,通过配置 James Server安装目录james-serverconf下的database.properties、dnsservice.xml、domainlist.xml、mailecontainer.xml等文件后运行james-serverin目录下的run.bat启动James服务器。在启动过程中注意观察控制台提示启动成功后,检查MySQL数据库成功创建数据表:james_domain,james_mail,james_mail_header,james_mail_property,james_mail_userflag,james_mailbox,james_recipient_rewrite,james_subscription,james_user,openjpa_sequence_table。这些表结构都是James要使用的,其中的james_mail即为邮件表,用于存储邮件信息。基于现有的数据表,只修改james_mailbox表结构便可实现WebMail收取第三方邮件。新增NETBOX_PASSWORD,PASSWORD_HASH_ALGORITHM,NEWEST_SENT_DATE 字段,下图即为修改后的james_mailbox表结构:

其中NETBOX_PASSWORD字段为其他邮箱账户的密码(加密后);PASSWORD_HASH_ALGORIHTM字段为密码加密所使用的算法;NEWEST_SENT_DATE为最新的收取邮件时间。

收发第三方邮件的系统处理流程:

4 收发第三方邮件的实现

通过前台表单提交业务系统中的使用到的第三方邮箱账户及密码,通过邮箱用户名后缀来获取第三方邮箱服务器地址。WebMail先通过Authenticator类认证用户名密码,需要SSL加密连接的进行SSL加密处理,然后获取session,并且连接到了第三方邮箱的相应账户下的store,打开相应的Folder,就可得到所有邮件(本WebMail考虑到邮箱容量的限制,设置为获取最近三个月的邮件),注意获得邮件后及时关闭连接 。

验证通过的第三方邮件账户、选定的哈希算法以及通过选定的哈希算法对第三方邮箱账户下的密码进行加密处理之后存储到james_mailbox表中。

通过此方法获取到的邮件Message对象是只读的,此时必须要新建一个Message对象,将获得的只读的邮件对象中的信息解析后设置到新建的Message对象中。因无法直接将邮件对象通过Hibernate存储到james_mail表中(考虑到此方法的复杂性,涉及到Apache James服务器自动处理的其他几张表,RS10系统中的外部邮件处理均通过Apache James处理存储到数据库中,并且对邮件数据库中邮件的处理不影响实际第三方邮箱服务器),此时可以考虑将此封邮件发送至当前用户的WebMail账户下,并将其他信息通过一定的方式组合后添加至邮件主题中。全部第三方邮件通过James Server发送成功之后,将以上处理的所有邮件的发件人、发送时间、收件人进行批修改,前台获取数据展示时通过jstl标签来处理邮件主题及收件人信息。每次收取邮件后,在james_mailbox表中的NEWEST_SEND_DATE字段记录最新的收取时间,下次收取邮件保证只收取在该收取时间之后的邮件。系统连接第三方邮箱服务器并通过POP3协议收取邮件部分关键代码:

在RS10系统中即可以第三方账户发送邮件,通过进入WebMail第三方邮箱邮件列表页面上的发邮件来实现。通过记录的第三方账户,从james_mailbox表中读取加密后的密码,并通过解密算法来获得真正的密码,然后通过该第三方账户及密码连接第三方邮件服务器,连接之后通过SMTP协议发送邮件。通过SMTP协议发送邮件部分关键代码:

5 结论

在RS10系统实际的业务处理中,存在着邮件信息交互的邮箱多样性问题,而且不同企业往往使用不同的企业邮件,这样在企业办公中的邮件收发存在着多个邮箱操作平台,这给企业信息交流、公文收发等实际的业务流程处理带来了极大的麻烦,诸如本研究所每个用户既有oa办公邮箱账户,又有ac.cn邮箱账户,在处理不同邮箱邮件需要登录不同的邮箱收发邮件。本文提出的解决方案,在RS10系统下的EIP信息门户中集成了WebMail邮件系统,并很好地将多个不同域名邮箱中邮件集中到了这一统一的邮件平台上,为用户提供了统一的收发业务邮件接口,并在数据库后台可以统一集中管理邮件数据信息,提高了RS10系统的业务数据安全性以及业务办理效率。

[1] 张孝祥,方立勋.JAVA邮件开发详解[M].电子工业出版社,2007.

[2] http://james.apache.org.[EB/OL].

[3] 张红斌.java2高级程序设计[M].中科多媒体出版社,2001.

[4] 李峰,刘彦隆.基于SSH框架与jQuery技术的JavaWeb开发应用[J].科技情报开发与经济,2010,20(6):106-108,117.

[5] 孙卫琴.精通hibernate[M].电子工业出版社,2005.

[6] 陆天波,王娟,李俊娥.基于Java Servlet的WebMail系统[J].计算机工程与设计,2002,23(10):38-39,43.

[7] 朱玲.基于James的WebMail的设计与实现[J].农业网络信息,2007(7):38-39,44.

猜你喜欢

邮箱邮件账户
关于变更投稿邮箱的通知
关于变更投稿邮箱的通知
基于James的院内邮件管理系统的实现
来自朋友的邮件
如何切换Windows 10本地账户与微软账户
探索自由贸易账户体系创新应用
Windows10账户的删除、禁用与启用
外汇账户相关业务
没问题邮箱
一封邮件引发的梅赛德斯反弹