У меня есть веб-приложение, работающее на IIS в домене моей компании, доступ к которому осуществляется через интрасеть. У меня есть это приложение, отправляющее электронную почту на основе некоторых действий пользователя. Например, это частично приложение для планирования, поэтому, если задача выполнена, отправляется электронное письмо, уведомляющее об этом других пользователей.
Проблема в том, что в одних случаях электронная почта работает безупречно, а в других — совсем нет. У меня есть страница login.aspx, которая отправляет отчеты по электронной почте при загрузке страницы (она загружается один раз в день через планировщик задач Windows) - это всегда работает отлично. У меня есть страница обновления, которая должна отправлять электронную почту при вводе текста и нажатии кнопки «Обновить» - в большинстве случаев эта операция завершается ошибкой. Обе эти задачи используют один и тот же статический перегруженный метод, который я написал для отправки электронной почты с помощью System.Net.Mail.
Я попытался использовать gmail в качестве своего smtp-сервера (вместо нашего внутреннего) и получил те же результаты.
Я исследовал, имеет ли какое-либо значение работающая локальная служба SMTP, и, похоже, это не так. Кроме того, поскольку C# является кодом на стороне сервера, разве не должно иметь значение только то, что выполняется на сервере, а не на клиенте?
Пожалуйста, помогите мне понять, что не так! Где я должен искать? Что я могу попробовать?
Ниже мой код для отправки электронной почты.
public static void sendEmail(String[] recipients, String sender, String subject, String body, String[] attachments)
{
MailMessage message;
try
{
message = new MailMessage(sender, recipients[0]);
}
catch (Exception)
{
return;
}
foreach (String s in recipients)
{
if (!message.To.Contains(new MailAddress(s)))
message.To.Add(s);
}
message.From = new MailAddress(sender);
message.Subject = subject;
message.Body = body;
message.IsBodyHtml = true;
SmtpClient smtp = new SmtpClient("PRIVATE.PRIVATE.PRIVATE", 25);
smtp.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis;
smtp.UseDefaultCredentials = true;
if (attachments.Count() > 0)
{
foreach (String a in attachments)
{
message.Attachments.Add(new Attachment(a));
}
}
try
{
smtp.Send(message);
}
catch (Exception e)
{
}
}
}