您的位置:首页 > 编程语言 > PHP开发

SMTP协议应用:使用Socket发送邮件

2017-12-24 17:18 597 查看

简单的邮件传输协议SMTP

      很多应用需要发送邮件的功能。PHP有一个自带的mail()函数,很多新手会问“为什么使用这个函数发不了邮件?”这是因为想要使用SMTP协议发送邮件,必须首先安装SMTP服务器。如果既不想安装SMTP服务器,也没有条件安装,怎么办呢?这时,Socket就派上用场了。使用Socket连接一个已有的服务器,如163提供的SMTP服务器,然后用它发送邮件。应该怎么用呢?下面先来看SMTP是如何工作的。

SMTP协议如何工作

      SMTP(简单邮件传输协议)是由源地址到目的地址传送邮件的一组规则,用来控制信件中转方式,SMTP协议属于TCP/IP协议族,其使每台计算机在发送或中转信件时能找到下一个目的地。通过使用指定的服务器,把E-mail寄到收信人的服务器上。
      SMTP服务器是遵循SMTP协议的发送邮件服务器,用来发送或中转发出电子邮件。客户端通过SMTP命令与SMTP服务器进行交互。首先,客户端需要建立一个与SMTP服务器的TCP连接,端口通常为25,在连接之后,客户端和服务器先执行一些应用层握手操作。让SMTP服务器知道客户端的信息,并且对客户端需求做出响应等。
       在SMTP握手阶段,客户端向SMTP服务器分别指定发信人和收信人的电子邮件地址。握手阶段完毕,SmTP服务器把客户端发出的邮件消息添加到发信队列中,通过TCP提供的可靠数据传输服务把该消息无错的传送到服务器。如果客户还有其他邮件消息需要发送到同一个服务器,就在同一个TCP连接重复上述过程;否则,指定TCP关闭该连接。
      连接和发送过程如下:
    1)建立TCP连接。
    2)客户端发送HELO命令以标识发件人自己的身份,客户端发送MAIL命令。服务器以ok作为响应,表明准备接受。
    3)使用AUTH命令登录SMTP服务器。输入用户名和密码(注意用户名和密码都需要使用base64加密)。
    4)客户端发送RCPT命令,标识该电子邮件的计划接收人,可以有多个RCPT行。服务器以OK作为响应,表示愿意为收件人发送邮件。
    5)协商结束后,使用DATA命令发送。
    6)以“.”号表示结束,输入内容一起发送出去,结束此次发送,用QUIT命令退出。

SMTP协议常用命令



SMTP协议的应用:使用Socket发送电子邮件

SMTP协议建立在TCP协议之上,所以原则上按照SMTP协议规范,使用Socket跟SMTP服务器进行交互。我使用fsockopen()函数代替了socket_*()类的函数
fsockopen()函数的好处是吧Socket连接绑定到一个流上,然后使用各种操作流的函数操作这个Socket连接。
下图是我粘贴的fsockopen()函数的用法



下面是我基于SMTP协议使用Socket编写的发送邮件类,源码到我的github上查看即可。

github 地址:https://github.com/ccmanito/myclass
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: