Question

I have an asp.net mvc app running on a local iis website that is failing to send mail using SmtpClient from System.Net.Mail. I am trying to send a mail to my hotmail address and I get a socket exception. Any idea what the problem might be?

using(var message = new MailMessage())
            {
                message.From = new MailAddress(AdminEmail);
                message.To.Add(new MailAddress(to));
                message.Subject = subject;
                message.Body = body;
                message.IsBodyHtml = false;

                var mailClient = new SmtpClient();
                mailClient.Send(message);
            }

Here is the exception:

{System.Net.Sockets.SocketException: No connection could be made because the target machine actively refused it 127.0.0.1:25
   at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
   at System.Net.Sockets.Socket.InternalConnect(EndPoint remoteEP)
   at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exception& exception)}

I think the default app pool does not have access to intepub\wwwroot. Here is the error that I get when trying to test the connection:

The server is configured to use pass-through authentication with a built-in account to access the specified physical path. However, IIS Manager cannot verify whether the built-in account has access. Make sure that the application pool identity has Read access to the physical path. If this server is joined to a domain, and the application pool identity is NetworkService or LocalSystem, verify that \$ has Read access to the physical path. Then test these settings again.

Was it helpful?

Solution

Based on your answers to my comments above Joe, you don't have SMTP enabled on your local machine. Vista does not come with SMTP.

As such, you'll either have to install a 3rd party SMTP app that will run on Vista, or use another app to send via, in this case, your Hotmail account may allow you to send outgoing via it. I don't use Hotmail so don't know if it will or not but it should be something like smtp.hotmail.com and your credentials. My primary account is a gmail account, so I can use it via smtp.gmail.com and of course, my credentials.

OTHER TIPS

For development on your local machine, you can also use a drop folder:

http://www.codersbarn.com/post/2008/11/30/ASPNET-Contact-Form.aspx

Rather than trying to setup SMTP locally, why don't you just configure the SMTP connection to send directly via hotmail, just add the configuration elements to the web.config to enable everything.

Edit

I think this article that I wrote a while back might help you out.

Try explicitly setting the host of the SmtpClient.

Ex:
SmtpClient mailClient = new SmtpClient();

mailClient.Host = "127.0.0.1";

mailClient.Send(message);

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top