Я ненавижу просто публиковать здесь трассировку стека, но у меня нет идей ... Мое приложение отправляет электронные письма для различных задач на веб-сайте, и в 90% случаев проблем нет. Однако каждый раз ASP.NET выдает странное исключение, которое, похоже, связано с подключением к почтовому серверу (я использую бизнес-серверы Google для электронной почты). Ошибка слишком общая для отладки, поэтому трассировка стека приведена ниже. Мое приложение перехватывает исключение и записывает общий ответ «повторите попытку через 5 минут».
Я озадачен этой ошибкой, потому что:
- Электронная почта Google, как правило, очень надежна (она отправляется с моего домена, а не с gmail.com).
- Объемы очень низкие, поэтому это не должно быть проблемой загрузки / рассылки спама.
- Ошибка очень общая.
- Повторная попытка в течение 5 минут почти всегда позволяет отправить сообщение без проблем, при этом ни один из параметров (получатель, тема, тело) не изменился.
Есть идеи? Единственные нерешенные вопросы, о которых я могу думать, это то, что:
- Отправка электронной почты происходит синхронно. Это то, что я на самом деле хочу, чтобы я отвечал пользователю сообщением о состоянии успеха / неудачи.
- Я использую Amazon EC2 в качестве сервера, если это имеет какое-либо отношение к делу.
код:
public static void SendMail(String from, String to, String subject, String body, bool IsHtml)
{
MailMessage m = new MailMessage(from, to, subject, body);
m.IsBodyHtml = IsHtml;
SmtpClient smtpClient = new SmtpClient();
smtpClient.EnableSsl = true;
smtpClient.Send(m);
}
Исключение:
System.Net.Mail.SmtpException: Error in processing. The server response was: 4.3.0 Mail server temporarily rejected message. m6sm2190005vcx.24
at System.Net.Mail.DataStopCommand.CheckResponse(SmtpStatusCode statusCode, String serverResponse)
at System.Net.Mail.DataStopCommand.Send(SmtpConnection conn)
at System.Net.Mail.SmtpConnection.OnClose(Object sender, EventArgs args)
at System.Net.ClosableStream.Close()
at System.Net.Mail.MailWriter.Close()
at System.Net.Mail.SmtpClient.Send(MailMessage message)