15
votes

I know that this question looks like duplicate of dozens other questions while its not.

When ever i try to send an email on my local machine through my web application an SMTPException is thrown and the exceptions is :

//on this line : SmtpServer.Send(mail);
Unable to read data from the transport connection: net_io_connectionclosed.

While the code on production is working perfectly, the same code, the same connections, the same credentials, i'm using IP instead of alias, i tried to turn off the firewall on my local machine, and nothing helped me to fix this issue.

While on my local machine is used to work previously, can anyone give just a hint what could be the problem that raising this issue?

5

5 Answers

24
votes

If you are on a residential internet connection, quite often your ISP will block outgoing email sends by blocking all outbound connections to port 25. This is quite common here in the US. Try connecting to a local email server over TCP/IP, or to one on your own internal network.

7
votes

This thread contains some.

For instance: it looks like assigning a static IP might solve the problem.

What this error means is that System.net.mail was unable to find the smtp server.

The answer will vary depending on whether you have a fixed IP or a dynamic IP but, basically, you need to assign a valid IP to your smtp server.

With fixed IP's this is relatively straightforward. With dynamic IP's it takes a bit of tweaking.

Open the IIS Manager and check the properties for the smtp server.

In the Default SMTP Virtual Server's properties, in the "Access" tab, in the Connection Control and Relay dialogs, make sure that your local IP is assigned. ( In my case, it's 10.0.0.2... )

You may also need to modify your hosts file, to point 127.0.0.1 to your machine name. ( \WINDOWS\system32\drivers\etc\hosts )

Then, in your code, assign your machine name to the smtp client :

Dim client As New SmtpClient("yourmachinename") client.Send(mail)

Alternatively another guy in the same thread seems to have found a workaround for the SMTP connection not being correctly closed.

Set SmtpClient.ServicePoint.MaxIdleTime = 1 according to a supported work-around: http://connect.microsoft.com/VisualStudio/feedback/Workaround.aspx?FeedbackID=146711 which makes all smtp work properly.

Here's a complete sample:

MailMessage msgMail = new MailMessage();
msgMail.To.Add(new MailAddress("[email protected]"));
msgMail.Subject = "Message from web";
msgMail.IsBodyHtml = true;
msgMail.Body = "Test message";
SmtpClient Client = new SmtpClient();  /* uses settings form web.config */
Client.ServicePoint.MaxIdleTime = 1; /* without this the connection is idle too long and not terminated, times out at the server and gives sequencing errors */
Client.Send(msgMail);
msgMail.Dispose();
0
votes

System.Net.NetworkCredential(user, password); ///Wrong
System.Net.NetworkCredential(email, password); ///right

because some email server is shability

0
votes

In my case, I had to leave out the Domain property from Network Credentials when setting username and password

-3
votes

The Gmail account you are using has limit for number of emails being sent out per day/month and if you exceed that limit, it will reject any further outgoing emails.