Подтвердить что ты не робот

"Была предпринята попытка получить доступ к сокету, запрещенным его разрешениями доступа" при использовании SMTP

Я пытаюсь отправить SMTP письмо, когда определенные значения в базе данных пересекают пороговое значение.

Я уже разрешил порты 25 587 и 465 в брандмауэре Windows и отключил возможность предотвращения массовой почты в антивирусе. Код, который я использую, приведен ниже

using System.Net;
using System.Net.Mail;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;

 MailMessage mailMsg = new MailMessage();
        mailMsg.To.Add("[email protected]");
        // From
        MailAddress mailAddress = new MailAddress("[email protected]");
        mailMsg.From = mailAddress;


        // Subject and Body
        mailMsg.Subject = "MCAS Alert";
        mailMsg.Body = "Parameter out of range";


        SmtpClient smtpClient = new SmtpClient("smtp.servername.com", 25);
        smtpClient.UseDefaultCredentials = false;
        smtpClient.Timeout = 30000;
        System.Net.NetworkCredential credentials =
           new System.Net.NetworkCredential("username", "passwrod");
        smtpClient.Credentials = credentials;
        smtpClient.EnableSsl = true;
        //ServicePointManager.ServerCertificateValidationCallback = delegate(object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };
        smtpClient.Send(mailMsg);

Трассировки стека

[SocketException (0x271d): An attempt was made to access a socket in a way forbidden by its access permissions xx.xx.xx.xx:25]
   System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress) +208
   System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Exception& exception) +464

[WebException: Unable to connect to the remote server]
   System.Net.ServicePoint.GetConnection(PooledStream PooledStream, Object owner, Boolean async, IPAddress& address, Socket& abortSocket, Socket& abortSocket6) +6486360
   System.Net.PooledStream.Activate(Object owningObject, Boolean async, GeneralAsyncDelegate asyncCallback) +307
   System.Net.PooledStream.Activate(Object owningObject, GeneralAsyncDelegate asyncCallback) +19
   System.Net.ConnectionPool.GetConnection(Object owningObject, GeneralAsyncDelegate asyncCallback, Int32 creationTimeout) +324
   System.Net.Mail.SmtpConnection.GetConnection(ServicePoint servicePoint) +141
   System.Net.Mail.SmtpTransport.GetConnection(ServicePoint servicePoint) +170
   System.Net.Mail.SmtpClient.GetConnection() +44
   System.Net.Mail.SmtpClient.Send(MailMessage message) +1554

[SmtpException: Failure sending mail.]
   System.Net.Mail.SmtpClient.Send(MailMessage message) +1906
   Admin_Alert.SMTPAuth() in c:\Users\spandya\Documents\Visual Studio 2012\WebSites\WebSite3\Admin\Alert.aspx.cs:61
   Admin_Alert.Page_Load(Object sender, EventArgs e) in c:\Users\spandya\Documents\Visual Studio 2012\WebSites\WebSite3\Admin\Alert.aspx.cs:22
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +51
   System.Web.UI.Control.OnLoad(EventArgs e) +92
   System.Web.UI.Control.LoadRecursive() +54
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +772

Что еще мне здесь не хватает? Правила входящего брандмауэра существуют для этих конкретных адресов портов.

4b9b3361

Ответ 1

Хорошо, так важно понять последствия здесь.

Документы говорят, что SSL более 465 не поддерживается в SmtpClient.

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

Цитата из http://msdn.microsoft.com/en-us/library/system.net.mail.smtpclient.enablessl(v=vs.110).aspx

Класс SmtpClient поддерживает только расширение SMTP-сервиса для защищенного SMTP-протокола поверх уровня безопасности транспортного уровня, как определено в RFC 3207. В этом режиме сеанс SMTP начинается по незашифрованному каналу, тогда команда STARTTLS выдается клиентом на сервер для переключения на безопасную связь с использованием SSL. См. RFC 3207, опубликованную Целевой группой Internet Engineering Task Force (IETF) для получения дополнительной информации.

Альтернативный метод подключения - это то, где сеанс SSL устанавливается перед тем, как отправлять команды протокола. Этот метод соединения иногда называется SMTP/SSL, SMTP через SSL или SMTPS и по умолчанию использует порт 465. Этот альтернативный метод подключения с использованием SSL в настоящее время не поддерживается.

Ответ 2

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

Я получил ту же проблему, и виновником было антивирусное программное обеспечение.

Ответ 3

Я получил эту ошибку:

System.Net.Sockets.SocketException: An attempt was made to access a socket in a way forbidden by its access permissions

когда порт использовался другой программой.

Ответ 4

Брандмауэр Windows создавал эту ошибку для меня. SMTP пытался отправить GMAIL на порт 587. Добавление порта 587 в правило исходящего трафика [Outbound HTTP/SMTP/RDP] разрешило проблему.

Ответ 5

У меня была такая же проблема. Он работал нормально на локальной машине, но у него были проблемы на сервере. Я изменил настройку SMTP. Он отлично работает для меня.

Если вы используете GoDaddy Plesk Hosting, используйте следующие данные SMTP.

Host = relay-hosting.secureserver.net
Port = 25