同福

使用SMTP协议发送电子邮件【20210818】

介绍

介绍

福哥需要给TFPHP框架添加一个TFMail对象,因为发送电子邮件是通过Socket和SMTP服务器通讯完成的,这里面发送的数据包和接收的数据包都是要遵循SMTP协议的。

今天福哥就将SMTP协议的基本流程整理出来,根据这个流程,任何可以直接操作Socket发送接收封包的语言就都可以实现发送电子邮件的功能了。

SMTP协议

SMTP协议基本上就是使用Socket和SMTP服务器对话,这一切从客户端连接SMTP服务器开始。每次都是客户端“说”一句,服务器端“答”一句。客户端每“说”一句后面要以CRLF结尾。服务器端“答”一句最前面会有一个三位数的状态码用来识别结果是否是预期的。

发送邮件过程

连接SMTP服务器

连接SMTP服务器,可以使用telnet进行测试

接收220消息

220 smtp.qq.com Esmtp QQ Mail Server

发送Hello

发送一个Hello消息给服务器

helo smtp.qq.com

接收250消息

250 smtp.qq.com

发送认证

发送auth login

auth login

接收334消息

334 VXNlcm5hbWU6

发送经过base64加密的用户名

enlAS253TXkuS29t

接收334消息

334 UGFzc3dvcmQ6

发送结果base64加密的密码

RGWiRTQzOjE=

接收235消息

235 Authentication successful

发送寄信地址消息

mail from:<12345@qq.com>

接收250消息

250 Ok

发送收信地址消息

rcpt to:<54321@qq.com>

接收250消息

250 Ok

发送数据

data

接收354消息

354 End data with <CR><LF>.<CR><LF>

发送数据,这里参考上一步接收到的信息里的提示,意思是说接下来可以随便输入数据,输入多条数据也可以,只要最后一条以“CRLF.CRLF”结尾即可(这里说的“CRLF”就是"\r\n",ASCII码对应10、11)

注意:这里让以“CRLF.CRLF”结尾,后面就不要再添加更多内容了,添加CRLF也不行。

  • subject,指定了邮件标题

  • content-type,指定了邮件正文的类型

subject: this is subject
content-type: text/html

this is body...
this is body...
...
this is body...
CRLF.CRLF

接收250消息

Ok: queued as

总结

福哥将STMP协议给大家介绍了一下,遵循这些协议内容就可以完成发送电子邮件的功能了。