基于Windows CE的嵌入式电子邮件系统设计
来源:互联网发布时间:2018-08-27504浏览
询问 AI[/b]图 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]) %26;amp; ", " %26;amp; FormatDateTime(Date, [vbLongDate]) %26;amp; " " %26;amp; FormatDateTime(Time, [vbLongTime]) %26;amp; "" %26;amp; " -0600" 定义了邮件的发送日期。 构造邮件标题 mData = "From:" %26;amp; Chr(32) %26;amp; strSendName %26;amp; vbCrLf %26;amp; _ "Date:" %26;amp; Chr(32) %26;amp; m_Date %26;amp; vbCrLf %26;amp; _ "X-Mailer: Harold Smtp Mailer V1.0" %26;amp; vbCrLf %26;amp; _ "To:" %26;amp; Chr(32) %26;amp; strReceiveName %26;amp; vbCrLf %26;amp; _ "Subject:" %26;amp; Chr(32) %26;amp; strSubject %26;amp; vbCrLf 这个典型的邮件标题包含了:发件人,发件日期,收件人,主题以及发送邮件的程序名称。 C 当邮件程序连上服务器后,进如下一步打开邮件对话,利用WINSOCK控件发送对话信息:Wsock.SendData "HELO" %26;amp; " " %26;amp; Wsock.LocalHostName %26;amp; vbCrLf 如果SMTP服务器没有返回“250” 应答码,则提示“Unable to establish transaction”. D 由于现在的邮件服务器多采用ESMTP协议,因此需要客户端程序发送用户名与密码等认证信息,故在打开对话过后便进入“Authentication“过程,: Wsock.SendData "AUTH LOGIN" %26;amp; vbCrLf If Not WaitForResponse("334", 10) Then txtMsg.Text = "Unable to Connect with ESMTP server......" Wsock.SendData Encode(User) %26;amp; vbCrLf Wsock.SendData Encode(Pass) %26;amp; vbCrLf 在这里调用了自编的Encode函数并发送了经过BASE64编码的用户名与密码信息。 E 接着是发送发送方与接受方的地址: Wsock.SendData "MAIL FROM:" %26;amp; " " %26;amp; strFromMail %26;amp; vbCrLf ‘发送方 Wsock.SendData "RCPT TO:" %26;amp; " " %26;amp; strToMail %26;amp; vbCrLf ‘接受方 F 下一步是发送消息体(针对不含附件的RFC822邮件): Wsock.SendData "DATA" %26;amp; vbCrLf ‘发送消息体 Wsock.SendData mData %26;amp; vbCrLf ‘发送邮件标题 Wsock.SendData strContent %26;amp; vbCrLf ‘发送正文 Wsock.SendData "." %26;amp; vbCrLf ‘发送结束符 G 在发送邮件时做了附件的判断: If Combo1.List > 0 Then 如果附件列表非空则转入MIME邮件的构造。MIME邮件的标题部分与RFC822相同,但要扩充一些内容 Wsock.SendData "MIME-Version:1.0" %26;amp; vbCrLf Wsock.SendData "Content-Type:multipart/mixed;" %26;amp; vbCrLf Wsock.SendData " boundary = Unique-Boundary" %26;amp; vbCrLf %26;amp; vbCrLf Wsock.SendData "[ Random garbage here ]" %26;amp; vbCrLf %26;amp; vbCrLf Wsock.SendData vbCrLf %26;amp; "--Unique-Boundary" %26;amp; vbCrLf Wsock.SendData "Content-type: text/plain;charset=US-ASCII" %26;amp; vbCrLf %26;amp; vbCrLf Wsock.SendData strContent %26;amp; vbCrLf %26;amp; vbCrLf Wsock.SendData "--Unique=Boundary" %26;amp; vbCrLf Wsock.SendData "Content-Type: multipart/parallel;boundary = Unique-Boundary-2" %26;amp; vbCrLf %26;amp; vbCrLf Wsock.SendData "--Unique=Boundary -2" %26;amp; vbCrLf Wsock.SendData "Content-Type: application/octest-stream;" %26;amp; vbCrLf Wsock.SendData "name =" %26;amp; strAttachname %26;amp; vbCrLf Wsock.SendData "Content-Transfer-Encoding:base64" %26;amp; vbCrLf Wsock.SendData "Content-Disposition:inline;" %26;amp; vbCrLf 这里附件也通过编码加入了邮件中。 H 最后结束邮件对话,返回信息: Wsock.SendData "QUIT" %26;amp; vbCrLf txtMsg.Text = txtMsg.Text %26;amp; "Mail send success!" 2.2 邮件接受端的设计与实现 2.2.1 接收端工作流程
新闻来源:互联网,文中所述为作者独立观点,不代表icspec立场。更多精彩资讯请下载icspec App。如对本稿件有异议,请联系微信客服specltkj。