ASP.Net - отправка писем

Я отправляю электронное письмо из веб-приложения, используя NetMail, и оно работает нормально, когда все в порядке! Я пытаюсь отследить некоторые ошибки, в частности неправильный адрес электронной почты, который должен вызвать исключение, но, похоже, это не так. Мой адрес электронной почты: fisrstname.dot.middleinitial.lastname@domain_name. Я специально не включаю среднюю букву, чтобы вызвать ошибку, но когда я прослеживаю код, он проходит. Вот что у меня есть:

SmtpClient sc = new SmtpClient(<Mail_relay>);
sc.Credentials = new NetworkCredential();

try
{
    sc.Send(mm);
}
catch (SmtpFailedRecipientsException FRE)  
{                          
    foreach (SmtpFailedRecipientException smtpFailedRecipientException in FRE.InnerExceptions)  
    {  
        // Get the email that is causing the exception  
        string sFailedRecipient = smtpFailedRecipientException.FailedRecipient;

        // Get the status code  
        SmtpStatusCode sc = FRE.StatusCode;  
    }  
}  
catch (SmtpException smtpEx)
{
    SmtpStatusCode sc = smtpEx.StatusCode;
}
catch (Exception generalEx)
{
    string sMessage = generalEx.Message;
}

Я думал, что плохой адрес электронной почты будет пойман в первом блоке перехвата, но это не так, он просто проходит через все блоки перехвата.

2 ответа

Решение

В основном это связано с тем, как работает SMTP. Вы должны понять, что при использовании SMTP в качестве транспорта сообщений секция catch вашего кода обычно срабатывает только в том случае, если сервер, которому ваша машина пытается передать сообщение, не принимает сообщение и возвращает действительный статус или произошла ошибка связи при отправке. В зависимости от того, с какой машины вы отправляете (то есть, где она находится в вашей организации netowkr и т. Д.), Это может быть все, на что вы можете надежно рассчитывать.

Ключевым моментом является то, что сервер, на котором ваша машина пытается передать сообщение, может не являться сервером, содержащим папку входящих сообщений, на которую должно быть доставлено сообщение; или целевой SMTP-сервер не проверяет его во время связи (да, это возможно). В последнем случае сообщение отклоняется асинхронно от вашей первоначальной попытки связи. Это связано с тем, что существует много почтовых серверов, которые просто принимают входящие сообщения как можно быстрее с минимальной проверкой и помещают их в очередь для обработки в отдельном потоке.

Используйте эти ссылки для справки

  1. Проверка адреса электронной почты в C#

  2. Проверка электронной почты Regex

есть два варианта

  1. Вы можете создать регулярное выражение и сопоставить почтовый адрес, и если он не совпадает, вы можете выбросить исключение.

  2. или вы можете создать объект mailaddress и поместить его в блок try и использовать исключение FormatException, встроенное в C#

Другие вопросы по тегам