Мы собираемся научиться ловить / обрабатывать различные типы
исключения / ошибки, которые могут возникнуть при отправке электронного письма с использованием
ASP.Net. Мы реализуем обработку ошибок / исключений, используя разные
классы исключений доступны в System.Net.Mail
.
Сначала узнайте, как отправить электронное письмо с помощью ASP.Net, посетите это
ссылка . Обратите внимание, что в приведенной выше статье (по ссылке)
«SendEmails» ловит только общее исключение и в случае ASP.Net
возникает ошибка при отправке электронной почты, это будет похоже на «Отправка
ошибка электронной почты и т. д. Мы расширим функциональность обработки ошибок для
вышеуказанная статья. Итак, давайте начнем с открытия решения, которое мы
создан ранее. Мы уже поставили блок try-catch, который ловит
общее исключение, которое очень мало говорит о том, что могло бы пойти
неправильно. Давайте сразу поймать различные типы исключений:
Поймать SmtpException
: класс SmtpException
имеет свойство
'StatusCode
', который на самом деле является перечислением, которое получает
значение кода ошибки / исключения, возвращаемое SMTP-сервером при отправке электронной почты
сообщение передается. Он также предоставляет более подробную информацию о
ошибка / исключение, которое может возникнуть в процессе отправки электронной почты. например
catch (SmtpException smtpException)
{ // You can put a switch block to check for different exceptions or errors
// To checks if the destination mailbox is busy
if (smtpException.StatusCode == SmtpStatusCode.MailboxBusy)
throw smtpException;
// To check if the client is authenticated or is allowed to send email using the specified SMTP host
if (smtpException.StatusCode == SmtpStatusCode.ClientNotPermitted)
throw smtpException;
// The following code checks if the email message is too large to be stored in destination mailbox
if (smtpException.StatusCode == SmtpStatusCode.ExceededStorageAllocation)
throw smtpException;
// To check if the email was successfully sent to the SMTP service
if (smtpException.StatusCode == SmtpStatusCode.Ok)
throw smtpException;
// When the SMTP host is not found check for the following value
if (smtpException.StatusCode == SmtpStatusCode.GeneralFailure)
throw smtpException;
}
Поймай SmtpFailedRecipientException
:
SmtpFailedRecipientException
класс имеет дело с исключением, связанным с
получатель электронного письма, например SMTP не может отправить электронное письмо
получатель. SmtpFailedRecipientException
происходит, когда SmtpClient
не может завершить SmtpClient.Send()
или SmtpClient.SendAsync()
операция для конкретного получателя. Чтобы поймать это исключение, используйте
следующий код:
catch (System.Net.Mail.SmtpFailedRecipientException smtpFailedRecipientException)
{
// Get the email that is causing email sending failed exception
String emailCausingException = smtpFailedRecipientException.FailedRecipient;
// Get the status code why and what is actually causing an email sending error
System.Net.Mail.SmtpStatusCode statusCode = smtpFailedRecipientException.StatusCode;
// Take some action either re-send the email again or do some error handling code here
}
Поймай SmtpFailedRecipientsException
:
SmtpFailedRecipientsException
на самом деле коллекция
SmtpFailedRecipientException
объектов, служащих той же цели. это
используется для обработки исключений, когда SmtpClient
не может отправлять электронные письма
одному или нескольким получателям.
catch (System.Net.Mail.SmtpFailedRecipientsException smtpFailedRecipientsException)
{
ArrayList emailCausingException = new ArrayList();
foreach (SmtpFailedRecipientException smtpFailedRecipientException
in smtpFailedRecipientsException.InnerExceptions)
{
// Get the email that is causing email sending failed exception
// Add it to a list of emails with exceptions
emailCausingException.Add(smtpFailedRecipientException.FailedRecipient);
// Get the status code why and what is actually causing an email sending error
System.Net.Mail.SmtpStatusCode statusCode = smtpFailedRecipientException.StatusCode;
// Take some action either re-send the email again or do some error handling
// You can also log or print this status code for an individual recipient here
if (statusCode == SmtpStatusCode.MailboxBusy)
{
//Re-Send email after some time
System.Threading.Thread.Sleep(1000);
//smtpClient.Send();
//Email sending code here
}
}
}