摘要:本文介绍了一种采用SMTP协议规范并通过直接使用SMTP协议命令而在程序中实现电子邮件传送的方法 。并在VC开发环境下给出了部分要害的实现代码 。
前言
电子邮件服务作为Internet上应用最多和最广的服务项目得到了非常广泛的应用 , 在网络应用中也起到非常重要的作用 。如同其他的网络服务 , 电子邮件系统也有其使用的传输协议 , 包括SMTP(SimpleMailTransferProtocol , 简单邮件传输协议)、POP(PostOfficeProtocol , 邮局协议)和IMAP(InternetMessageAccessProtocal , 消息访问协议)等 , 这些协议应用于电子邮件的发送和接收 。一些邮件处理软件如OutlookEXPress和FoxMail等就是按照SMTP和POP3协议结合WindowsSockets套接字进行设计来收发邮件的 。本文以SMTP协议为研究对象 , 在VisualC6.0编程环境下按照SMTP协议通过套接字发送SMTP命令 , 接收并处理邮件服务器的反馈信息 , 从而实现对电子邮件的发送 。
SMTP协议的通讯模型和会话流程
SMTP协议通讯模型
SMTP协议是TCP/IP协议族中的一员 , 主要对如何将电子邮件从发送方地址传送到接收方地址 , 也即是对传输的规则做了规定 。SMTP协议的通信模型并不复杂 , 主要工作集中在发送SMTP和接收SMTP上:首先针对用户发出的邮件请求 , 由发送SMTP建立一条连接到接收SMTP的双工通讯链路 , 这里的接收SMTP是相对于发送SMTP而言的 , 实际上它既可以是最终的接收者也可以是中间传送者 。发送SMTP负责向接收SMTP发送SMTP命令 , 而接收SMTP则负责接收并反馈应答 。可大致用下面的通讯模型示意图来表示:
【VC SMTP协议电子邮件传送剖析】
SMTP协议的命令和应答
从前面的通讯模型可以看出SMTP协议在发送SMTP和接收SMTP之间的会话是靠发送SMTP的SMTP命令和接收SMTP反馈的应答来完成的 。在通讯链路建立后 , 发送SMTP发送MAIL命令指令邮件发送者 , 若接收SMTP此时可以接收邮件则作出OK的应答 , 然后发送SMTP继续发出RCPT命令以确认邮件是否收到 , 假如接收到就作出OK的应答 , 否则就发出拒绝接收应答 , 但这并不会对整个邮件操作造成影响 。双方如此反复多次 , 直至邮件处理完毕 。SMTP协议共包含10个SMTP命令 , 列表如下:
SMTP命令命令说明
HELLO<domain><CRLF>识别发送方到接收SMTP的一个HELLO命令
MAILFROM:<reverse-path><CRLF><reverse-path>为发送者地址 。此命令告诉接收方一个新邮件发送的开始 , 并对所有的状态和缓冲区进行初始化 。此命令开始一个邮件传输处理 , 最终完成将邮件数据传送到一个或多个邮箱中 。
RCPTTO:<forward-path><CRLF><forward-path>标识各个邮件接收者的地址
DATA<CRLF>
接收SMTP将把其后的行为看作邮件数据去处理 , 以<CRLF>.<CRLF>标识数据的结尾 。
REST<CRLF>退出/复位当前的邮件传输
NOOP<CRLF>要求接收SMTP仅做OK应答 。(用于测试)
QUIT<CRLF>要求接收SMTP返回一个OK应答并关闭传输 。
VRFY<string><CRLF>验证指定的邮箱是否存在 , 由于安全因素 , 服务器多禁止此命令 。
EXPN<string><CRLF>验证给定的邮箱列表是否存在 , 扩充邮箱列表 , 也常禁止使用 。
HELP<CRLF>查询服务器支持什么命令
注:<CRLF>为回车、换行 , ASCII码分别为13、10(十进制) 。
SMTP协议的每一个命令都会返回一个应答码 , 应答码的每一个数字都是有特定含义的 , 如第一位数字为2时表示命令成功;为5表失败;3表没有完成 。一些较复杂的邮件程序利用该特点 , 首先检查应答码的首数字 , 并根据其值来决定下一步的动作 。下面将SMTP的应答码列表如下:
推荐阅读
- 关于SMTP
- 垃圾邮件泛滥成灾 SMTP协议将为信用而战
- 使用SMTP和WebSphere Studio构建Web服务——原始SMTP
- 使用SMTP和WebSphere Studio的Web服务—引言和设计
- SMTP在X.25上
- 1 CISCO协议总结大全
- 如何用TCP协议ping主机
- 善于运用加密协议 确保无线网络安全
- 路由器的广域网协议配置
- 采用SMIv2的用户数据报协议的