отправка почты работает на сервере, но не на моей локальной машине - PullRequest
0 голосов
/ 06 августа 2009

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

        MailMessage msg = new MailMessage();
        msg.From = new MailAddress(fromEmailAddress_);
        msg.To.Add(new MailAddress(toEmailAddress_));

        msg.Subject = subject_;
        msg.Body = body_;
        msg.IsBodyHtml = true;
        msg.Priority = MailPriority.High;

        NetworkCredential basicAuthenticationInfo = new System.Net.NetworkCredential("xxx@xxxx.org", "password");
        try
        {
            SmtpClient c = new SmtpClient("mail.xxx.org");
            c.UseDefaultCredentials = false;
            c.Credentials = basicAuthenticationInfo;
            c.Send(msg);
        }
        catch (Exception ex)
        {
            throw ex;
            Console.Write(ex.Message.ToString());
        }

но когда я тестирую локально на моей машине в visual studio, я получаю сообщение об ошибке:

[SocketException (0x274d): Невозможно установить соединение, поскольку целевая машина активно отказала ему 66.226.21.251:25] System.Net.Sockets.Socket.DoConnect (EndPoint endPointSnapshot, SocketAddress socketAddress) +239 System.Net.Sockets.Socket.InternalConnect (EndPoint remoteEP) +35 System.

[WebException: Невозможно подключиться к удаленному серверу ] System.Net.ServicePoint.GetConnection (PooledStream PooledStream, владелец объекта, логический асинхронный, IP-адрес и адрес, Socket и abortSocket, Socket & abortSocket6, время ожидания Int32) +5420699 System.Net.PooledStream.Activate (Object owningObject, логический асинхронный, тайм-аут Int32, GeneralAsyncDelegate asyncCallback) +202 System.Net.PooledStream.Activate (Объект owningObject, GeneralAsyncDelegate asyncCallback) +21 System.Net.ConnectionPool.GetConnection (Объект owningObject, GeneralAsyncDelegate asyncCallback, Int32 creationTimeout) +332 System.Net.Mail.SmtpConnection.GetConnection (Строковый хост, порт Int32) +160 System.Net.Mail.SmtpTransport.GetConnection (Строковый хост, порт Int32) + 159

любые предположения, почему это не сработает

Ответы [ 6 ]

3 голосов
/ 06 августа 2009

Первое, что я хотел бы сделать, чтобы проверить это, - посмотреть, действительно ли целевой компьютер, как говорится в сообщении об ошибке, фактически отказывается от соединений. Отсюда я могу подключиться к порту 25 на этом IP-адресе, поэтому возможно, что ваше сообщение об ошибке вводит в заблуждение. Это все возможные причины сбоя подключения:

  • в вашем коде есть проблема
  • В используемой вами библиотеке * есть какая-то проблема
  • у вас есть локальный брандмауэр, предотвращающий исходящую почту от странных программ
  • Ваш провайдер не разрешает исходящие SMTP-соединения, кроме как к своим собственным серверам
  • какая-то промежуточная сеть блокирует вещи
  • Интернет-провайдер почтового сервера блокирует SMTP-соединения из вашей сети
  • почтовый сервер действительно отклоняет вас, возможно, из-за того, что вы находитесь в черном списке

Для получения более подробной информации загрузите и установите Wireshark . Это как отладчик для сетей. Начните перехват между вашей системой и целевой сетью, а затем запустите ваш код. Интерпретация захваченных пакетов требует некоторого опыта, поэтому, если вы застряли, не стесняйтесь размещать здесь больше данных.

1 голос
/ 06 августа 2009

Я думаю, что вы не используете порт no в вашем коде. Используйте эти строки, тогда почта должна быть отправлена ​​и на локальную.

    smtp.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis;
    smtp.Timeout = 60000;
    smtp.Port = 25;

Это работает в моей системе. Я надеюсь, что это будет работать и в вашей локальной системе.

1 голос
/ 06 августа 2009

Ограничения на ретрансляцию, скорее всего, не позволяют отправлять почту за пределы разрешенного набора IP-адресов. Если SMTP-сервер настроен на веб-сервере / сервере приложений, он, вероятно, настроен на разрешение отправки почты только через 127.0.0.1.

Вы можете настроить локальный SMTP-сервер через диспетчер IIS. Если вы идете по этому пути, убедитесь, что порт 25 открыт на вашем локальном компьютере. Часто антивирусное программное обеспечение блокирует / контролирует этот порт, и он портит доставку почты.

0 голосов
/ 06 августа 2009

Посмотрите, сходит ли ваш антивирус с ума, я уже сталкивался с этой проблемой несколько раз, когда люди запускали mcafee.

Надеюсь, это поможет.

0 голосов
/ 06 августа 2009

Вы запросили почтовый сервер XP. Попробуйте hMailServer

0 голосов
/ 06 августа 2009

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

Измените его на использование локального почтового сервера при локальном тестировании.

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