支持多国语邮件地址的电子邮件服务器的设计与实现

2020-09-10 17:24祝宇杰
看世界·学术上半月 2020年6期
关键词:电子邮件

祝宇杰

摘要:电子邮件是在互联网上出现最早的服务之一,最初的电子邮件只能收发一些简单的文字信息,整个电子邮件系统并没有得到更多的重视。但是随着互联网的快速发展和网络用户成倍的增加,电子邮件开始被广泛的使用。论文研究开发出可以支持多国语邮件地址的电子邮件服务器,让不同语言和不同文字的用户之间能够更加便利的使用电子邮件。整个开发过程选择在Windows7 64位操作系统上采用JAVA语言来编写SMTP服务器以及对应的发信客户端,使用hMailServer来搭建基础的邮件服务器。运用各种工具和开源库来实现支持多国语邮件地址的电子邮件服务器。

关键词:电子邮件;  JAVA; SMTP; hMailServer

一、 概述

(一)、电子邮件的基础介绍

电子邮件又可以称呼为emali或者E-mail,它指得是通过网络传输来实现信息收发的一种服务,而这种服务需要两个或者更多的用户来完成。internet最为基本的一项功能就是电子邮件,它可以有效地进行电子化的数据异地交换[1]。

(二)、电子邮件现状

伴随着互联网的不断发展,电子邮件的应用也在不断的发展,越来越多的人使用电子邮件进行收发信息。在中国大部分人群的英语水平都是有限的,而电子邮件地址又只能是以英文作为域名大大的增加了语言障碍[2]。

二、基础技术研究

(一)、电子邮件地址结构

电子邮件的地址由3部分组成:用户标识符(USER)+“@”符号+域名。第一部分的用户标识符(USER)代表了用户邮箱的账户号。第二部分的“@”符号是分隔符,“@”代表的是英文“at”的意思,意为“在”。@左边的部分就是用户标识符,右边的部分是域名。第三部分是用户邮件接收服务器的域名标识符,用以表示其所在的位置,也是邮件要投递到的目的地服务器的域名。

(二)、主要的传输协议

在互联网世界里信息的传输是根据具体的协议来进行的,邮件的传输也不例外,也是根据既定的协议来通信的,基于标准的通信协议。其中最重要的通信协议就是SMTP协议、POP3协议以及IMAP协议[3]。

三 需求分析与设计

(一)、支持多国语邮件地址的服务器的需求分析

要实现邮件地址支持非英文(多国语)的情况,也就是需要将非英文的邮件地址的字符串转化成能够传输的并且邮件服务器支持的编码形式的字符串。在这种情况下本课题参考了RFC5335、RFC5336、RFC5337、RFC6531和RFC6533所定义的内容(后文将这5个RFC文件合称之为“SMTPUTF8相关RFC文件”),现有的协议仅仅支持传输带有UTF-8编码的邮件地址。据此,采用仅支持以UTF-8编码的多国语言邮件地址来收发电子邮件的形式作为实现结果的方式。

(二)、系统整体架构设计

使用hMailServer来搭建基础的邮件系统并独立开发一个支持多国语(UTF-8)的SMTP服务器,再使用COM库来串联独立的SMTP服务器到hMailServer上与其他的功能整合成一套完整的邮件系统。

四、开发与实现

(一)、开发环境和工具

选择在Windows系统上采用JAVA语言来编写SMTP服务器以及对应的发信客户端,使用的集成开发环境(Integrated Development Environment)是Eclipse。第三方库为JACOB(Java COM Bridge),基础邮件系统搭建工具为hMailServer,IMAP客户端为Foxmail。

(二)、基于hMailServer的基础邮件服务器搭建

使用hMailServer来搭建基础的邮件服务器,在官网上下载最新的5.6.7版本安装即可。首先是添加域名为“localhost.com”,然后建立三个普通邮件账户分别是“abc@localhost.com”和“def@localhost.com”以及“ghi@localhost.com”,大小可以不设置,密码使用简单的1到6即可。同时通过设置Aliases(别名)的方式来创建中文邮件地址(UTF-8多国语)的账户:将“def@localhost.com”的Aliases账户设置为“四川大学@localhost.com”;将“ghi@localhost.com”的Aliases账户设置为“成都@localhost.com”即可。这样设置后往“四川大学@localhost.com”的地址发送邮件也就相当于发送邮件给“def@localhost.com”。不过这两者之间的邮件传递是由hMailServer程序本身实现的。在网路上仍可视“四川大学@localhost.com”为一个独立的邮件地址。能够这样模拟生成非英文邮件地址的功能也是选择使用hMailServer的一个原因。接下来需要设置hMailServer自带的本地SMTP服务器。在Settings里可找到Protocols下的SMTP设置,在第二页Delivery of e-mail里添加本地主机名(local host name)为 “smtp. localhost.com”,其他设置沿用默认的即可。最后,需要在本地IP限制的選项里打开本地收发信相关的SMTP许可,方法是在Advanced设置里找到并打开IP Ranges,将“My Computer”和“Internet”选项里右下角的关于“Require SMTP authentication”的选项全部勾上并保存即可。通过以上设置并保存后,本地的基础邮件服务器就搭建完成了。

(三)、支持UTF-8邮件地址的SMTP服务器的实现

实现支持UTF-8邮件地址的SMTP服务器首先要满足基本的SMTP邮件服务器的功能。即,对收到的命令进行处理,主要包括EHLO、MAIL、RCPT、DATA、“.”、QUIT、RSET、NOOP、“Unrecognized command / data”等命令。同时,在业务逻辑外部需要启用一个socket来监听端口25上收到的消息,并根据消息内容进行相关业务处理。

在类HmailServer中需要定义一个COM组件对象用以传递邮件信息给hMailServer,此后,使用JACOB的API来传递收发件人地址、邮件内容等对象并保存在hMailServer中。

在类SimpleSmtpServer中,需要定义一个socket事件用于监听端口25,同时定义其输入、输出流对象并处理事件的结束和异常关闭的情况。

在SmtpMessage这个类中需要完成对邮件信头和主体的处理,包括对邮件地址的解码处理。首先声明各命令对象,主要是MAIL和RCPT,此外还有邮件内容和信头部分。

SmtpRequest类主要功能是处理各种命令的业务并且返回对应的命令,根据状态值来处理SmtpRequest类返回的具体内容,只涉及三个邮件主体部分。分别是:发信人地址(Mail)、收信人地址(RCPT)以及邮件内容(DATA),同时在处理主体时对邮件地址进行解码。最后,在SmtpState这个类中声明各种命令和状态码并调用,此外也使用函数来处理命令语与对应的字符串。

以上就是支持UTF-8编码格式邮件地址的SMTP服务器以及整个开发实现过程。

五、测试结果

(一)、系统运行

由于整个邮件系统是由独立的SMTP服务器和hMailServer的剩余功能组成,所以需要同时运行这两部分的程序进程。在IDE(Eclipse)中执行SimpleSmtpServer这个类就启用了SMTP服务器。但是由于hMailServer自带有SMTP服务器,为防止冲突,需要将hMailServer的SMTP服务器功能关闭。在IDE里执行SimpleSmtpServer类后检查Windows的后台进程,确认“hMailServer.exe *32”存在就說明整个支持多国语邮件地址的邮件服务器就在运行之中了。接来下需要配置IMAP客户端,完成了Foxmail的安装和账户设置后就可以进入测试。

(二)、测试

从邮件地址为“四川大学@localhost.com”的邮箱发送一封电子邮件到地址为“def@localhost.com”的邮箱,发送接收成功。

从邮件地址为“四川大学@localhost.com”的邮箱发送一封电子邮件到地址为“成都@localhost.com”的邮箱,发送接收成功。

六、结论

如今被互联网覆盖的区域越来越多,网络用户的不断增加,互联网应用的使用也在不断的增加。作为互联网应用之一的电子邮件从最初的简单收发信息到现在的各种各样的功能,整个电子邮件系统在不断的更新与进步。论文设计了支持多国语邮件地址的电子邮件服务器,采用了通过转化UTF-8编码为BASE64编码的形式来实现UTF-8的多国语邮件地址的SMTP服务器,结合使用开源的hMailServer所搭建的基础邮件服务器进而实现整个邮件服务器的搭建。课题从电子邮件的概念和相关基础知识的学习和研究开始逐步转进到技术和代码层面,完成了设计、开发与实现的过程,最终实现了预期的目的。

参考文献:

[1] 刘宴兵,李春.使用SMTP实现邮件发送设计[J].计算机工程与应用,2002(08):142-144.

[2] 张京鹏,胡安廷.基于中文域名的邮件系统研究[J].计算机系统应用,2007(07):45-48+53.

[3] 朱健,卢秉亮,王盛明,甄雷.邮件发送客户端SMTP协议的实现[J].微处理机,2008(01):100-102+106.

猜你喜欢
电子邮件
小测试:你对电子邮件上瘾了吗?
有奖问答
有奖问答
手机与E-mail的亲密接触
用PDA无线收发电子邮件