关于发送邮件的身份

在使用SMTP发送邮件时,有几个地方涉及到发件人身份。有些同学对这些地方感到困惑,我简单解释下。

比如你用foo@bar.com这个邮箱,使用SMTP客户端发送一份邮件,那么在AUTH阶段,需要输入用户名和密码进行认证(普通的MTA外发都需要验证,除非是内部自己配置的信任MTA)。这个用户名是不是一定是foo呢?答案是否。可以使用任何用户名,只要能通过MTA的身份鉴定。这是第一个涉及到身份的地方。

通过身份认证后,使用mail from命令,这里需要输入你的sender邮箱,是不是必须是mail from:<foo@bar.com>呢?答案是否。理论上可以是任何邮箱,比如any@mail.com。这是第二个涉及到身份的地方。

最后,在邮件的data命令里,title部分有个from:头部,这里表明收件人看到的发信者邮箱,是不是必须from: <foo@bar.com>呢?答案还是否。这里可以是任何邮箱,存在或不存在的都行,比如noreply@aol.com。这是第三个表明身份的地方。

所以,你的真实邮箱是foo@bar.com,但是你发出去的邮件,接受人看到的真实sender可以是any@mail.com,邮件主题里的发件人地址可以是noreply@aol.com。

演示一下,我有个Arcor.de邮局帐号,邮件地址是pangj@arcor.de。用这个邮局发送一封邮件过程如下:

smtpsend

 

如上图,第一个红色框起来的,是pangj这个用户名的base64编码。第二个红色框起来的,是用support@dnsbed.com这个sender发送邮件。第三个红色框起来的,是让邮件title里显示的发件人地址为noreply@nsbeta.info。

收件人在客户端里看到的邮件内容如下:

boxview

 

他看到的发件人是noreply@nsbeta.info,但是邮件头里会有如下一行:

Return-Path: <support@dnsbed.com>

Return-Path会表明真正的sender是support@dnsbed.com。

所以,从这个过程看到,即使我有一个pangj@arcor.de的邮件地址,也可以发送support@dnsbed.com的信件,并且接收人看到的发信人是noreply@nsbeta.info。这里的所有会话过程都是标准的,不违背任何SMTP协议。

当然,一般的商业邮局比如163、QQ,不会允许你这么做。他们的邮件系统里,涉及到上述三个身份的地方,必须一致(系统有效账户)才能发送成功。

此条目发表在Common分类目录,贴了, 标签。将固定链接加入收藏夹。