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

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

        }
    }
}

person Marc    schedule 08.06.2010    source источник
comment
Какую ошибку вы получаете при отправке сообщения? Если сообщение отправляется без ошибок, но не получено, это может быть просто фильтрация спама на основе содержимого сообщения.   -  person Eric Petroelje    schedule 08.06.2010
comment
Пожалуйста, опубликуйте код, который отправляет письмо. Без этого очень трудно кому-либо помочь вам.   -  person Raja    schedule 08.06.2010
comment
Я понимаю, что это сложно без кода. Моя проблема заключается в том, чтобы знать, какой код включать. Ниже я добавил метод статической рассылки.   -  person Marc    schedule 08.06.2010


Ответы (1)


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

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

person ryudice    schedule 08.06.2010
comment
Я не уверен, что понимаю вашу точку зрения. Это работает, потому что это работает? - person Marc; 08.06.2010