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

来源:互联网 发布:linux 设置命令别名 编辑:程序博客网 时间:2024/05/16 17:30

简单的邮件传输协议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




阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 朱明玉 朱明阳 朱明溪 赫章朱明 朱明勇律师 赵宗成和朱明元的作品 赵宗成和朱明元简介 赵宗成朱明元的所有作品 朱昱 艺术家朱昱 朱昱为什么不被判刑 朱晏 朱晓 朱晔 朱晶 朱月 朱朱 眼镜摄影师kk哥和朱朱 朱权 朱杰 演员朱杰 朱杰图片 朱杰个人资料 朱杰泳装图片 朱枫 朱标 朱标之死 朱标朱棣 朱标简介 朱标不死朱棣会反吗 朱标怎么死的 大明第一太子朱标 朱桓 朱桦 朱桦资料 朱桦个人资料 朱桦个人资料简介 朱梅 朱梓 朱棣 朱棣简介