- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
----------专业最好文档,专业为你服务,急你所急,供你所需-------------
文档下载最佳的地方
----------专业最好文档,专业为你服务,急你所急,供你所需-------------
文档下载最佳的地方
试验8 发送E-MAIL程序的设计
通过这次试验,要掌握按照支持SMTP认证的SMTP会话过程,发送E-MAIL协议命令的基本原理,其中E-MAIL帐号和密码要用BASE64编码,SMTP服务器可借助ISP提供(如:SMTP.163.com)。
相关内容说明
参考[RFC 2554]规范中定义了SMTP的认证过程[2],但RFC 2554 中没有定义具体的认证参数。SMTP的认证功能主要是增加了AUTH命令,AUTH命令有多种用法,而且有多种认证机制,AUTH支持的认证机制主要有LOGIN,CRAM-MD5等。 LOGIN是大多数免费邮件服务器都支持的,如163,263与新浪都支持。而新浪还支持CRAM-MD5机制。认证机制一般只在真正 发送邮件之前进行,而且只需要执行一次。当认证成功后,即可按原来正常的处理发送邮件。原理是口令-应答(Challenge-Response),即会话的过程是发送文本来完成的,过程为交互式的请求应答模式,每次会话服务器总是返回一定的响应吗,表示客户端的请求是否被正确地应答,会话过程有一定的次序。由服务器发送命令要求客户端回答,客户端根据服务器发送信息进行回答,如果应答通过了,则认证成功,即可继续处理。下面对LOGIN机制作一个简单介绍。S:表示服务器返回,C:表示客户端发送 ,三位数字代码如334为服务器响应码。
LOGIN
口令-应答过程如下:
1 C: AUTH LOGIN
2 S: 334 dXNlcm5hbWU6
3 C: bXlnOTQ= (假设邮箱名为”myg94”)
4 S: 334 cGFzc3dvcmQ6
5 C: MzQ5OTA5Mg== (假设密码为”3499092”)
6 S: 235 Authentication successful.
上述6个步骤的说明如下:
1 为客户端向服务器发送认证指令。
2 服务端返回base64编码串,成功的响应码为334。编码字符串解码后为“username:”,说明要求客户端发送用户名。
3 客户端发送用base64编码的用户名,此处为“myg94”。
4 服务端返回base64编码串,成功响应码为334。编码字符串解码后为“password:”,说明要求客户端发送用户口令。
5 客户端发送用base64编码的口令,此处为“3499092”。
6 成功后,服务端返回码为235,表示认证成功可以发送邮件了。
在SMTP的[RFC 821]中,在与邮件服务器连接成功后,第一个命令一般是“HELO”。但是在支持认证的邮件服务器中,第一个命令应改为“EHLO”。所以这时的SMTP 会话过程应修改如下:
1 C: EHLO
2 S: 250
3 C: AUTH LOGIN
4 S: 334 dXNlcm5hbWU6
5 C: bXlnOTQ= (假设邮箱名为”myg94”)
6 S: 334 cGFzc3dvcmQ6
7 C: MzQ5OTA5Mg== (假设密码为”3499092”)
8 S: 235 Authenticationsuccessful.
9 C: MAIL FROM:netmao94@163.com
10 S: 250
11 C: RCPT TO:MYG94@163.COM
12 S: 250
13 C: DATA
14 S: 354
15 C: QUIT
16 S: 221
S:表示服务器返回,C:表示客户端发送。
参考程序运行界面如下:
参考代码如下:
//将ok按钮改成发送按钮,然后发送具体信件
void CSMTPwithAttachDlg::OnOK()
{
// TODO: Add extra validation here
CWaitCursor wc;
UpdateData(true);
//首先判断SMTP服务器是否为空,如果为空,则设定为默认值
if (m_Server.IsEmpty())
{
m_Server=;
UpdateData(false);
}
else
{
//创建SMTP信息体,通过类来实现
CSMTPMessage* pMessage = CreateMessage();
//连接到服务器
CSMTPConnection connection;
//判断是否是自动拨号上网
//if (m_bAutoDial)
//con
文档评论(0)