SMTP错误代码并确定是否仍然传递电子邮件

时间:2010-06-08 10:04:57

标签: c# smtp

我正在使用System.Net.Mail来发送邮件。我不知道它将连接到的SMTP中继的类型/版本。

某些错误会导致无法发送电子邮件(例如,没有地址或地址无效),而其他错误仍会导致发送电子邮件。

E.g。发送至:bob@somewhere.com CC:fred@somewhere.com和DoesNotExist@somewhere.com可能导致错误

The server response was: 550 #5.1.0 Address rejected DoesNotExist@somewhere.com.

但电子邮件似乎仍然传递给鲍勃和弗雷德。

是否有任何关于哪些错误代码仍然会导致电子邮件被传递或以任何编程方式确定这一点的参考?

3 个答案:

答案 0 :(得分:1)

RFC 821是描述SMTP的信息,包含有关不同类型错误的信息,但不确定它是否包含您要查找的详细信息。无论哪种方式,即使您可以发现邮件服务器接受了某些用户的电子邮件,这与发送给他们的情况不同。

据我所知,除非收件人邮件客户端以某种方式告诉您,否则无法判断是否已发送电子邮件。

答案 1 :(得分:1)

这是SMTP运行的方式,如RFC中所述。 未能向一位收件人发送邮件不会影响向其他收件人的投放。

通常,以4和5开头的代码是失败,以2开头的代码是成功代码 - 请参阅RFC821部分“4.2.2。回复代码的数字顺序列表”。

“正在传递的电子邮件”很难定义。 SMTP服务器定义接受交付的电子邮件由SMTP协议定义(并且服务器将发出接收信号以发送消息),但此服务器可能只是将消息中继到另一台服务器,或者在智能主机配置,它只接受消息并将它们传递给智能主机 - 交付是另一回事,它通常与本地交付(LMTP)相关联。

有些邮件客户端解决了这个问题,即无法通过实现可怕的阅读回执来判断是否已传递邮件 - 但此实现完全在客户端,而AFAIK则与SMTP无关。

答案 2 :(得分:0)

未送达报告(NDR)是向发件人报告邮件传递状态的系统邮件。消息是一般消息信息结构的子类,称为传递状态通知。交付状态通知描述了三种不同类型的情况:

* Success (2.X.X numeric codes)
* Persistent transient failure (4.X.X numeric codes)
* Permanent failures (5.X.X numeric codes)

要了解有关传递状态通知的详细信息,请参阅Request for Comment(RFC)1891和RFC 1893。

来自Microsoft支持部门http://support.microsoft.com/kb/284204