What caused the Socket Exception while sending email from Console application?

[亡魂溺海] 提交于 2019-12-19 14:24:39

问题


I'm trying to write a basic console app that will send an email. The problem is that I keep getting the Socket exception:

An attempt was made to access a socket in a way forbidden by its access permissions xxx.xxx.x.xxx:25

I turned off my windows firewall but it didn't change anything. I tried to run it with and without credentials specified. I also tried to use different smtp servers including smtp.mail.yahoo.com with port 25 and my credentials but with no luck. What is the problem causing this exception?

I'm running VS2008 on Windows 7. Below is my code sample and the exception I get.

static void Main(string[] args)
{
        String recipient = "recipient@email.com";
        String sender = "sender@email.com";

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

And the exception I got:

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

回答1:


I had very similar situation once and it turned out that the antivirus was just blocking that port. Your possible options are listed here: http://social.msdn.microsoft.com/Forums/br/transactsql/thread/c083c2c6-f74e-42cd-a811-4329ff7aa5f1




回答2:


Is port 25 enabled and available? For example this thread explains that is is possible for another service to have exclusive access to it.

Have you tried this code in another machine (with less security)? I don't mean that as part of a fix, but just to make sure that the code is OK by itself.




回答3:


Try to play with EnableSsl. In msdn reason of exception:

EnableSsl is set to true, but the SMTP mail server did not advertise STARTTLS in the response to the EHLO command.

Also check StatusCode of the exception.




回答4:


Either don't assign the port or don't use EnableSSL = true. Doing one of this will solve your problem.

You are trying to initiate a communication which is not allowed to be done this way.



来源:https://stackoverflow.com/questions/12692064/what-caused-the-socket-exception-while-sending-email-from-console-application

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!