Пытаюсь отправить почту через SMTP. Письма не приходят и не возникает ошибка исключения - PullRequest
4 голосов
/ 19 марта 2012

Проблема: создали небольшую почтовую программу, которая отлично работает на моем компьютере разработчика, но при запуске она не работает.

protected void Page_Load(object sender, EventArgs e)
{
    string smtpHost = ConfigurationManager.AppSettings["SmtpAddress"];
    MailMessage mail = new MailMessage();
    mail.From = new MailAddress(ConfigurationManager.AppSettings["FromMailAddress"]);
    mail.Sender = new MailAddress(ConfigurationManager.AppSettings["FromMailAddress"]);
    mail.To.Add(new MailAddress("zzz@xxx.yy"));
    mail.Subject = "Test mail";
    mail.Body = string.Format("Is this mail sent via {0} ?", smtpHost);

    lblMsg2.Text = string.Format("SmtpHost: {0}", smtpHost); ;

    SmtpClient client = new SmtpClient(smtpHost);
    try
    {
        client.Send(mail);
    }
    catch (Exception exception)
    {
        lblMsg3.Text = exception.Message.ToString();
        lblMsg4.Text = exception.InnerException.ToString();
    }
}

Я получаю правильный почтовый адрес и все на рабочем сервере, но в почтовом ящике электронной почты ничего не заканчивается :-(. Я не получаю никаких исключений.

Я пытался использовать telnet на том же сервере, и оттуда я могу отправлять письма.

Я попытался установить WireShark, который просматривает сетевую карту на сервере, и при использовании telnet я получаю ответ, который я подозревал, но из моей программы я ничего не получаю.

Отредактировано 2012-03-12 @ 09:46 по датскому времени

Теперь обновили код, чтобы он выглядел следующим образом

protected void Page_Load(object sender, EventArgs e) 
{ 
    string smtpHost = ConfigurationManager.AppSettings["SmtpAddress"]; 
    MailMessage mail = new MailMessage(); 
    mail.From = new MailAddress(ConfigurationManager.AppSettings["FromMailAddress"]); 
    mail.Sender = new MailAddress(ConfigurationManager.AppSettings["FromMailAddress"]); 
    mail.To.Add(new MailAddress("zzz@xxx.yy")); 
    mail.Subject = "Test mail"; 
    mail.Body = string.Format("Is this mail sent via {0} ?", smtpHost); 

    lblMsg2.Text = string.Format("SmtpHost: {0}", smtpHost); ; 

    SmtpClient client = new SmtpClient(smtpHost); 

    client.Send(mail); 
} 

И довольно интересно: даже при вставке SMTP-сервера, который точно не существует, я все равно не получаю никаких ошибок в моей производственной среде. Я получаю исключение на моем компьютере разработчика, что в основном означает, что smtp-сервер не существует (о котором я также ожидал получить сообщение).

Ответы [ 3 ]

5 голосов
/ 20 марта 2012

Дело решено: -)

И я узнал больше о IIS!

IIS был настроен на «Хранение электронной почты в каталоге раскладки» вместо «Доставлять электронную почту наSMTP-сервер ".К сожалению, я не так хорош в IIS, и я не знал, что была такая настройка ... Я сейчас!

"Двойной проверки настроек конфигурации" из @GarryM, к сожалению, мне не хватилоили мой почтовый администратор, чтобы заставить нас посмотреть на IIS.Я слишком большой программист, и мой mail-adm слишком большой сетевой парень: -)

Спасибо всем за ваши ответы.Отчасти из-за всех твоих хороших советов и идей я мог пропустить все больше и больше деталей.

1 голос
/ 19 марта 2012

Дважды проверьте конфигурацию вашего почтового сервера. Если оно не вызывает исключение, скорее всего, проблема заключается в том, что письмо было принято, но оно не передает его и не рассматривает как спам.

Некоторые хостинг-провайдеры также молча блокируют некоторые большие бесплатные почтовые хосты из-за проблем со спамом, если вы используете провайдера виртуального хостинга, их тоже стоит спросить.

Также вы пробовали запускать тот же код локально, но указывать на почтовый хост? (При условии, что вы можете получить к нему доступ извне) Таким образом, вы можете пошагово пройти код и убедиться, что исключение не выдается.

0 голосов
/ 19 марта 2012

Было бы полезно, если бы вы удалили try / catch, так как это позволит распространяться любым исключениям.
Еще одна вещь, которую стоит попробовать - client.EnableSSL, если вы используете безопасное соединение, которое требуется многим почтовым серверам.

...