SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,尽管邮件服务器可以用SMTP发送、接收邮件,但是邮件客户端只能用SMTP发送邮件,接收邮件一般用IMAP 或者 POP3 。邮件客户端使用TCP的25号端口与服务器通信。
SMTP在1982年首次被定义在 RFC 821 ,在2008它被更新为扩展的SMTP协议,补充在文件 RFC 5321 ,扩展的协议是目前使用最广泛的协议。
SMTP被设计基于以下交流模型:当用户需要发邮件时候,邮件发送者(sender-SMTP)建立一个与邮件接收者(receiver-SMTP)通信的通道,发送者发送SMTP命令给接收者,接收者收到后对命令做回复。
通信通道被建立后,发送者发送 MAIL 命令来指定发送者的邮件,如果接受者接收这个邮件,就回复 OK ,接着发送者发送 RCPT命令来指定接收者的邮箱,如果被接收同样回复OK,如果不接受则拒绝(不会终止整个通话)。接收者邮箱确定后,发送者用DATA命令指示要发送数据,并用一个 . 结束发送。如果数据被接收,会收到OK ,然后用QUIT结束会话。
这里有三个步骤对于mail事务,第一步用 MAIL 命令给出发送者的身份,第二步用一个或者多个RCPT命令给出接收者信息,接着用DATA命令给出邮件数据。
第一步是MAIL命令,
这个命令告诉接收者,开始一个新的邮件事务,重置所有的状态表和缓存区,包括接受者信息和邮件数据,
第二步是 RCPT命令
这个命令提供一个接收者邮箱,如果被接受返回250 OK,如果不能被识别,返回550 Failure,这个第二步可以被重复多次。
第三步是 DATA命令
如果被接受,返回354,并认为所有后续行都会邮件数据信息。当收到文本结束符时候,返回250OK
邮件数据的末尾必须被指明,为了激活命令和回复的对话。通过发送只包含一个英文句号的行,来提示邮件数据结束。
请注意: 邮件数据(mail data)包含邮件头部关键字,如Date, Subject, To, Cc, From
下面的例子演示一下这些命令的使用(S: send发送,R:reply 回复)
S: MAIL FROM:
R: 250 OK
S: RCPT TO:
R: 250 OK
S: RCPT TO:
R: 550 No such user here
S: RCPT TO:
R: 250 OK
S: DATA
R: 354 Start mail input; end with
S: Blah blah blah...
S: ...etc. etc. etc.
S:
R: 250 OK
Jones and Brown可以收到邮件,Green邮箱无效不能收到邮件。
下面两个命令用于打开关闭传输通道
HELO命令用主机介绍它自己,可以被翻译为"Hello, I am
5. SMTP命令汇总
命令语义:
SMTP命令由四个不区分大小写的字母组成,如果命令带参数,则用空格与参数隔开,命令用回车换行结尾
6. 新标准rfc5321弃用的命令
这里是c++发邮件类(含附件带注释)
https://blog.csdn.net/sinat_36219858/article/details/80439782
这个是便于理解的函数式编程c++发邮件程序
https://blog.csdn.net/sinat_36219858/article/details/71074776
参考:http://www.cnblogs.com/sdgwc/p/3324368.html