基于windows的电子邮件客户端设计
作者:王成勇
来源:《数字技术与应用》2012年第03期
摘要:虽然,现在已经有很多的邮件收发软件,如著名的FoxMail ,但是对于大多数的非专业的人来说,它的使用难度较大。本软件基于SMTP和Pop协议从底层进行开发,通过本系统,用户既可以发送纯文本邮件,也可以发送带有附件的邮件,当然,用户也可以使用不同的SMTP服务器。经测试,证实此软件是一个支持多收信人、多附件的群发软件。虽没有FoxMail那么强大的功能,但是易于掌握和使用。 关键词:电子邮件SMTP 命名空间类附件
中图分类号:TP393 文献标识码:A 文章编号:1007-9416(2012)03-0000-00 1、SMTP协议的工作原理
由于要开发的是邮件客户端程序,就不得不用到SMTP协议和POP协议。而我个人负责的是邮件发送功能的实现,因此就必然会涉及到SMTP协议。SMTP设计基于以下通信模型:针对用户的邮件请求,发送SMTP建立与接收SMTP之间建立一个双向传送通道。接收SMTP可以是最终接收者也可以是中间传送者。SMTP命令由发送SMTP发出,由接收SMTP接收,而应答则反方面传送。
2、SMTP协议的命令和应答 2.1 SMTP协议的命令
SMTP命令定义了邮件传输或由用户定义的系统功能。它的命令是由结束的字符串。而在带有参数的情况下,命令本身由和参数分开,如果未带参数可以直接和连接。邮箱的语法格式必须和接收站点的格式一致。下面讨论SMTP命令和应答。
>HELLO (HELO)此命令用于向接收SMTP确认发送SMTP。参数域包括发送SMTP的主机名。
>MAIL (MAIL)此命令用于开始将邮件发送到一个多个邮箱中。参数域包括回复路径。 >RECIPIENT (RCPT)此命令用于确定邮件内容的唯一接收者;多个接收者将由多个此命令指定。
>RESET (RSET)此命令指示当送邮件操作将被放弃。
龙源期刊网 http://www.qikan.com.cn
>VERIFY (VRFY)此命令要求接收者确认参数是一个用户。
>EXPAND (EXPN)此命令要求接收者确认参数指定了一个邮件发送列表。 >HELP (HELP) 此命令导致接收者向HELP命令的发送者发出帮助信息。 >NOOP (NOOP) 此命令不影响任何参数和已经发出的命令。
>QUIT (QUIT)此命令指示接收方必须发送OK应答然后关闭传送信道。
>TURN (TURN)此命令指定接收方要么发送OK应答并改变角色为发送SMTP,要么发送拒绝信息并保持自己的角色。
对于这些命令的顺序有一定的。对话的第一个命令必须是HELLO命令,此命令在此后的会话中也可以使用。NOOP,HELP,EXPN和VRFY命令可以在会话的任何时候使用。MAIL,SEND,SOML或SAML命令开始一个邮件操作。一旦开始了以后就要发送RCPT和DATA命令。邮件操作可以由RSET命令终止。在一个会话中可以有一个或多个操作。 会话的最后一个命令必须是QUIT命令。此命令在会话的其它时间不能使用。 COMMAND语法格式
命令是由命令码和其后的参数域组成的。命令码是四个字母组成的,不区别大小写。 参数域由不定长的字符串组成,它由结束,接收方在完全接收到此序列前不会采取任何行动。方括号代表可选的参数域。如果不选择的话,系统选择默认的设置。 2.2 SMTP的应答码
对SMTP命令的响应是多样的,它确定了在邮件传输过程中请求和处理的同步,也保证了发送SMTP知道接收SMTP的状态。每个命令必须有且只有一个响应。
SMTP响应由三位数字组成,其后跟一些文本。数字帮助决定下一个应该进入的状态,而文本对人是有意义的。 3、命名控件MailSend
由于在C #语言,都是以命名控件来组织程序的。而所有的类都归属于一个特定的命名空间下。如果系统没有你需要的命名空间的话,就可以自己编写,本节中的这个命名空间就是由
龙源期刊网 http://www.qikan.com.cn
于需要而编写的。而调用某一个类中的某个变量成员的方法就是通过命名空间名.类名.变量成员来访问的。
3.1网络连接类及实例TcpClient tc
为 TCP 网络服务提供客户端连接类TcpClient实例对象tc。 3.2提供用于网络访问的基础数据流及其实例 NetworkStream ns
此类提供访问网络的基础数据流的方法。其中最基本也是最重要的两个方法就是Write和Read方法。
3.3一维字符串数组变量FilePath
此字符串数组主要用来存放用户选择的附件的绝对路径名,并在发送带附件的邮件时用到。
3.4发送邮件所需的基本参数
比如用于ESMTP等录检验用的用户名、密码,发送邮件需要的收信人,发信人地址以及主题等等。
4、主要成员函数
(1)重载的构造函数SmtpMail。此函数主要用于在初始化过程中,把用户选择的附件的路径以参数的形式传给FilePath。
(2)添加附件的函数AddAttachment。传给FilePath的路径,通过这样一个函数就可以循环的动态的添加到IList接口的一个对象中了。
(3)得到上传的附件的文件流GetStream。将上传的附件转换成文件流,然后再用Write的方法把这些附件的文件流写入到网络中,来完成发送附件的操作。
(4)将字符串编码为Base字符串的函数BaseEncode。此函数的作用就是把给定的字符串转换成相应的Base编码的字符串。
(5)发送SMTP命令的函数SendCommand。这个函数的作用是把SMTP命令的字符串转换成对应的字节型值然后写入网络中。
龙源期刊网 http://www.qikan.com.cn
(6)接受服务器应答的函数RecvResponse。它的作用就是从网络流中读取服务器返回的字节型的信息。
(7)重载的函数Dialog。它们的作用是与服务器交互,发送命令并接收回应。
(8)邮件发送程序SendMail。这是整个程序的核心部分。具体的实现SMTP协议的程序正是通过它一步一步实现并最终实现发送简单邮件甚至带附件的邮件的功能。 5、结语
本系统采用C #这一新型的面向对象语言,从SMTP协议规定的底层命令做起,一步步的与服务器进行交互操作,最终实现发送多附件多接收人的功能。但是相信它简单,易操作性,和FoxMail的很多强大但却“鸡肋”似的功能比较起来,更多了几分实用性。 参考文献
[1] Tim Parker .TCP/IP 协议及网络编程技术.机械工业出版社,2000.7.
[2] 罗军舟,黎波涛,杨明等.TCP/IP 协议及网络编程技术.清华大学出版,2004.10.[3] 胡安廷.简单实现中文邮件.中国计算机报.2004.11.
[4] 滁州,马金虎,朱力勇.编写基于POP3网络应用程序.电脑爱好者,2003.6:92~94. [5] Simon Robinson, K.Scott Allen等.C#高级编程.清华大学出版社,2002.3.
[6] 电脑编程技巧与维护杂志社.C#编程技巧典型案例解析.中国电力出版社,2005.8.
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo3.cn 版权所有 湘ICP备2023017654号-3
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务