Почему System.Net.Mail работает в одной части моего веб-приложения на c # .net, а не в другой? - PullRequest
2 голосов
/ 08 июня 2010

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

        }
    }
}

1 Ответ

1 голос
/ 08 июня 2010

Вы, вероятно, получаете исключение в своем коде до того, как ваш код достигает метода sendmail, поэтому ваш метод sendmail никогда не вызывается, если у вас есть журнал, вы должны проверить, что там происходит.

Кроме того, он, вероятно, работает на вашем login.aspx, потому что вы не получаете исключений, и ваш код завершает выполнение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...