福哥需要给TFPHP框架添加一个TFMail对象,因为发送电子邮件是通过Socket和SMTP服务器通讯完成的,这里面发送的数据包和接收的数据包都是要遵循SMTP协议的。
今天福哥就将SMTP协议的基本流程整理出来,根据这个流程,任何可以直接操作Socket发送接收封包的语言就都可以实现发送电子邮件的功能了。
SMTP协议基本上就是使用Socket和SMTP服务器对话,这一切从客户端连接SMTP服务器开始。每次都是客户端“说”一句,服务器端“答”一句。客户端每“说”一句后面要以CRLF结尾。服务器端“答”一句最前面会有一个三位数的状态码用来识别结果是否是预期的。
连接SMTP服务器,可以使用telnet进行测试
接收220消息
220 smtp.qq.com Esmtp QQ Mail Server
发送一个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协议给大家介绍了一下,遵循这些协议内容就可以完成发送电子邮件的功能了。