Я работаю с аккаунтом GoogleApps для отправки уведомлений о событиях из моего (mvc) веб-приложения.Обычно все отлично работает.Когда системе предлагается отправить более 75 сообщений или около того, я вижу ответы от SMTP-сервера:
Услуга недоступна, закрытие канала передачи.Ответ сервера был: 4.7.0 Попробуйте позже, закрыв соединение.(MAIL) uf10sm1153163icb.17
Тем не менее, система автоматически повторяет попытку, и все, что моя система просит, в конечном итоге отправить (всем, что я могу сказать как этот пункт), разобрано.Но, учитывая, как код генерирует и отправляет электронные письма, я не понимаю, как обрабатываются эти повторные попытки.
Я хотел бы попытаться замедлить передачу в надежде, что что-то, что вызывает «Сервис недоступен»условие будет умиротворено, если представления происходят асинхронно.Но, судя по всему, это уже так, поскольку я использую Try |блок catch.
Вот соответствующий бит моего кода фасада:
foreach (string email in recipientEmails)
{
try
{
EmailGateway.Instance.SendEmail(email, notificationSubject, notificationMessage);
}
catch (Exception ex)
{
Logger.Instance.LogException(ex);
Logger.Instance.LogMessage("ERROR! Unsent email is to: " + email );
}
Logger.Instance.LogMessage("Sent " + notificationSubject + " to " + email);
}
А вот код шлюза (с использованием System.Net.Mail;):
public virtual void SendEmail(string replyToAddress, string toEmailAddress, string subject, string body)
{
string destinationEmailAddress = toEmailAddress;
string fromEmailAddress = "my@address.com";
bool useSSL = "true";
MailMessage message = new MailMessage(fromEmailAddress, destinationEmailAddress, subject, body);
message.IsBodyHtml = true;
SmtpClient smtp = new SmtpClient();
smtp.EnableSsl = useSSL;
smtp.Send(message);
}
Так что я ловлю оба успеха и провалы в моей таблице регистрации.Чего я не понимаю, так это как я могу увидеть сообщение журнала для и сбой, а затем условие успеха для того же адреса электронной почты.Это указывает на «попытку», и, хотя я не удивлен, что SmtpClient (нативная сборка .net) может повторить попытку без явного кода, запрашивающего его, я не вижу, как создается код моего фасада для регистрации обоих условий.