SMTP是简单邮件传输协议(Simple Mail Transfer Protocol)的缩写,这篇文章将经过如何使用telnet命令发生邮件结合RFC文档来学习一下SMTP协议的基础知识。html
根据OSI7层或者5层的模型不一样,各层常见的协议信息以下:ruby
其实协议众多,这里借用一张来源与网络的整理结果用于展现OSI7层模型的常见协议的信息,包括应用层的SMTP/POP3/IMAP4服务器
SMTP和POP3以及IMAP都是用来作什么的,简单的来讲,smtp主要负责发,pop3和imap主要负责收。
一封邮件的发&收的流程是经过SMTP进行发送,使用POP3或者IMAP4进行接收的。markdown
SMTP的RFC初始版本是RFC 821,如下列出了SMTP相关的一部分RFC变化的列表网络
RFC版本 | 时间 | 说明 | URL |
---|---|---|---|
RFC 821 | 1982/08 | 初始版本 | https://tools.ietf.org/html/rfc821 |
RFC 974 | 1986/01 | 域名系统需求和实现相关 | https://tools.ietf.org/html/rfc974 |
RFC 1035 | 1987/11 | 域名系统需求和实现相关 | https://tools.ietf.org/html/rfc1035 |
RFC 1869 | 1995/11 | ESMTP规格扩展 | https://tools.ietf.org/html/rfc1869 |
RFC 2841 | 2001/04 | - | https://tools.ietf.org/html/rfc2841 |
RFC 5321 | 2008/10 | - | https://tools.ietf.org/html/rfc5321 |
参看RFC5321,能够了解到SMTP的模型以下:工具
SMTP中包含一些基本的命令用于客户端和服务器端进行交互,现列出一些常见的指令:学习
指令 | 说明 |
---|---|
HELO | 与服务器确认,通知其客户端使用的机器名称,通常邮件服务器不作限定 |
AUTH | 使用AUTH LOGIN与服务器进行登陆验证 |
MAIL FROM | 发件人信息,填写与认证信息不一样每每被定位为垃圾邮件或恶意邮件 |
RCPT TO | 收信人地址 |
DATA | 输入邮件基本信息 |
FROM | 邮件基本信息:发信人显示信息(此处能够伪造身份,可是很是容易被识别) |
FROM | 邮件基本信息:服务器收件人显示信息 |
SUBJECT | 邮件基本信息:邮件标题,不填写也每每容易被定位为垃圾邮件 |
QUIT | 断开连接 |
返回码 | 说明 |
---|---|
220 | 服务就绪 |
250 | 请求动做成功完成 |
235 | 认证经过 |
221 | 处理中 |
354 | 发送开始,每每与data指令结合 |
500 | 指令错误 |
550 | 命令没法执行 |
SMTP客户端与SMTP服务器端一个常见的流程以下所示:编码
使用telnet可使用SMTP指令与服务器端进行交互,不一样的OS telnet的安装不一样,好比:spa
操做系统 | 安装方式 |
---|---|
CENTOS | yum install telnet |
MacOS | brew install telnet |
Alpine | apk add busybox-extras(Alpine 3.7版本之后,以前包含在busybox中) |
这里使用163的免费信箱进行mail发送试验,信息以下:操作系统
项目 | 说明 |
---|---|
发送方 | devopsadmin@163.com |
接收方 | liumiaocn@outlook.com |
邮件标题 | confirm information |
Hi, Michael
I got your message. Looking forward to meeting you. Thanks & Best Regards.
[root@platform ~]# telnet smtp.163.com 25 Trying 123.125.50.134... Connected to smtp.163.com. Escape character is '^]'. 220 163.com Anti-spam GT for Coremail System (163com[20141201]) HELO liumiao 250 OK AUTH LOGIN 334 dXNlcm5hbWU6 ZGV2b3BzYWRtaW4= 334 UGFzc3dvcmQ6 密码的base64编码 235 Authentication successful MAIL FROM:<devopsadmin@163.com> 250 Mail OK RCPT TO:<liumiaocn@outlook.com> 250 Mail OK DATA 354 End data with <CR><LF>.<CR><LF> FROM: devopsadmin@163.com To: liumiaocn@outlook.com Subject: confirm information Hi, Michael I got your message. Looking forward to meeting you. Thanks & Best Regards. . 250 Mail OK queued as smtp4,DtGowAAHhSrBwV5bL3XJAA--.5571S2 1532936690 Connection closed by foreign host. [root@platform ~]#
输入AUTH LOGIN以后须要输入用户名和密码进行登陆,登陆时注意以下事项
请注意看一下以下代码包含换行与否的状况,认证通不过的时候,请注意检查
[root@platform ~]# echo -n "devopsadmin" |base64 ZGV2b3BzYWRtaW4= [root@platform ~]# echo "ZGV2b3BzYWRtaW4=" |base64 -d devopsadmin[root@platform ~]# [root@platform ~]# [root@platform ~]# echo "devopsadmin" |base64 ZGV2b3BzYWRtaW4K [root@platform ~]# echo "ZGV2b3BzYWRtaW4K" |base64 -d devopsadmin [root@platform ~]#
DATA段为mail的正文,在这里还能够设定FROM/TO,有些人会在这里试图改变设定来攥改发信的地址,好比那些垃圾邮件的发送者,基本上邮件系统都会在这里作防御。好比163的邮箱,反垃圾邮件的策略以下,对伪造邮件头或者其余方式的欺骗性手段都会进行判断:
一、收件人事先没有提出要求或者赞成接收且没法拒收的; 二、使用或包括无效的或伪造的邮件头; 三、使用或包括伪造的、无效的或者不存在的域名; 四、利用任何技术伪造、隐藏或掩盖传输路径来源的识别信息; 五、使用任何方式生成欺骗性地址信息; 六、在没有得到第三方许可的状况下使用、中继或经过第三方的互联网设备; 七、主题行或内容包含错误、误导或虚假的信息; 八、违反了国家相关法律规定和网易服务条款。
好比DATA部分的FROM/TO/Subject等不正常设定,你很容易会收到包含554 DT:SPM的信息:
554 DT:SPM 163 smtp4,DtGowABXwXYYqF5bzXrBAA--.5359S2 1532930131,please see http://mail.163.com/help/help_spam_16.htm?ip=61.152.164.43&hostid=smtp4&time=1532930131
如下为网易免费邮箱关于垃圾邮件相关的错误码:
•554 DT:SPM 发送的邮件内容包含了未被许可的信息,或被系统识别为垃圾邮件。请检查是否有用户发送病毒或者垃圾邮件; •554 DT:SUM 信封发件人和信头发件人不匹配; •554 IP is rejected, smtp auth error limit exceed 该IP验证失败次数过多,被临时禁止链接。请检查验证信息设置; •554 HL:IHU 发信IP因发送垃圾邮件或存在异常的链接行为,被暂时挂起。请检测发信IP在历史上的发信状况和发信程序是否存在异常; •554 HL:IPB 该IP不在网易容许的发送地址列表里; •554 MI:STC 发件人当天内累计邮件数量超过限制,当天再也不接受该发件人的投信。请下降发信频率; •554 MI:SPB 此用户不在网易容许的发信用户列表里; •554 IP in blacklist 该IP不在网易容许的发送地址列表里。
PS:技术不是用来发送垃圾邮件或者欺骗性的邮件的,并且不少免费的资源每每自己具备公益性质,请不要利用别人没有关闭的门窗让互联网变得更加污浊,学习的时候也请给本身发信不要打扰别人。
https://tools.ietf.org/html/rfc5321
http://help.163.com/09/1224/14/5RAB4VK500753VB8.html?servCode=6010330
http://help.163.com/09/1224/17/5RAJ4LMH00753VB8.html