电子邮件的传递过程中有几个重要的角色:
- Mail User Agent。用户通过用户代理(即各种邮箱客户端)完成邮件的收发操作。
- Mail Transfer Agent。用户发送的邮件通常指定由某个邮箱服务器代理。MUA通过SMTP协议发送邮件到MTA。在此过程中MTA可能要求登录以确认MUA的身份。随后MTA使用SMTP协议将邮件投递到目标邮箱的服务器上。
- MX记录。目标邮箱中带有目标邮箱服务器的域名(即xxx@abc.com中后面的部分),通过解析该域名的MX记录即可知道目标邮箱服务器的IP地址。
- Mail Deliver Agent。由于用户不可能随时在线,因此邮件最终会到达某个MDA上并被保存。在MDA收取邮件的过程中,同样需要通过发件人邮箱域名的MX记录验证MTA的身份。在邮件成功到达之后,用户便可通过MUA和POP/IMAP协议最终收取邮件。
MUA --smtp--> MTA --smtp--> MTA -> MDA --pop/imap--> MUA
相关RFC
Message Submission for Mail: RFC6409
RFC1939: Post Office Protocol - Version 3
RFC3501: INTERNET MESSAGE ACCESS PROTOCOL
Telnet模拟MUA
MTA 以 smtp.163.com 为例,对应账户需要在 163 邮箱的设置页面开启 SMTP 服务才能正常登录。
telnet> open smtp.163.com 25
220 163.com Anti-spam GT for Coremail System (163com[20141201])
EHLO MUA-Desktop
250-mail
250-PIPELINING
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-coremail 1Uxr2xKj7kG0xkI17xGrU7I0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UFy4XJEUCa0xDrUUUUj
250-STARTTLS
250 8BITMIME
AUTH LOGIN
334 VXNlcm5hbWU9 # Base64的'Username='
输入Base64编码的用户名
334 UGFzc3dvcmQ9 # Base64的'Password='
输入Base64编码的密码
335 Auth Success
MAIL FROM: <xxx@163.com>
250 OK.
RCPT TO: <xxx@abc.com>
250 OK 1
data
354 Start mail input; end with <CRLF>.<CRLF>
from: User1 <xxx@163.com>
to: User2 <xxx@abc.com>
subject: Test
xxxxxxxxxxxxxxxxxxx
.
250 OK
QUIT
Telnet模拟MTA
要求发件人邮箱域名的MX记录和telnet的服务器ip相同。
telnet> open smtp.163.com 25
220 163.com Anti-spam GT for Coremail System (163com[20141201])
EHLO MUA-Desktop
250-mail
250-PIPELINING
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-coremail 1Uxr2xKj7kG0xkI17xGrU7I0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UFy4XJEUCa0xDrUUUUj
250-STARTTLS
250 8BITMIME
MAIL FROM: <xxx@abc.com>
250 OK.
RCPT TO: <xxx@def.com>
250 OK 1
data
354 Start mail input; end with <CRLF>.<CRLF>
from: User1 <xxx@abc.com>
to: User2 <xxx@def.com>
subject: Test
xxxxxxxxxxxxxxxxxxx
.
250 OK
QUIT