Can an SMTP server respond with a failure such as 552?
我们使用 Mandrill 发送电子邮件,我们想知道关于无法传递的消息的 SMTP 响应。例如,当收件人的邮箱已满时会出现 552。
SMTP 服务器只需几秒钟即可响应。在这段时间内,邮件是否到达收件人的邮箱?
如果是这样,如果邮件不能立即送达怎么办?是否存在超时,即使电子邮件未送达,SMTP 服务器也会响应?
It only takes a few seconds for the SMTP server to respond. Within
that time, does the message get to the recipient's mailbox?
如果服务器因为邮箱已满而发送错误,这很好地表明邮件没有到达收件人的邮箱。
If so, what happens if the mail cannot be delivered immediately? Is
there a timeout such that the SMTP server responds even when the email
is not delivered?
这取决于您连接的服务器。如果您直接连接到目标服务器(例如 Exchange 服务器),它通常会知道它是否可以接受电子邮件(例如因为邮箱已满),并且可以通过拒绝发送来立即响应。
如果您连接到将电子邮件路由到另一个邮件服务器的 MTA,那么当您连接到它时,它不会知道收件人的邮箱是否已满。但是,它可能会出于其他原因拒绝该电子邮件(例如,如果您的 IP 地址因发送垃圾邮件而闻名)。 MTA 通常会在尝试将电子邮件传递到另一个邮件服务器之前接受整个邮件。
如果 MTA 尝试投递电子邮件并收到永久性 (5xx) 错误,则 MTA 将不会再次尝试投递电子邮件。如果错误是暂时性 (4xx) 错误,则 MTA 通常会等待一段时间,然后再次尝试投递邮件。大多数 MTA 都会设置一个超时时间,之后它们就会停止尝试投递邮件。
大多数现代 MTA 都支持 DSN 作为 SMTP 扩展。 (DSN 代表传递状态通知:有关详细信息,请参阅 https://www.rfc-editor.org/rfc/rfc3461。)当支持 DSN 的 MTA 无法将电子邮件传递给收件人时,它会向发件人发送 DSN 消息表示它无法发送电子邮件。
对于经过身份验证/受信任的发件人的 AFAIK,大多数 SMTP 服务器部署"在任何转发尝试之前接受并存储在队列中"。
如果您想要更详细的信息,请使用您使用的名称 SMTP 服务器软件。