Ошибка электронной почты, когда одно письмо неправильно в том же домене в asp.net - PullRequest
0 голосов
/ 26 июня 2018

У меня есть одна функция «Email» в моем проекте. Если все идентификаторы электронной почты верны в одном домене, электронная почта будет отправлена ​​успешно. если один из адресов электронной почты неправильный, то адрес электронной почты потерпит неудачу и получит ошибку ниже.

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;

Как игнорировать неправильный идентификатор электронной почты и отправлять электронную почту, чтобы сохранить все правильные идентификаторы электронной почты? Я хочу отправить письмо, даже если существует неправильный идентификатор электронной почты. как решить эту проблему? помощь / предложение приветствуется.

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Я не знаю, что такое электронная почта 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

}

EDIT:

Перед отправкой электронного письма вы можете проверить наличие квитанций. Посмотрите на команду STMP VRFY .

0 голосов
/ 26 июня 2018

Поймать исключение как 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 */
}
...