最近在看一本书,是VC++网络编程,可以说那本书写的乱七八糟,我也晕头转向、、、 、
我写的大家可能有些看着抽象,捡着能看懂的看就行,我讲述的是SMTP的原理,而不是如何编程来实现,我纠结一天的感悟,希望对学习网络编程的朋友能有些帮助。。。
书上的SMTP小例子是写一个可以向 smtp.163.com邮件服务器邮件,于是我就跟着探索!!
SMTP是简单邮件传送协议,标准端口是25 ,SMTP也是TCP/IP族的成员,
其实一直不大理解 SMTP协议 FTP协议等等协议,但是经过一天的纠结之后 终于明白了TCP /IP族下的协议 ,其实都是一个玩意 ,都是客户端通过 套接字发送命令 然后服务器进行命令的响应 并且回应一定的信息用于表示,这条命令的执行状态。。。
我调试了大半天 一直失败,根据书上说的和以前的源码 ,我发现好多SMTP命令在 163的SMTP服务器上似乎不管用,而且返回错误信息
220 163.com Anti-spam GT for Coremail System (163com[20111010]) //这是链接之后服务器自动发送过来的
250 OK //发送的是HTLO xiaowei 命令之后服务器返回的信息表示成功
502 Error: command not implemented //到这里信息就出错了 ,
死活就卡死在这里了,这样一来我的邮件发送器就做不下去了 ,于是我到处 baidu 原因,终于我发现了 原来 是因为 SMTP验证的原因,
虽然我们能链接上 SMTP服务器但是 我们却不能发送邮件了,因为没有经过SMTP验证, 验证方式好像有很多种,RFC中也有介绍 。
虽然心有不甘,没实现邮件发送的功能,但是起码了解了 SMTP的作用也算有点收获。
毕竟人家是专业邮件服务器,如果让我们这样随便写个程序就能发送邮件的话那么人家能正常运营么?
以前的很多源码利用SMTP能发送成功的原因是因为以前的邮件服务器没有 SMTP认证,最近几年 很多免费邮箱 都加上了 SMTP认证
还有大家记得以前的匿名邮件吗?
这种邮件曾被作为广告的一种形式被很多人利用, 只有没有加SMTP认证的邮箱服务器才可以进行匿名发送邮件。
不知道是不是我水平太差的缘故,我觉得有了SMTP认证这一个栏坎,利用SMTP协议匿名邮件起码我 感觉 无法实现了 、、、、
电子邮件格式: 包括信息头(一些SMTP命令)和信息体(邮件的内容)
我们在向服务器发送邮件的时候,需要通过SMTP协议进行 。。
SMTP协议其实是我们利用socket进行一条一条的命令行的发送 的,并且收到命令后会返回 三位的响应码和一些响应信息, ,邮件内容和SMTP命令在客户机和服务器之间都是通过文本流的方式进行数据的传递的。
实际编程中我们只需要利用套接字建立和服务器的链接之后,然后就发送SMTP命令就行了,这里我只讲述原理,开发的时候大家需要自己参考RFC以及相关的书籍,
我也说不清,说实话也不明白。。。。嘿嘿
简单的SMTP命令
响应码