利用SMTP协议收发邮件
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
利用SMTP协议收发邮件
摘要
电子邮件可以达成发信人和收信人之间的信息交互。SMPT协议用来进行邮件的发送,本文分析了SMTP协议的目的意义和通信模型, 详细说明了它的命令和应答程序。并通过直接使用SMTP协议命令而在程序中实现电子邮件传送的方法。并在此基础上结合VC++ 6. 0的编程实现了接收和发送电子邮件。
关键字:SMTP协议;收发邮件;编程
目录
摘要 (1)
第一章背景知识概述 (3)
1.1 电子邮件 (3)
1.2 电子邮件体系结构和服务功能 (3)
第二章SMTP协议 (4)
2.1 SMTP协议目的及意义 (4)
2.2 SMTP协议工作原理 (4)
2.3 SMTP协议的命令和应答 (5)
第三章VC++6.0 中实现收发电子邮件 (6)
3.1 发送邮件类SMTPMail (6)
3.1.1 主要函数功能介绍 (6)
3.1.2 邮件发送程序 (7)
3.2 接收邮件 (9)
3.2.1 初始化MAPI (9)
3.2.2阅读电子邮件 (10)
3.2.3 读取电子邮件程序 (10)
第四章结论与心得体会 (11)
4.1结论 (11)
4.2 心得体会 (11)
参考文献 (11)
第一章背景知识概述
1.1电子邮件
电子邮件(E-mail,又称电子函件、电邮或邮件)是指通过互联网进行书写、发送和接收信件,目的是达成发信人和收信人之间的信息交互。电子邮件,electronic mail,简称
E-mail,标志是@,,又称电子信箱、电子邮政,电子邮件指用电子手段传送信件、单据、资料等信息的通信方法,通过网络的电子邮件系统,用户可以用低廉的价格、以快速的方式,与任何一个网络用户联系,这些电子邮件可以是文字、图象、声音等各种方式。
1.2电子邮件体系结构和服务功能
电子邮件系统主要分为两个子系统: 服务器系统和客户端系统。服务器系统的主要功能是实现电子邮件在Internet中的传输, 客户端系统的主要功能是发送电子邮件和接收电子邮件。电子邮件的工作原理遵循客户/ 服务器模式, 电子邮件的发送要涉及到发送方和接受方, 发送方构成客户端, 而接收方则为服务器。当发送方编辑好一份电子邮件。依照收件人的地址将其发送出去; 接收方服务器收到电子邮件后, 先将其存放在电子邮箱中, 并告知收件人有新邮件到来。发送方的主机与接收方的邮件服务器直接相连。
图1-1 SMTP交互命令模型
Figure. 1-1 SMTP command interaction model
第二章SMTP协议
2.1 SMTP协议目的及意义
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,是一种提供可靠且有效电子邮件传输的协议。SMTP是建立在FTP文件传输服务上的一种邮件服务,主要用于传输系统之间的邮件信息并提供与来信有关的通知。SMTP目前已是事实上的在Internet传输
E-Mail的标准,是一个相对简单的基于文本的协议。要为一个给定的域名决定一个SMTP 服务器,需要使用MX(Mail exchange)DNS。
SMTP提供一种可靠的有效的传送机制,它用于传送电子邮件。SMTP服务的意义是在SMTP转发的邮件中包括信封和内容这两种东西。内容是由两部分组成的,一部分是信头,一部分是信体,信头是由一个个的域/值对(一个域,一个值)组成的,如果信体有结构的话,它的结构是以MIME构造的。
2.2 SMTP协议工作原理
SMTP是工作在两种情况下:一是电子邮件从客户机传输到服务器:二是从某一个服务器传输到另一个服务器。SMTP也是个请求/响应协议,命令和响应都是基于ASCⅡ文本,并以CR和LF符结束。响应包括一个表示返回状态的三位数字代码。SMTP在TCP协议25号端口监听连续请求。SMTP连接和发送过程如下:
1)建立TCP连接。
2)客户端发送HELLO命令以标识发件人自己的身份,然后客户端发送MAIL命令;服务器端正希望以OK作为响应,表明准备接收。
3)客户端发送RCPT命令,以标识该电子邮件的计划接收人;服务器端则表示是否愿意为收件人接收邮件。
4)协商结束,发送邮件,用命令DATA发送。
5)以“.”号表示结束输入内容一起发送出去,结束此次发送,用QUIT命令退出。SMTP 的实现模型如下图所示。
图2-1 SMTP的实现模型
Figure 2-1 SMTP implementation model
2.3 SMTP协议的命令和应答
SMTP邮件数据包括三部分:命令、应答和报文数据。SMTP命令用于从客户进程向服务器进程发送服务请求;SMTP应答用于使客户进程知道服务器进程的接收状态,以确保在邮件传输过程中对话同步;SMTP报文数据包含报文的正文内容由任意长度的ASCII 字符序列组成,以单行的据点作为结束标志。命令与应答必须是一对一的交互传输过程。SMT P的命令集如下表所示。
表2-1 SMTP的命令集
Table 2-1 SMTP command set
第三章VC++6.0 中实现收发电子邮件
3.1 发送邮件类SMTPMail
3.1.1 主要函数功能介绍
1)重载的构造函数SmtpMail()
此函数主要用于在初始化过程中,把用户选择的附件的路径以参数的形式传给FilePath。
2)添加附件的函数AddAttachment
传给FilePath的路径,通过这样一个函数就可以循环的动态的添加到IList接口的一个对象中了,方便以后在具体的实现的过程中的使用。
3)得到上传的附件的文件流GetStream
由于在网络中的操作都是以网络流的形式来实现的,因此先将上传的附件转换成文件流,然后再用Write的方法把这些附件的文件流写入到网络中,来完成发送附件的操作。
4)将字符串编码为Base64字符串的函数Base64Encode
由于ESMTP的LOGIN认证机制是采用Base64编码,当用户发出AUTHLOGIN的命令后,服务器返回334的应答码等待用户输入。如果身份确认后服务器返回235的应答码,否则返回失败信息。此函数的作用是把给定的字符串转换成相应的Base64编码的字符串。
5) 发送SMTP命令的函数SendCommand
这个函数的作用是把SMTP命令的字符串转换成对应的字节型值然后写入网络中,如果操作成功就返回一个标志为真的布尔型变量,如果操作失败或者发生异常就返回标志为假的布尔型变量。
6)接受服务器应答的函数RecvResponse
它的作用就是从网络流中读取服务器返回的字节型的信息,将其转换成字符串型的变量,然后将其返回,可以通过其返回值来判断操作是否成功。
7) 重载的函数Dialog
它们的作用是与服务器交互,发送命令并接收回应。它的实现主要是通过调用上面的发送SMTP命令函数SendCommand以及接受SMTP服务器响应的函数RecvResponse来实现。
8) 邮件发送程序SendMail