web-dev-qa-db-fra.com

"Une tentative d'accès à un socket de manière interdite par ses autorisations d'accès" en utilisant SMTP

J'essaie d'envoyer mail c # lorsque certaines valeurs de la base de données dépassent sa valeur seuil.

J'ai déjà autorisé les ports 25 587 et 465 dans le pare-feu Windows. Et désactivé l'option d'empêcher le courrier de masse dans l'antivirus. Le code que j'utilise est donné ci-dessous

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);

Trace de la pile

[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

Quoi d'autre me manque ici? les règles entrantes du pare-feu sont là pour ces adresses de port spécifiques.

19
SPandya

Ok, il est donc très important de réaliser les implications ici. 

Les documents indiquent que SSL sur 465 n'est PAS pris en charge par SmtpClient. 

On dirait que vous n'avez d'autre choix que d'utiliser STARTTLS, qui peut ne pas être pris en charge par votre hôte de messagerie. Vous devrez peut-être utiliser une autre bibliothèque si votre hôte requiert l'utilisation de SSL sur 465.

Cité de http://msdn.Microsoft.com/en-us/library/system.net.mail.smtpclient.enablessl(v=vs.110).aspx

La classe SmtpClient ne prend en charge que l'extension de service SMTP pour SMTP sécurisé sur Transport Layer Security, tel que défini dans la RFC 3207. Dans ce mode, la session SMTP commence sur un canal non crypté, puis une commande STARTTLS est émise par le client communication sécurisée via SSL. Voir la RFC 3207 publiée par l'IETF (Internet Engineering Task Force) pour plus d'informations.

Une autre méthode de connexion est l’établissement d’une session SSL avant l’envoi des commandes de protocole. Cette méthode de connexion est parfois appelée SMTP/SSL, SMTP sur SSL ou SMTPS et utilise par défaut le port 465. Cette autre méthode de connexion à l'aide de SSL n'est actuellement pas prise en charge.

10
SlaterCodes

Veuillez confirmer que votre pare-feu autorise le trafic sortant et que votre logiciel antivirus ne vous bloque pas. 

J'ai reçu le même problème et le coupable était un logiciel antivirus. 

19
Glenn Ferrie

Le pare-feu Windows créait cette erreur pour moi. SMTP essayait de publier sur GMAIL au port 587. L'ajout du port 587 à la règle Outbound [HTTP/SMTP/RDP sortant] a résolu le problème.

4
Chris Sharp

J'ai eu cette erreur:

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

quand le port a été utilisé par un autre programme .

4
Tom Andraszek

J'ai eu le même problème. Cela fonctionnait bien sur la machine locale mais il y avait des problèmes sur le serveur. J'ai changé le paramètre SMTP. Ça fonctionne bien pour moi.

Si vous utilisez GoDaddy Plesk Hosting, utilisez les détails SMTP suivants.

Host = relay-hosting.secureserver.net
Port = 25 
0
Sandeep Jepin