System.Net.Sockets.SocketException на сервере 2008R2

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

В настоящее время я могу запустить эту программу на своем локальном компьютере и отключить электронные письма (используя SMTP gmail). Однако, когда я пытаюсь запустить его на сервере через командную строку, выдается следующее исключение:

Unhandled Exception: System.Net.Mail.SmtpException: Failure sending mail. --->
System.Net.WebException: Unable to connect to the remote server --->
System.Net.Sockets.SocketException: A connection attempt failed
because the connected party did not properly respond after a period of time,
or established connection failed because connected host has failed to respond
xxx.xxx.xxx.xxx:587

Код, связанный с отправкой электронного письма, довольно прост:

static void sendEmail(MailAddressCollection mailCollection, string emailSender,
                      string emailDisplayName, string emailPassword,
                      string subject, string body) {

    MailAddress fromAddress = new MailAddress(emailSender, emailDisplayName);

    SmtpClient smtpClient = new SmtpClient {
        Host = "smtp.gmail.com",
        Port = 587,
        EnableSsl = true,
        DeliveryMethod = SmtpDeliveryMethod.Network,
        UseDefaultCredentials = false,
        Credentials = new NetworkCredential(fromAddress.Address, emailPassword)
    };

    MailMessage message = new MailMessage {
        From = fromAddress,
        Subject = subject,
        Body = body
    };

    foreach (MailAddress mailAddress in mailCollection) {
        message.To.Add(mailAddress);
    }

    smtpClient.Send(message);

}

Рассматриваемый сервер представляет собой коробку 2008R2, и на нем не включен брандмауэр Windows. Кроме того, порт 25 определенно открыт, так как этот сервер может отправлять электронные письма других типов (в частности, созданные почтовым маршрутизатором Dynamics CRM).

Что может быть причиной этой ошибки?


person nairware    schedule 22.08.2013    source источник
comment
порт 25 определенно открыт, но скрипт использует smtp.gmail.com на порту 587. Итак, открыт ли порт 587?   -  person Steven V    schedule 23.08.2013
comment
Я не знаю, как проверить, но я попробовал netstat -a и не увидел порт 587 в списке. Хотя я видел порт 25.   -  person nairware    schedule 23.08.2013
comment
На сервере попробуйте использовать telnet. telnet smtp.gmail.com 587 и посмотрите, сможете ли вы подключиться.   -  person Steven V    schedule 23.08.2013
comment
Я сделал тест telnet, и он тоже не удался: подключение к smtp.gmail.com... не удалось открыть подключение к хосту, порт 587: подключение не удалось.   -  person nairware    schedule 23.08.2013
comment
Тогда я предполагаю, что исходящий порт 587 заблокирован каким-то брандмауэром. Вы находитесь за корпоративным брандмауэром? Вы упомянули, что Dynamic CRM может отправлять электронные письма, почему бы вам просто не использовать те же настройки, что и Dynamic CRM, для отправки электронной почты?   -  person Steven V    schedule 23.08.2013
comment
Мне нужно воспроизвести эту же программу/инструмент мониторинга в другой среде, в которой нет такого же почтового маршрутизатора CRM. Поэтому я пытался использовать в своем коде что-то общее, например gmail. Что касается брандмауэра, этот сервер размещен у универсального провайдера облачного хостинга, поэтому я не знаю, как получить подробную информацию о каком-либо брандмауэре, который они нам навязывают. Хотя брандмауэр Windows отключен.   -  person nairware    schedule 23.08.2013


Ответы (1)


Проблема была связана с тем, что Gmail блокировал IP-адрес сервера, пытающегося отправить электронную почту.

При попытке отправить электронное письмо с использованием учетной записи Gmail сначала попробуйте войти в Gmail вручную на этом компьютере с этим конкретным IP-адресом, используя браузер. В конечном итоге мне пришлось сделать это и пройти процесс аутентификации того, что попытки отправки электронной почты с моего сервера (генерируемые программно) были законными. Если вы не выполните этот процесс, как это сделал я, Gmail может предположить, что ваш сервер не является законным отправителем электронной почты, и может продолжать считать недействительным весь трафик с вашего IP-адреса — до тех пор, пока вы официально не подтвердите этот IP-адрес, как описано выше.

person nairware    schedule 14.02.2014