在为我们的应用程序编写MSA(各种类型)的上下文中,我正在编写一些代码来测试是否可以连接到给定地址以发送邮件,包括是否需要身份验证。
为了测试后者,我假装从(虚构)地址发送一封电子邮件,其中包含与收件人相同的地址。
我使用这种方法,虽然我不必这样做,因为我需要能够向服务器发送MAIL动词和RCPT动词。这样做的原因是,据我所知,在发送MAIL之前没有动词(即EHLO,STARTTLS,AUTH等),如果缺少认证,则会引发错误。某些服务器(例如Gmail)在发送未经授权的邮件时会回复错误,但其他服务器只有在我尝试添加收件人时才会做出反应,因此需要两个动词。
我在虚构邮件中使用IP地址而不是域名的原因是我不一定能够访问域名。我知道它不漂亮,但它是合法的。提供的IP地址是根据RFC 5321指定的。
有趣的是,Gmail会使用虚构的邮件地址接受MAIL动词,但如果收件人使用相同的地址抱怨它不是有效的RFC 5321地址,则会抛出553错误。
SEND: "MAIL FROM:<test@[IPv6:fe80::105e:c040:c56c:b8bc]>"
RECV: "250 2.1.0 OK s82sm4688131lja.26 - gsmtp"
SEND: "RCPT TO:<test@[IPv6:fe80::105e:c040:c56c:b8bc]>"
RECV: "553-5.1.2 The recipient address <test@[ipv6:fe80::105e:c040:c56c:b8bc]> is not a"
"553 5.1.2 valid RFC-5321 address. s82sm4688131lja.26 - gsmtp"
我应该注意到,无论使用和不使用IPv6前缀,我都尝试了这一点。没有它,在Postfix上运行的另一个SMTP服务器会抱怨。基于Postfix的服务器巧合地是在发送未经身份验证的MAIL动词时没有抛出错误的服务器之一。
顺便提一下,Gmail的这个问题并不局限于IPv6地址。切换到IPv4地址会产生相同的结果。问题似乎也与本地地址无关。接受MAIL动词,RCPT动词失败。
据我所知,我提供的是符合RFC 5321标准的地址。发生了什么事?我哪里出错了?乍一看,问题似乎与GMail / GSMTP有关。
答案 0 :(得分:1)
嗯,是的,这是一个松散意义上的Gmail / SMTP的“问题”;他们拒绝接受发送到address-literal
的电子邮件的“问题”,如RFC 5321中所述。
尽管RFC 5321允许RCPT TO
中的地址文字,但Gmail显然选择不支持它,无论出于何种原因使用它们。我相信,Gmail并不是世界上唯一一个因某种原因不支持SMTP协议的神秘部分的邮件提供商。
这就是它。这里的答案是,“它就是它的本质”。您发送的命令符合RFC 5321. Gmail拒绝该命令。结束。
如果你想对此迂腐,RFC 5321的3.3节也说明了:
同样,服务器可能拒绝接受发往的邮件 其他主机或系统。
因此,从技术上讲,Gmail的邮件服务器在技术上并不需要为Gmail以外的任何其他人接收邮件。就是这样。
您的选择是:
请勿使用地址文字。
使用另一个支持指定为地址文字的目标地址的邮件服务器提供程序。