资讯专栏INFORMATION COLUMN

初探smtp协议

phpmatt / 3559人阅读

摘要:初探协议百度百科即简单邮件传输协议它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。协议属于协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。服务器则是遵循协议的发送邮件服务器,用来发送或中转发出的电子邮件。

初探smtp协议 百度百科

SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器,就可以把E-mail寄到收信人的服务器上了,整个过程只要几分钟。SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转发出的电子邮件。
(传送门)

客户端和邮件服务器的交互过程

连接和发送邮件步骤如下:

  (1)建立TCP连接;

  (2)客户端发送HELO命令以标识发件人的身份,服务器以OK作为响应,表明准备接收;

  (3)使用AUTH命令登录SMTP服务器,输入用户名和密码(用户名和密码要用base64进行加密);

  (4)客户端发送MAIL命令输入发件人邮箱地址,服务器以OK作为响应;

  (5)客户端发送RCPT命令,标识该电子邮件的计划接收人,服务器以OK作为响应;

  (6)协商结束后,使用DATA命令发送;

  (7)以"."号表示结束,输入内容一起发送出去,

  (8)结束此次发送,用QUIT命令退出。

PHPmailer发送示例
    2017-06-16 14:29:13     SERVER -> CLIENT: 220 hello
    2017-06-16 14:29:13     CLIENT -> SERVER: EHLO heqian-pc
    2017-06-16 14:29:13     SERVER -> CLIENT: 250-localhost Hello EHLO heqian-pc
                                              250-SIZE 131072
                                              250-PIPELINING
                                              250-AUTH PLAIN LOGIN
                                              250 HELP
    2017-06-16 14:29:13     CLIENT -> SERVER: AUTH LOGIN
    2017-06-16 14:29:13     SERVER -> CLIENT: 334 VXNlcm5hbWU=
    2017-06-16 14:29:13     CLIENT -> SERVER:
    2017-06-16 14:29:13     SERVER -> CLIENT: 334 UGFzc3dvcmQ=
    2017-06-16 14:29:13     CLIENT -> SERVER:
    2017-06-16 14:29:13     SERVER -> CLIENT: 235 Authentication successful
    2017-06-16 14:29:13     CLIENT -> SERVER: MAIL FROM:
    2017-06-16 14:29:13     SERVER -> CLIENT: 250 Ok
    2017-06-16 14:29:13     CLIENT -> SERVER: RCPT TO:
    2017-06-16 14:29:13     SERVER -> CLIENT: 250 Ok
    2017-06-16 14:29:13     CLIENT -> SERVER: DATA
    2017-06-16 14:29:13     SERVER -> CLIENT: 354 End data with .
    2017-06-16 14:29:13     CLIENT -> SERVER: Date: Fri, 16 Jun 2017 14:29:13 +0000
    2017-06-16 14:29:13     CLIENT -> SERVER: To: fage1151@qq.com
    2017-06-16 14:29:13     CLIENT -> SERVER: From: =?utf-8?B?5piT6IGU5LqR?= 
    2017-06-16 14:29:13     CLIENT -> SERVER: Reply-To: =?utf-8?B?5piT6IGU5LqR?= <1151878751@qq.com>
    2017-06-16 14:29:13     CLIENT -> SERVER: Subject: =?utf-8?B?5piT6IGU5LqR6aqM6K+B56CB?=
    2017-06-16 14:29:13     CLIENT -> SERVER: Message-ID: 
    2017-06-16 14:29:13     CLIENT -> SERVER: X-Mailer: PHPMailer 5.2.23 (https://github.com/PHPMailer/PHPMailer)
    2017-06-16 14:29:13     CLIENT -> SERVER: MIME-Version: 1.0
    2017-06-16 14:29:13     CLIENT -> SERVER: Content-Type: multipart/alternative;
    2017-06-16 14:29:13     CLIENT -> SERVER:       boundary="b1_a2430819ef128b7b55181b6ebd2e021e"
    2017-06-16 14:29:13     CLIENT -> SERVER: Content-Transfer-Encoding: 8bit
    2017-06-16 14:29:13     CLIENT -> SERVER:
    2017-06-16 14:29:13     CLIENT -> SERVER: This is a multi-part message in MIME format.
    2017-06-16 14:29:13     CLIENT -> SERVER:
    2017-06-16 14:29:13     CLIENT -> SERVER: --b1_a2430819ef128b7b55181b6ebd2e021e
    2017-06-16 14:29:13     CLIENT -> SERVER: Content-Type: text/plain; charset=utf-8
    2017-06-16 14:29:13     CLIENT -> SERVER: Content-Transfer-Encoding: 8bit
    2017-06-16 14:29:13     CLIENT -> SERVER:
    2017-06-16 14:29:13     CLIENT -> SERVER: 你好 smtp
    2017-06-16 14:29:13     CLIENT -> SERVER:
    2017-06-16 14:29:13     CLIENT -> SERVER:
    2017-06-16 14:29:13     CLIENT -> SERVER: --b1_a2430819ef128b7b55181b6ebd2e021e
    2017-06-16 14:29:13     CLIENT -> SERVER: Content-Type: text/html; charset=utf-8
    2017-06-16 14:29:13     CLIENT -> SERVER: Content-Transfer-Encoding: 8bit
    2017-06-16 14:29:13     CLIENT -> SERVER:
    2017-06-16 14:29:13     CLIENT -> SERVER: 

你好 smtp

2017-06-16 14:29:13 CLIENT -> SERVER: 2017-06-16 14:29:13 CLIENT -> SERVER: 2017-06-16 14:29:13 CLIENT -> SERVER: 2017-06-16 14:29:13 CLIENT -> SERVER: --b1_a2430819ef128b7b55181b6ebd2e021e-- 2017-06-16 14:29:13 CLIENT -> SERVER: 2017-06-16 14:29:13 CLIENT -> SERVER: . 2017-06-16 14:29:13 SERVER -> CLIENT: 250 ok:queued as 2017-06-16 14:29:13 CLIENT -> SERVER: QUIT 2017-06-16 14:29:13 SERVER -> CLIENT: 221 Bye
跨邮件服务器之间的通信

连接和投递步骤如下:

  (1)建立TCP连接;

  (2)服务器发送HELO命令以标识发件人的身份,目标服务器以OK作为响应,表明准备接收;

  (3)服务器发送MAIL 命令输入发件人邮箱地址,目标服务器以OK作为响应;

  (4)服务器发送RCPT命令,标识该电子邮件的计划接收人,目标服务器以OK作为响应;

  (5)协商结束后,使用DATA命令发送;

  (6)以"."号表示结束,输入内容一起发送出去,

  (7)结束此次发送,用QUIT命令退出。

PHPmailer发送示例
    2017-06-16 14:24:41     SERVER -> CLIENT: 220 hello
    2017-06-16 14:24:41     CLIENT -> SERVER: EHLO heqian-pc
    2017-06-16 14:24:41     SERVER -> CLIENT: 250-localhost Hello EHLO heqian-pc
                                              250-SIZE 131072
                                              250-PIPELINING
                                              250 HELP
    2017-06-16 14:24:41     CLIENT -> SERVER: MAIL FROM:
    2017-06-16 14:24:41     SERVER -> CLIENT: 250 Ok
    2017-06-16 14:24:41     CLIENT -> SERVER: RCPT TO:
    2017-06-16 14:24:41     SERVER -> CLIENT: 250 Ok
    2017-06-16 14:24:41     CLIENT -> SERVER: DATA
    2017-06-16 14:24:41     SERVER -> CLIENT: 354 End data with .
    2017-06-16 14:24:41     CLIENT -> SERVER: Date: Fri, 16 Jun 2017 14:24:41 +0000
    2017-06-16 14:24:41     CLIENT -> SERVER: To: fage1151@qq.com
    2017-06-16 14:24:41     CLIENT -> SERVER: From: =?utf-8?B?5piT6IGU5LqR?= 
    2017-06-16 14:24:41     CLIENT -> SERVER: Reply-To: =?utf-8?B?5piT6IGU5LqR?= <1151878751@qq.com>
    2017-06-16 14:24:41     CLIENT -> SERVER: Subject: =?utf-8?B?5piT6IGU5LqR6aqM6K+B56CB?=
    2017-06-16 14:24:41     CLIENT -> SERVER: Message-ID: <6fc893187701010670b0d152b2d954f6@heqian-pc>
    2017-06-16 14:24:41     CLIENT -> SERVER: X-Mailer: PHPMailer 5.2.23 (https://github.com/PHPMailer/PHPMailer)
    2017-06-16 14:24:41     CLIENT -> SERVER: MIME-Version: 1.0
    2017-06-16 14:24:41     CLIENT -> SERVER: Content-Type: multipart/alternative;
    2017-06-16 14:24:41     CLIENT -> SERVER:       boundary="b1_6fc893187701010670b0d152b2d954f6"
    2017-06-16 14:24:41     CLIENT -> SERVER: Content-Transfer-Encoding: 8bit
    2017-06-16 14:24:41     CLIENT -> SERVER:
    2017-06-16 14:24:41     CLIENT -> SERVER: This is a multi-part message in MIME format.
    2017-06-16 14:24:41     CLIENT -> SERVER:
    2017-06-16 14:24:41     CLIENT -> SERVER: --b1_6fc893187701010670b0d152b2d954f6
    2017-06-16 14:24:41     CLIENT -> SERVER: Content-Type: text/plain; charset=utf-8
    2017-06-16 14:24:41     CLIENT -> SERVER: Content-Transfer-Encoding: 8bit
    2017-06-16 14:24:41     CLIENT -> SERVER:
    2017-06-16 14:24:41     CLIENT -> SERVER: 你好 smtp
    2017-06-16 14:24:41     CLIENT -> SERVER:
    2017-06-16 14:24:41     CLIENT -> SERVER:
    2017-06-16 14:24:41     CLIENT -> SERVER: --b1_6fc893187701010670b0d152b2d954f6
    2017-06-16 14:24:41     CLIENT -> SERVER: Content-Type: text/html; charset=utf-8
    2017-06-16 14:24:41     CLIENT -> SERVER: Content-Transfer-Encoding: 8bit
    2017-06-16 14:24:41     CLIENT -> SERVER:
    2017-06-16 14:24:41     CLIENT -> SERVER: 

你好 smtp

2017-06-16 14:24:41 CLIENT -> SERVER: 2017-06-16 14:24:41 CLIENT -> SERVER: 2017-06-16 14:24:41 CLIENT -> SERVER: 2017-06-16 14:24:41 CLIENT -> SERVER: --b1_6fc893187701010670b0d152b2d954f6-- 2017-06-16 14:24:41 CLIENT -> SERVER: 2017-06-16 14:24:41 CLIENT -> SERVER: . 2017-06-16 14:24:41 SERVER -> CLIENT: 250 ok:queued as 2017-06-16 14:24:41 CLIENT -> SERVER: QUIT 2017-06-16 14:24:41 SERVER -> CLIENT: 221 Bye
怎么查看从邮件服务器到网易MX服务器的SMTP记录?

是不是发现邮件服务器之间和客户端与邮件服务器之间的协议是如此的相似呢。
他们有什么区别呢。
一般情况下,客户端与服务器交互是通过一个域名实现的,例如:smtp.qq.com,smtp.163.com,smtp.sina.cn
而邮箱服务器之间一般是通过邮箱后缀的mx邮件交换记录来完成的。如何查看邮件服务器的mx记录

站长之家网页在线查询

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/23095.html

相关文章

  • 收件服务器主机名应该填写什么-邮件主机名该如何填写?

    摘要:协议接收邮件服务器,使用,端口号。发送邮件服务器,使用,端口号苹果邮箱收件服务器主机名填什么您好,如果是给手机设置邮箱。邮箱的服务器端口号为,收件服务器端口号是,发件服务器端口号是最后点击完成。邮件主机名该如何填写?以qq为例,收件服务器为imap.qq.com,发件服务器为smtp.qq.com,具体如下:1.在邮箱中启用IMAP服务。 在Mail中创建一个新的QQ邮箱账户,单击手动设置进...

    habren 评论0 收藏0
  • Spring Boot 邮件发送的 5 种姿势!

    摘要:也就是说用户先将邮件投递到腾讯的服务器这个过程就使用了协议,然后腾讯的服务器将邮件投递到网易的服务器这个过程也依然使用了协议,服务器就是用来收邮件。 邮件发送其实是一个非常常见的需求,用户注册,找回密码等地方,都会用到,使用 JavaSE 代码发送邮件,步骤还是挺繁琐的,Spring Boot 中对于邮件发送,提供了相关的自动化配置类,使得邮件发送变得非常容易,本文我们就来一探究竟!看...

    W4n9Hu1 评论0 收藏0
  • JavaMail邮件发送不成功的那些坑人情况及分析说明

    摘要:网上也有不少人反馈用手机客户端无法使用新浪邮箱发送邮件,随后我尝试用登录新浪邮箱,也出现只能接收邮件而不能发送邮件的情况。三附录错误码及建议解决方法发送邮件成功却收不到邮件或收到邮件无主题无收件人乱码新浪邮箱诚信平台 前言   JavaMail的使用本身并不难,网上有不少案例,简单易懂,而且有详细的中文注解。但是由于JavaMail的机制设置不够完善,特别是异常出错时的参考信息太少,给...

    y1chuan 评论0 收藏0
  • Python发送电子邮件

    摘要:是发送邮件的协议,内置对的支持模块和模块可以发送纯文本邮件邮件以及带附件的邮件简单邮件传输协议,是从源地址到目的地址传送邮件的规则,由该协议控制信件的中转方式的提供了一种很方便的途径传递电子邮件,对进行了简单的封装发送纯文本邮件导入模块 SMTP是发送邮件的协议,Python内置对SMTP的支持(smtplib模块和email模块),可以发送纯文本邮件、HTML邮件以及带附件的邮件 S...

    李世赞 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<