У меня есть веб-приложение, которое работает на 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)
{
}
}
}