这是一个很老的问题,我不知道你是否解决了它。
根据 MSDN: http: //msdn.microsoft.com/en-us/library/swas0fwc (v=vs.100).aspx
当使用Send向多个收件人发送电子邮件并且 SMTP 服务器接受某些收件人为有效收件人并拒绝其他收件人时,Send会向接受的收件人发送电子邮件,然后
引发SmtpFailedRecipientsException。例外将包含被拒绝的收件人列表。
这是从 MSDN 中捕获此异常的示例:
try {
client.Send(message);
}
catch (SmtpFailedRecipientsException ex) {
for (int i = 0; i < ex.InnerExceptions.Length; i++) {
SmtpStatusCode status = ex.InnerExceptions[i].StatusCode;
if (status == SmtpStatusCode.MailboxBusy || status == SmtpStatusCode.MailboxUnavailable) {
Console.WriteLine("Delivery failed - retrying in 5 seconds.");
System.Threading.Thread.Sleep(5000);
client.Send(message);
}
else {
Console.WriteLine("Failed to deliver message to {0}", ex.InnerExceptions[i].FailedRecipient);
}
}
}
此处的完整示例:http: //msdn.microsoft.com/en-us/library/system.net.mail.smtpfailedrecipientsexception.aspx ?cs-save-lang=1&cs-lang=csharp#code-snippet-2
在内部,Send
使用statuscode
从RCPT TO
命令返回的来引发适当的异常。
检查方法中PrepareCommand
的实现(此方法由内部调用)。它用于获取然后在方法中解析的,并因此引发。但是,VRFY 和 RCPT 都不是很可靠,因为邮件服务器往往会延迟(限制 NDR)或吞下响应作为反垃圾邮件的措施。RecipientCommand.Send
smtpTransport.SendMail
SmtpClient.Send
RCPT TO
StatusCode
CheckResponse
SmtpFailedRecipientsException