中国互联网络信息中心(CNNIC)技术部 胡安廷
电子邮件,作为重要的网络应用之一,在我们的日常生活和工作中起着至关重要的作用。随着多语种域名在全球的应用和普及,使用多种语言文字来表征自己的邮件地址显得尤为必要。多语种邮件地址的主要目的,就是让人们可以使用自己的母语来组成亲切的、便于记忆的、有意义的邮件地址。由此便产生了对多语种邮件的需求。
多语种邮件地址(Internationalized Mail Addresses,IMA)由多语种本地部分(Internationalized Local Part , ILP)、一个”@”符号和一个多语种域名(Internationalized Domain Name, IDN)并按照这个顺序组成。对于”@”符号右边的域名部分, 已经由IETF发布的关于多语种域名协议处理框架(IDNA)制定好解决方案,这为多语种邮件技术解决方案的提出提供了基础、前提和保障。
随着国内中文域名的推广和普及,人们对中文域名邮件的需求显得尤为迫切。如何搭建支持中文域名邮件地址的邮件服务器系统、如何开发支持中文域名邮件地址收发的邮件客户端,成为大家关心的问题。鉴于此,本文将从Internet邮件原理、中文域名邮件技术解决方案的提出、技术实现框架、解决方案示例等几个方面,介绍了中文域名邮件技术解决方案,以期为您在中文域名邮件相关服务及应用的开发工作中提供参考。
1、Internet邮件原理
Internet电子邮件系统采用“存储转发”(Store and Forward)的工作方式。发送方通过邮件客户程序,将编辑好的电子邮件从发送端计算机发出,在网络传输的过程中,经过多台计算机的中转,最后到达目的计算机,送到收信人的电子信箱。在Internet上,电子邮件的这种传递过程有点像普遍邮政系统中常规信件的传递过程。
如图1:传统的Internet件系统的逻辑流程图。

图1:传统的Internet邮件系统
2、中文域名邮件技术解决方案的提出
多语种域名技术解决方案的提出与顺利实施,为中文域名邮件技术解决方案提供了前提。就多语种域名技术解决方案的讨论,历时三年多时间,先后提出了三种方案。在2001年8月的第51届IETF会议上,专家最终一致确定采用ACE编码方式,即:通过全面升级现行的网络应用程序,将Unicode表示的多语种域名进行编码,用ASCII来表示,从而兼容现行ASCII域名体系,保障网络整体安全。
多语种域名技术解决方案的提出,也为中文域名邮件技术解决方案提供了借鉴。中文域名邮件的基于邮件用户代理(MUA)的解决方案,是在传统邮件系统的基础上,在客户端应用程序中增加了中文域名邮件地址处理模块(Chinese Mail Addresses Model,CMAM),服务器端的邮件存储系统中则只需加载中文域名邮件地址对应的Punycode数据。
如图2:中文域名邮件系统的逻辑结构。

图2:中文域名邮件系统
基于邮件用户代理的技术解决方案,同多语种域名技术解决方案相一致,只需要在用户客户端做升级改动,最大程度上避免了邮件基础设施的变动,保障了网络的稳定性、可靠性、安全性,节省了升级成本。
3、中文域名邮件技术实现框架
中文域名邮件的技术实现框架,如图3。其中,中文域名邮件地址处理模块用于处理客户端应用程序中的中文域名邮件地址,即:在显示给用户的时候使用Unicode编码,其余时候都以与之等价的ACE编码形式出现。
 图3:中文域名邮件技术实现框架
在邮件客户端,用户输入一个中文域名邮件地址,系统将本地编码翻译成Unicode编码,通过中文域名邮件地址处理模块(CMAM)转换得到对应Punycode编码,提交邮件服务器。或者相反,通过CMAM,将接收到的Punycode表示的邮件地址,最终转换成本地编码显示给用户。
而邮件服务器端无需作任何修改,只是在使用中文域名邮件地址时,需事先将对应Punycode编码作为服务器的加载数据。这就需要借助一些在线或者离线的ACE转码工具来实现;或者,如果你使用注册系统,可以通过加载转码库,调用其中转码接口来实现Punycode数据的自动加载。
4、中文域名邮件技术解决方案示例
为了给大家提供一个中文域名邮件的体验平台,我们搭建了天蓝蓝中文域名邮件系统。您可以访问中文域名:http://天蓝蓝.cn,申请中文域名邮件账户,感受中文域名邮件新体验。
4.1 天蓝蓝中文域名邮件系统简介
系统主页如图4:

天蓝蓝具有如下新的特性: (1) 支持多个中文域:“@天蓝蓝.cn”、“@互联网中心.cn”等; (2)支持两种访问方式:浏览器Webmail访问、邮件客户端软件(如:Microsoft Outlook/Outlook Express/Foxmail等)访问
其中,浏览器Webmail访问方式又具有如下新特性: (1)中文注册:可以直接使用中文域名邮件账户进行注册; (2)中文登录:可以直接使用中文域名邮件账户进行登录; (3)收件人:收件人字段(To/Cc/Bcc)可以直接使用中文域名邮件地址; (4)发件人:发件人字段(From)以中文显示,用户收到时看到的是对应的中文域名邮件地址,并且可以直接回复。
4.2 天蓝蓝中文域名邮件系统的构建
天蓝蓝的构建采用REDHAT9.0+qmail+vpopmail+mysql+sqwebmail+vqregister的组合方案,并在此基础上,使用多语种域名转码库,对qmail的注册及登录模块进行二次开发。下面将就天蓝蓝中文邮件系统的构建过程作简单介绍。
(1) Qmail服务器的搭建
Qmail+mysql+vpopmail的安装,不涉及中文域名问题,可参考相关资料首先搭建纯英文的邮件系统。应根据安装步骤一步一步进行,最后启动qmail进行测试。如果qmail正常启动,再在MS Outlook/Outlook Express/Foxmail等邮件应用程序中配置邮件账户(在vpopmail安装时添加的),测试qmail的SMTP和POP3是否正常。注意由于vpopmail支持虚拟域名,所以在邮件应用程序中配置邮件帐号时,用户名要加上域名;另外,SMTP是带认证的,在邮件应用程序中也要作相应设置。
Qmail服务器的搭建是中文域名邮件系统正常运行的基础和前提,务必先将qmail调试正常,再继续下面的安装操作。
(2) 增加中文域及中文的用户
在使用英文的域名和用户名对qmail收发等功能进行测试都正常的情况下,使用vpopmail提供的命令vadddomain增加一个中文域,使用vadduser增加该中文域的一个中文用户,当然这里须使用中文域和中文用户对应的Punycode编码。然后在邮件应用程序中配置该中文域名邮件账户,测试收发等是否正常。测试结果应该是正常的,只是不论是发件人还是收件人,他必须面对那些晦涩难懂的Punycode编码,中文域名的提出失去了它本来的意义。解决方法便是,按照中文域名邮件系统的技术实现框架升级邮件应用程序,保证在显示给用户的时候使用Unicode编码,其余时候都以与之等价的ACE编码形式出现。
(3) 转码库的加载
随着多语种域名实现的进展,出现了很多适用于不同平台的多语种域名转码库,它们提供了丰富的转码接口,供二次开发使用。如GNU Libidn等, CNNIC也提供了适用于Linux、Solaris、FreeBSD、Windows等平台的中文域名转码工具包,实现GBK编码与punycode编码的相互转换。关于多语种域名转码库资源,详见文后的附录。
在这里我们使用CNNIC提供的idn-conv-linux-1.0.tar.gz,解压、编译、安装即可。其中还提供了引用转码接口的示例程序。
(4) sqwebmail的二次开发
对于一个完整的邮件服务系统,Webmail是一个非常重要的功能模块。Webmail的种类很多,比较知名的有Sqwebmail、Horde/IMP、iGENUS等等。Sqwebmail可以和vpopmail很好的结合,对于qmail+vpopmail的系统,sqwebmail是最好的选择。
Sqwebmail默认提供的界面看上去有些丑陋,但其整体的web界面可以很方便地定制。目前国内不少webmail产品,都是在sqwebmail基础上汉化、美化、完善而成,如wmail。中文域名邮件相关的二次开发便是针对sqwebmail核心模块。具体方法是,分析源码,就登录、新建邮件等子模块,在涉及中文域名邮件地址的地方调用相应转码接口,最后对sqwebmail模块进行编译、安装、调试即可。
(5) vqregister的二次开发
Web方式注册及创建账户,对于免费邮局网站来说是一个必备的功能。作为sqwebmail的一个补充,vqsignup和vqregister都可以提供这个功能。相比较而言,vqregister可以实现较多的功能,如可以在用户注册成功后发送确认邮件,可以预设用户密码、限定密码长度等。天蓝蓝的构建便采用了vqregister,二次开发过程同sqwebmail类似。
5、小节
中文域名邮件系统的构建有很多种可行的途径,天蓝蓝只是一个示例。对现有邮件应用程序进行升级,或者开发新的邮件应用程序时,可选用同应用程序实现相吻合的多语种域名转码库,参考中文域名邮件技术实现框架,以提供中文域名邮件的新功能。一些邮件技术提供商,由于越来越多的用户提出这样的需求,开始着手或者已经推出自己的升级产品以支持中文域名邮件。国内多家邮件服务商也相继推出了中文域名邮件服务。随着中文域名的推广和普及,相信中文域名邮件将逐渐显现出传统邮件的生机。
附录:多语种域名转码库资源
1、Active Server Pages/ActiveX Group for Business Intelligence IDN Libraries (German):http://www.g4bi.com PSTRUH ScriptUtilities:http://www.pstruh.cz/help/scptutl/upload.asp 1、 C/C++ CNNIC:http://winter.cnnic.net.cn/cdns/conv/ GNU Libidn:http://www.gnu.org/software/libidn/ VeriSign IDNSDK:http://www.verisign.com/nds/naming/idn/sdk.htmlJava GNU Libidn:http://www.gnu.org/software/libidn/ VeriSign IDNSDK:http://www.verisign.com/nds/naming/idn/sdk.html Java-IDNA:http://www.net-track.ch/opensource/java-idna/ 4、PERL IMC idna.Pl:http://www.imc.org/idna/ ActivePerl 5.8+:http://aspn.activestate.com/ASPN/PerlPHP IDNA Convert:http://php.mediate.sk/browse/package/1509.html PHP API for GNU Libidn:http://php-idn.bayour.com/ 6、Python ActivePython 2.3+: http://aspn.activestate.com/ASPN/docs/ActivePythonGNU Libidn:http://www.gnu.org/software/libidn/
|