以前玩smtp的时候申明都是用的helo,最近在整理邮件服务的时候,才知道还有一个叫做ehlo的(太落后了)。
google了一下,了解了基本上是这么个情况:ehlo是对helo的扩展,即extend helo,可以支持authorization,即用户认证。下面我们通过一个例子来解释一下ehlo的用法:
[lyychee@mysun ~]# telnet smtp.mysun.org 25
// telnet到邮件服务器的25端口
Trying 172.18.250.250...
Connected to smtp.mysun.org (172.18.250.250).
Escape character is '^]'.
220 Welcome to my smtp server(EQManager V3.5) ESMTP
ehlo
// 用ehlo申明,表示自己需要身份验证
250-Welcome to my smtp server(EQManager V3.5)
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-PIPELINING
250-SIZE 10485760
250 8BITMIME
auth login
// 用这个命令表示身份验证开始
334 VXNlcm5hbWU6
// 这句是服务器返回的,是base64编码过的“user”
emhhbmd4aW5qaQ==
// 你的用户名经过base64编码的串
334 UGFzc3dvcmQ6
// 这句也是服务器返回的,是是base64编码过的“pass”
*******
// 密码,也要经过base64编码
235 ok, go ahead (#2.0.0)
mail from:zhangxinji@mysun
// 声明邮件来源email地址
// 为了防止被发垃圾邮件,去掉了域名的后半段
250 ok
rcpt to:lyychee@citiz
// 声明邮件目的email地址
// 为了防止被发垃圾邮件,去掉了域名的后半段
250 ok
data
// 邮件开始
354 go ahead
subject:Test Mail
// 主题
from:zhangxinji@mysun
// 在邮件头中声明邮件来源(仅在outlook或foxmail中显示,跟真实的投递无关)
// 比如你rcpt给了,在这里你完全可以写,信还是会被投到lyychee
to:lyychee@citiz
// 这个也是仅现实邮件目的地址
// 中间要留空一行,对邮件头跟邮件内容加以区分。
Mail Context
// 以上是邮件内容,可以是多行。
.
// “.”号表示邮件主体的结束。
250 ok 1184307659 qp 118430765900561 (eqmail)
quit
// 请求与服务器断开链接
221 Welcome to my smtp server(EQManager V3.5)
Connection closed by foreign host.
// 邮件发送过程完成。