web-dev-qa-db-fra.com

SMTPException: impossible de lire les données de la connexion de transport: net_io_connectionclosed

Je sais que cette question ressemble à une copie de douzaines d’autres questions alors que ce n’est pas le cas.

Chaque fois que j'essaye d'envoyer un email sur ma machine locale via mon application web, une exception SMTPException est levée et les exceptions sont les suivantes:

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

Alors que le code en production fonctionne parfaitement, le même code, les mêmes connexions, les mêmes identifiants, j'utilise IP au lieu d'alias, j'ai essayé de désactiver le pare-feu sur ma machine locale et rien ne m'a aidé à résoudre ce problème. .

Alors que ma machine locale est habituée à fonctionner auparavant, quelqu'un peut-il simplement donner un indice sur le problème que pourrait soulever ce problème?

15
Hilmi

Si vous utilisez une connexion Internet résidentielle, votre fournisseur de services Internet bloque souvent les envois d’emails sortants en bloquant toutes les connexions sortantes au port 25. C’est assez courant ici aux États-Unis. Essayez de vous connecter à un serveur de messagerie local via TCP/IP ou à un de votre propre réseau interne.

23
Robert McKee

Ce fil en contient.

Par exemple: il semblerait que attribuer une adresse IP statique pourrait résoudre le problème.

Ce que cette erreur signifie, c'est que System.net.mail n'a pas pu trouver le fichier serveur smtp.

La réponse varie selon que vous avez une adresse IP fixe ou un IP dynamique mais, en gros, vous devez attribuer une adresse IP valide à votre smtp serveur.

Avec une adresse IP fixe, cela est relativement simple. Avec des adresses IP dynamiques cela prend un peu de peaufinage.

Ouvrez le gestionnaire IIS et vérifiez les propriétés du serveur smtp.

Dans les propriétés du serveur virtuel SMTP par défaut, dans l'onglet "Accès", Dans les boîtes de dialogue Contrôle de connexion et Relais, assurez-vous que votre fichier local IP est attribué. (Dans mon cas, c'est 10.0.0.2 ...)

Vous devrez peut-être également modifier votre fichier hosts, en pointant 127.0.0.1 en votre nom de machine. (\ WINDOWS\system32\drivers\etc\hosts)

Ensuite, dans votre code, attribuez le nom de votre machine au client smtp:

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

Alternativement, un autre gars dans le même fil de discussion semble avoir trouvé une solution de contournement pour la connexion SMTP mal fermée.

Définissez SmtpClient.ServicePoint.MaxIdleTime = 1 en fonction d'un .__ pris en charge. solution de contournement: http://connect.Microsoft.com/VisualStudio/feedback/Workaround.aspx?FeedbackID=146711 ce qui fait que tout smtp fonctionne correctement.

Voici un exemple complet:

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();
6
shamp00

System.Net.NetworkCredential (utilisateur, mot de passe); ///Faux 
System.Net.NetworkCredential (email, mot de passe); ///droite

parce que certains serveur de messagerie est shability 

0
dongfangshi