asp.net 同一域中的一封电子邮件错误时电子邮件失败
Email failure when one email is wrong in same domain in asp.net
我的 project.if 中有一个 "Email" 函数,同一域中的所有电子邮件 ID 都是正确的,电子邮件将成功发送。如果其中一封电子邮件有误,则电子邮件将失败并出现以下错误。
Exception:-The server rejected one or more recipient addresses. The server response was: 550 5.0.0 Requested action not taken: mailbox unavailable or not local. , InnerException:-System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Runtime.InteropServices.COMException: The server rejected one or more recipient addresses. The server response was: 550 5.0.0 Requested action not taken: mailbox unavailable or not local. --- End of inner exception stack trace --- at System.RuntimeType.InvokeDispMethod(String name, BindingFlags invokeAttr, Object target, Object[] args, Boolean[] byrefModifiers, Int32 culture, String[] namedParameters) at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams) at System.Web.Mail.SmtpMail.LateBoundAccessHelper.CallMethod(Object obj, String methodName, Object[] args) , Stack Trace :- at System.Web.Mail.SmtpMail.LateBoundAccessHelper.CallMethod(Object obj, String methodName, Object[] args) at System.Web.Mail.SmtpMail.CdoSysHelper.Send(MailMessage message) at System.Web.Mail.SmtpMail.Send(MailMessage message) at Entity.Common.Mail.SendMail(String mailFrom, String mailTo, String mailCc, String Subject, String Content, String Bcc, String optionalfrom)
代码如下
MailAddress xfrom = new MailAddress(EmailFrom);
MailMessage mm = new MailMessage();
mm.Sender = xfrom;
mm.From = xfrom;
//to
string[] tos = EmailTO.Trim().Split(';');
for (int i = 0; i < tos.Length; i++)
{
mm.To.Add(new MailAddress(tos[i]));
}
SmtpClient smtp = new SmtpClient();
smtp.Host = smtpServer;
smtp.Credentials = new NetworkCredential(smtpMailAccount, smtpMailPassword);
smtp.Send(mm);
IsSuccess = true;
如何忽略错误的电子邮件 ID 并发送电子邮件以保留所有正确的电子邮件 ID?即使存在错误的电子邮件 ID,我也想发送电子邮件。如何解决这个问题?帮助/建议表示赞赏。
将异常捕获为 SmtpFailedRecipientException
,其中有 属性 FailedRecipient
。从 To
集合中删除这个,然后重试直到不再抛出 SmtpFailedRecipientException
。
我所做的一个项目的一小段摘录,请注意,该异常还有一个复数版本,它的 InnerExceptions
列表中可以包含多个失败的收件人:
try
{
/* code to send */
}
catch (SmtpFailedRecipientsException recsex)
{
var failedRecipient = String.Empty;
foreach (var rex in recsex.InnerExceptions)
{
/* rex.FailedRecipient contains the invalid address to remove
* before the next attempt.
* note that you might end up with an empty recipient list
* in case all were invalid, then you should also no longer
* attemtp to resubmit the mail */
}
}
catch (SmtpFailedRecipientException recex)
{
/* recex.FailedRecipient contains the invalid address to remove
* before the next attempt */
}
我不知道电子邮件 id 是什么。
但如果您的目标是忽略某些电子邮件,您可以尝试绕过它。
try {
//yourcode
} catch (Exception e)
{
if (/*Check if e is not equal to "mailbox unavailable or not local"*/) throw; //beacuse its an other error
//your wrong email "id" error gets ignored
}
编辑:
如果收件人存在,您可以在发送电子邮件之前检查。看一下 STMP VRFY 命令。
我的 project.if 中有一个 "Email" 函数,同一域中的所有电子邮件 ID 都是正确的,电子邮件将成功发送。如果其中一封电子邮件有误,则电子邮件将失败并出现以下错误。
Exception:-The server rejected one or more recipient addresses. The server response was: 550 5.0.0 Requested action not taken: mailbox unavailable or not local. , InnerException:-System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Runtime.InteropServices.COMException: The server rejected one or more recipient addresses. The server response was: 550 5.0.0 Requested action not taken: mailbox unavailable or not local. --- End of inner exception stack trace --- at System.RuntimeType.InvokeDispMethod(String name, BindingFlags invokeAttr, Object target, Object[] args, Boolean[] byrefModifiers, Int32 culture, String[] namedParameters) at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams) at System.Web.Mail.SmtpMail.LateBoundAccessHelper.CallMethod(Object obj, String methodName, Object[] args) , Stack Trace :- at System.Web.Mail.SmtpMail.LateBoundAccessHelper.CallMethod(Object obj, String methodName, Object[] args) at System.Web.Mail.SmtpMail.CdoSysHelper.Send(MailMessage message) at System.Web.Mail.SmtpMail.Send(MailMessage message) at Entity.Common.Mail.SendMail(String mailFrom, String mailTo, String mailCc, String Subject, String Content, String Bcc, String optionalfrom)
代码如下
MailAddress xfrom = new MailAddress(EmailFrom);
MailMessage mm = new MailMessage();
mm.Sender = xfrom;
mm.From = xfrom;
//to
string[] tos = EmailTO.Trim().Split(';');
for (int i = 0; i < tos.Length; i++)
{
mm.To.Add(new MailAddress(tos[i]));
}
SmtpClient smtp = new SmtpClient();
smtp.Host = smtpServer;
smtp.Credentials = new NetworkCredential(smtpMailAccount, smtpMailPassword);
smtp.Send(mm);
IsSuccess = true;
如何忽略错误的电子邮件 ID 并发送电子邮件以保留所有正确的电子邮件 ID?即使存在错误的电子邮件 ID,我也想发送电子邮件。如何解决这个问题?帮助/建议表示赞赏。
将异常捕获为 SmtpFailedRecipientException
,其中有 属性 FailedRecipient
。从 To
集合中删除这个,然后重试直到不再抛出 SmtpFailedRecipientException
。
我所做的一个项目的一小段摘录,请注意,该异常还有一个复数版本,它的 InnerExceptions
列表中可以包含多个失败的收件人:
try
{
/* code to send */
}
catch (SmtpFailedRecipientsException recsex)
{
var failedRecipient = String.Empty;
foreach (var rex in recsex.InnerExceptions)
{
/* rex.FailedRecipient contains the invalid address to remove
* before the next attempt.
* note that you might end up with an empty recipient list
* in case all were invalid, then you should also no longer
* attemtp to resubmit the mail */
}
}
catch (SmtpFailedRecipientException recex)
{
/* recex.FailedRecipient contains the invalid address to remove
* before the next attempt */
}
我不知道电子邮件 id 是什么。
但如果您的目标是忽略某些电子邮件,您可以尝试绕过它。
try {
//yourcode
} catch (Exception e)
{
if (/*Check if e is not equal to "mailbox unavailable or not local"*/) throw; //beacuse its an other error
//your wrong email "id" error gets ignored
}
编辑:
如果收件人存在,您可以在发送电子邮件之前检查。看一下 STMP VRFY 命令。