基于嵌入式操作系统和开发工具实现电子邮件系统的设计

从1996年的windows ce 1.0 到最新的windows ce.net, wince 已有8年历史。windows ce设计简单灵活,可在各种小型嵌入式系统中使用,且其功能强大,在最新一代的高性能工业和家用设备中也得到了充分使用。microsoft embedded visual tools是微软公司专为wince设备开发的一套开发环境,功能强大,开发方便快捷。二者的结合为实现嵌入式电子邮件系统提供了绝佳的开发环境。
本嵌入式电子邮件系统,即是以windows ce为开发平台,结合embedded visual basic 3.0开发工具设计实现的。最后采用microsoft pocket pc2002 for windows sdk工具完成系统的测试。
1 移动设备邮件系统的工作原理
目前网络上的电子邮件传送有点如同日常信件中的普通信件发送,日常生活中人们首先将邮件交给邮局,邮局再按照信封上的地址投递,最后将邮件发到收信的人信箱里,收信人只要凭借他的信箱钥匙就可以拿到信件。同样的一封电子邮件从用户手中发出,首先有一个程序把这封邮件发送到smtp服务器(发送邮件的服务器)上,再由服务器负责将邮件传递到目的信箱。然后需要一个程序接受信箱的邮件,当然也不是只要随便有一个程序就可以的,还需要帐号(如同收信人姓名)与口令(如同信箱钥匙)。所以很明显,发送邮件至少需要4个处理不同任务,有不同功能的程序:发送邮件到服务器的程序,即发送邮件客户端程序;在网络上传送邮件到对方信箱的程序,即smtp服务器程序;接受邮件并存贮给用户提取的服务器程序,即pop3服务器程序;从pop3服务器上收取邮件的程序,即接受邮件客户端程序。
收发电子邮件依靠一套标准的会话协议,其中最为著名现在最常用的有:smtp协议,该协议规定了与smtp服务器进行对话的一系列命令与过程标准;pop3协议,该协议规定了与pop3服务器进行对话的一系列命令与过程标准。还有imap4协议,类似pop3的邮件接收协议。
1.1 smtp协议
smtp(simple mail transfer protocol)又叫做简单邮件传输协议。它主要对如何将电子邮件从发送方地址传送到接收方,也即是对传输的规则做了规定。smtp协议的通信模型并不复杂,主要工作集中在发送smtp和接收smtp上:首先针对用户发出的邮件请求,由发送smtp建立一条连接到接收smtp的双工通讯链路,发送smtp负责向接收smtp发送smtp命令,而接收smtp则负责接收并反馈应答。可大致用下页的smtp通讯模型示意图来表示:
图 1 smtp 通讯模型示意图
1.2 pop3协议
pop3(post office protocol version 3)是整个电子邮件系统的基本协议之一。pop3适用于c/s结构的脱机模型的电子邮件协议。 初始时,服务器通过侦听tcp端口110开始pop3服务,当客户主机需要使用服务时,它将与服务器主机建立tcp连接。当连接建立后,pop3发送确认消息,客户和pop3服务器相互(分别)交换命令和响应。这一过程一直要持续到连接终止。
2 系统设计
该邮件系统由两个客户端程序组成,smtp mailer实现邮件和附件的发送,pop3 mail checker用于登陆邮件服务器接受原始的邮件信息。
2.1 邮件发送端设计与实现
2.1.1发送端工作流程
下图是邮件发送流程图
2.1.2具体实现
发送邮件的功能主要由embedded visual basic下的winsock控件实现winsock即windows socket,是微软公司对socket编程接口的集成。winsock使用ip协议,同时支持tcp与udp协议,在收发邮件这类基本网络数据通信的前提下,winsock控件是最好的选择。
以a—h表示邮件发送的各部分设计:
a 在这个邮件程序中,首先要连接smtp的邮件服务因此在cmdsend_click()事件中最先实施的是wsock.remotehost = serverip连接设定的服务器主机
wsock.remoteport = serverport 设定默认的端口。
b 然后开始构造邮件格式,定义字符串m_date为发送日期,字符串mdata为邮件头。语句m_date = formatdatetime(date, [vbshortdate]) & “, ” & formatdatetime(date, [vblongdate]) & “ ” & formatdatetime(time, [vblongtime]) & “” & “ -0600” 定义了邮件的发送日期。
构造邮件标题 mdata = “from:” & chr(32) & strsendname & vbcrlf & _
“date:” & chr(32) & m_date & vbcrlf & _
“x-mailer: harold smtp mailer v1.0” & vbcrlf & _
“to:” & chr(32) & strreceivename & vbcrlf & _
“subject:” & chr(32) & strsubject & vbcrlf
这个典型的邮件标题包含了:发件人,发件日期,收件人,主题以及发送邮件的程序名称。
c 当邮件程序连上服务器后,进如下一步打开邮件对话,利用winsock控件发送对话信息:wsock.senddata “helo” & “ ” & wsock.localhostname & vbcrlf
如果smtp服务器没有返回“250” 应答码,则提示“unable to establish transaction”。
d 由于现在的邮件服务器多采用esmtp协议,因此需要客户端程序发送用户名与密码等认证信息,故在打开对话过后便进入“authentication“过程,:
wsock.senddata “auth login” & vbcrlf
if not waitforresponse(“334”, 10) then
txtmsg.text = “unable to connect with esmtp server.。..。.”
wsock.senddata encode(user) & vbcrlf
wsock.senddata encode(pass) & vbcrlf
在这里调用了自编的encode函数并发送了经过base64编码的用户名与密码信息。
e 接着是发送发送方与接受方的地址:
wsock.senddata “mail from:” & “ ” & strfrommail & vbcrlf ‘发送方
wsock.senddata “rcpt to:” & “ ” & strtomail & vbcrlf ‘接受方
f 下一步是发送消息体(针对不含附件的rfc822邮件):
wsock.senddata “data” & vbcrlf ‘发送消息体
wsock.senddata mdata & vbcrlf ‘发送邮件标题
wsock.senddata strcontent & vbcrlf ‘发送正文
wsock.senddata “。” & vbcrlf ‘发送结束符
g 在发送邮件时做了附件的判断:
if combo1.list 》 0 then 如果附件列表非空则转入mime邮件的构造。mime邮件的标题部分与rfc822相同,但要扩充一些内容
wsock.senddata “mime-version:1.0” & vbcrlf
wsock.senddata “content-type:multipart/mixed;” & vbcrlf
wsock.senddata “ boundary = unique-boundary” & vbcrlf & vbcrlf
wsock.senddata “[ random garbage here ]” & vbcrlf & vbcrlf
wsock.senddata vbcrlf & “--unique-boundary” & vbcrlf
wsock.senddata “content-type: text/plain;charset=us-ascii” & vbcrlf & vbcrlf
wsock.senddata strcontent & vbcrlf & vbcrlf
wsock.senddata “--unique=boundary” & vbcrlf
wsock.senddata “content-type: multipart/parallel;boundary = unique-boundary-2” & vbcrlf & vbcrlf
wsock.senddata “--unique=boundary -2” & vbcrlf
wsock.senddata “content-type: application/octest-stream;” & vbcrlf
wsock.senddata “name =” & strattachname & vbcrlf
wsock.senddata “content-transfer-encoding:base64” & vbcrlf
wsock.senddata “content-disposition:inline;” & vbcrlf
这里附件也通过编码加入了邮件中。
h 最后结束邮件对话,返回信息:
wsock.senddata “quit” & vbcrlf
txtmsg.text = txtmsg.text & “mail send success!”
2.2 邮件接受端的设计与实现
2.2.1 接收端工作流程
图3 接收端工作流程
2.2.2 功能实现
pop3的通信与smtp一样,也可以通过winsock来实现。该pop3邮件程序的过程如同pop3对话一样。pop3服务器的应答要比smtp简单许多,其操作的应答状态码只有两个“+ok”表示成功,“+err”表示失败。具体细节不再赘述。
3 软件模块功能测试
为了评估电子邮件系统的两个客户端程序的实际可用性,必须对其系统的各个模块进行测试。本测试所采用的是微软开发的pocket pc2002 for windows sdk程序包。
3.1 邮件发送客户端的测试
为了测试邮件发送系统的功效,可在已配置网络的模拟器上载入邮件发送程序,使其工作在虚拟机的操作系统中。
配置好smtp服务器资料与esmtp所需的认证信息后,发送一封简单的rfc822电子邮件到对方信箱中,成功发送。同样的方式,测试发送mime邮件,得到如下测试结果:
图4 发送端测试结果
3.2 邮件接收客户端的测试
同邮件发送客户端一样,采用同样的网络设置,载入程序,登入网络。先选择pop3的邮件服务器地址,设定用户信息与密码,确认后获得基础的认证,并传回邮箱中信件的数量与大小统计。经测试收到了预期的效果。
以上两个程序的测试都是在网络环境下进行的,如果网络连接不正常或其他原因导致邮件的收发不成功,在程序设计的出错处理中已经有所考虑。
4 结语
与网络结合已成为所有信息产品的发展趋势,随着pda等嵌入式系统的日益普及以及无线互联技术(802.11b)的发展,利用pda实现掌上电脑与台式机间相互传递电子邮件,已经成为一种结合时尚和便利于一身的通信手段。作者设计实现的基于windows ce的嵌入式电子邮件系统,为实现移动设备之间邮件传输作了良好的尝试。


怎样才能让AI有记忆和反应
OPPO有望很快推出其旗舰智能手机-OPPO Find X3 Pro
LED企业要坚持自主创新和持续发展
生物识别技术不断完善,助力引领安防新革命力量
丰田将扩建中国工厂,目标是在2020年左右将中国工厂年产量翻一番
基于嵌入式操作系统和开发工具实现电子邮件系统的设计
海马的弊端层层显露 业绩下滑惨烈
微软开源的计算机视觉库
NI发布用于NI CompactRIO的无线I/O
基于ADL5354设计的高性能RF混频方案
华为首次超越苹果成全球第二大智能手机厂商
斥资 2.75 亿美元,Disco将建造芯片制造工具工厂
Qualcomm致胜移动行业的战略支柱:异构计算
数字化转型要采用整体方法
华为将对5G专利收取使用费
如何优化48V轻混电动车(MHEV)的电机驱动器设计
面向应急的振动检测模式研究
紫光展锐携手行业伙伴加速5G R16规模商用
闪存颗粒常见的五种类型有哪些
荷兰工程师谈中国:可怕的是他们的态度