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 命令。