osc*_*tin 6 .net email-address smtpclient mailmessage resolve
我正在使用SmtpClient向多个收件人发送电子邮件.员工离开公司时,他们的电子邮件地址无效.由于他们的电子邮件地址留在我们的数据库中,直到手动删除,试图发送电子邮件给他们使我们的应用过程中抛出一个异常SmtpClient.Send(MailMessage).但是,尽管抛出异常,它仍会发送电子邮件.这是一个问题,因为我们希望通过阻止用户尝试保存记录并显示友好消息来建议从数据库中删除任何无效的关联来处理此错误.
如果有办法迭代所有配方以确保它们全部有效,我们可以保留所有电子邮件,直到用户满足一系列条件.
这是一个非常古老的问题,我不知道你是否已经解决了.
根据MSDN:http://msdn.microsoft.com/en-us/library/swas0fwc( v= vs.100).aspx
使用" 发送给多个收件人" 发送电子邮件并且SMTP服务器接受某些收件人为有效并拒绝其他收件人时," 发送"会向接受的收件人发送电子邮件,然后 抛出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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这里有完整的示例:http://msdn.microsoft.com/en-us/library/system.net.mail.smtpfailedrecipientsexception.aspx?cs-save-lang = 1&ct-lang = csharp#code -snippet-
在内部Send使用statuscodereturn from RCPT TO命令来引发适当的异常.
检查实施PrepareCommand的RecipientCommand.Send方法smtpTransport.SendMail(该方法是通过内部调用SmtpClient.Send).它用于RCPT TO获取StatusCode然后在CheckResponse方法中解析的内容,并相应地SmtpFailedRecipientsException引发它.但是,VRFY和RCPT都不是非常可靠,因为邮件服务器倾向于延迟(限制NDR)或吞下响应作为反垃圾邮件措施.
| 归档时间: |
|
| 查看次数: |
4307 次 |
| 最近记录: |