Email Gmail的回应是“我不知道怎么办。”;无效的RFC 5321地址“;RCPT错误,但不是邮件谓词

Email Gmail的回应是“我不知道怎么办。”;无效的RFC 5321地址“;RCPT错误,但不是邮件谓词,email,gmail-api,Email,Gmail Api,在为我们的应用程序编写MSA(排序)的上下文中,我目前正在编写一些代码来测试是否可以连接到给定的地址来发送邮件,包括是否需要身份验证 为了测试后者,我假装从(虚构的)地址发送电子邮件,地址与收件人使用的地址相同 我使用这种方法,尽管我不想这样做,因为我需要能够向服务器发送邮件谓词和RCPT谓词。原因是,据我所知,如果缺少身份验证,则发送邮件之前的任何动词(即EHLO、STARTTLS、AUTH等)都不会引发错误。一些服务器,如Gmail,在发送未经授权的邮件时会出现错误,但其他服务器只有在我尝试

在为我们的应用程序编写MSA(排序)的上下文中,我目前正在编写一些代码来测试是否可以连接到给定的地址来发送邮件,包括是否需要身份验证

为了测试后者,我假装从(虚构的)地址发送电子邮件,地址与收件人使用的地址相同

我使用这种方法,尽管我不想这样做,因为我需要能够向服务器发送邮件谓词和RCPT谓词。原因是,据我所知,如果缺少身份验证,则发送邮件之前的任何动词(即EHLO、STARTTLS、AUTH等)都不会引发错误。一些服务器,如Gmail,在发送未经授权的邮件时会出现错误,但其他服务器只有在我尝试添加收件人时才会做出响应,因此需要使用这两个动词

在虚拟邮件中,我使用IP地址而不是域名的原因是,我不一定有权访问域名。我知道这不漂亮,但它是合法的。如果IP地址是根据RFC 5321指定的

有趣的是,Gmail将使用虚构的邮件地址接受邮件动词,但当收件人使用相同的地址抱怨它不是有效的RFC5321地址时,将抛出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"
SEND:“邮件发件人:”
记录:“250 2.1.0正常s82sm4688131lja.26-gsmtp”
发送:“RCPT至:”
记录:“553-5.1.2收件人地址不是”
“553 5.1.2有效的RFC-5321地址。s82sm4688131lja.26-gsmtp”
我应该注意到,我已经尝试过使用IPv6前缀和不使用IPv6前缀。如果没有它,另一个运行在Postfix上的SMTP服务器会抱怨。基于Postfix的服务器恰好是那些在未经身份验证的情况下发送邮件谓词时未引发错误的服务器之一

顺便说一句,Gmail的这个问题并不局限于IPv6地址。切换到IPv4地址会产生相同的结果。这一问题似乎也与当地地址无关。邮件谓词被接受,RCPT谓词失败

据我所知,我提供的是一个符合RFC 5321的适当地址。发生什么事?我哪里出错了?乍一看,问题似乎出在GMail/GSMTP上。

好吧,是的,GMail/SMTP在一个松散的词的意义上是一个“问题”;一个“问题”,即他们拒绝接受发送至RFC 5321中规定的
地址文本的电子邮件

尽管RFC5321允许在
RCPT中使用地址文字,但Gmail显然选择不支持它,不管出于何种原因。我相信Gmail并不是世界上唯一一家出于某种原因不支持SMTP协议某些神秘部分的邮件提供商

差不多就是这样。这里的答案几乎是,“它就是它的本来面目”。您发送的命令符合RFC 5321。Gmail拒绝了它。结束

如果你想在这方面学究气十足,RFC 5321第3.3节还规定:

类似地,服务器可能会拒绝接受发送到服务器的邮件 其他主机或系统

因此,学究般地说,Gmail的邮件服务器在技术上不需要为Gmail以外的任何人接收邮件。就这样

你的选择是:

  • 不要使用地址文字

  • 使用另一个支持指定为地址文本的目标地址的邮件服务器提供程序


  • 你应该问谷歌这个。可能是因为他们太快将地址小写了。或者可能是故意的,因为IP电子邮件地址格式除了发送垃圾邮件外很少使用。@RustyX我最初在productforums.google.com的Gmail论坛上发布了这个问题,但被指向了一个关于Gmail API的页面,这反过来又把我带到了这里。很公平,但是为什么Gmail在我发送邮件时没有出现类似的错误呢?保持一致就好了。顺便说一句,被拒绝的地址,没有用户名,与用于EHLO的地址相同,并且在那里也有效。至于选项,我使用的是我可用的IP地址。这可以是IPv4或IPv6。我也无法控制这一切。MSA将用于许多不同的服务器。我目前正在测试Gmail(和其他几个)。现在我发现了它的不一致/错误行为,并希望对其进行一些输入。你可以拥有所有你想要的“输入”,但这不会有任何区别。这就是Gmail服务器的工作方式,无论出于什么原因,都无法改变这一点。唯一能让Gmail服务器接受原始IP地址文本的邮件的人是他们的邮件管理员。