- 19
- 0
- 约6.01千字
- 约 7页
- 2017-04-24 发布于广东
- 举报
----------专业最好文档,专业为你服务,急你所急,供你所需-------------
文档下载最佳的地方
----------专业最好文档,专业为你服务,急你所急,供你所需-------------
文档下载最佳的地方
试验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)