Qu'est-ce qui a provoqué l'exception Socket lors de l'envoi d'e-mails à partir de l'application Console?
Je suis en train d'écrire de base d'une application console qui va envoyer un e-mail. Le problème est que je reçois le Socket exception:
Une tentative a été faite pour accéder à un support d'une manière interdite par ses autorisations d'accès xxx.xxx.x.xxx:25
J'ai désactivé mon pare-feu windows mais ça n'a rien changé. J'ai essayé avec et sans les informations d'identification spécifiées. J'ai aussi essayé d'utiliser différents serveurs smtp, y compris smtp.mail.yahoo.com avec le port 25 et mes qualifications, mais avec pas de chance. Quel est le problème à l'origine de cette exception?
Je suis sous VS2008 sur Windows 7. Ci-dessous mon code d'échantillon et l'exception que je reçois.
static void Main(string[] args)
{
String recipient = "[email protected]";
String sender = "[email protected]";
MailMessage message = new MailMessage();
message.From = new MailAddress(sender);
message.To.Add(new MailAddress(recipient));
message.Subject = "Subject";
message.Body = "Body";
SmtpClient smtp = new SmtpClient
{
Host = "smtp.server",
Port = 25,
EnableSsl = true,
DeliveryMethod = SmtpDeliveryMethod.Network,
//UseDefaultCredentials = false,
//Credentials = new NetworkCredential("validemail", "validpassword"),
Timeout = 3000
};
try
{
smtp.Send(message);
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
Et l'exception que j'ai eu:
System.Net.Mail.SmtpException: Failure sending mail. --->
System.Net.WebException: Unable to connect to the remote server --->
System.Net.Sockets.SocketException: An attempt was made to access a socket in a way forbidden by its access permissions xxx.xxx.x.xxx:25
at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state,
IAsyncResult asyncResult, Int32 timeout, Exception& exception)
--- End of inner exception stack trace ---
at System.Net.ServicePoint.GetConnection(PooledStream PooledStream, Object owner, Boolean async, IPAddress& address, Socket& abortSocket, Socket& abortSocket
6, Int32 timeout)
at System.Net.PooledStream.Activate(Object owningObject, Boolean async, Int32 timeout, GeneralAsyncDelegate asyncCallback)
at System.Net.PooledStream.Activate(Object owningObject, GeneralAsyncDelegate asyncCallback)
at System.Net.ConnectionPool.GetConnection(Object owningObject, GeneralAsyncDelegate asyncCallback, Int32 creationTimeout)
at System.Net.Mail.SmtpConnection.GetConnection(String host, Int32 port)
at System.Net.Mail.SmtpClient.Send(MailMessage message)
--- End of inner exception stack trace ---
at System.Net.Mail.SmtpClient.Send(MailMessage message)
at ...Program.Main(String[] args) in ...\Program.cs:line xxx
source d'informationauteur anetafr
Vous devez vous connecter pour publier un commentaire.
J'ai eu la situation est très semblable une fois et il s'est avéré que l'antivirus a été simplement bloquer ce port. Votre options possibles sont listés ici:
http://social.msdn.microsoft.com/Forums/br/transactsql/thread/c083c2c6-f74e-42cd-a811-4329ff7aa5f1
Le port 25 est activé et disponible? Par exemple ce fil explique qu'il est possible qu'un autre service ont un accès exclusif à elle.
Avez-vous essayé ce code dans une autre machine (avec moins de sécurité)? Je ne veux pas dire que, dans le cadre d'un correctif, mais juste pour s'assurer que le code est OK par lui-même.
Essayer de jouer avec EnableSsl. Dans msdn raison de l'exception:
Également vérifier StatusCode de l'exception.
Soit de ne pas attribuer le port ou n'utilisez pas de EnableSSL = true. Procédant de l'une des cela va résoudre votre problème.
Vous essayez d'initier une communication qui n'est pas autorisé à être fait de cette façon.