J'ai récemment été confronté à un problème d'envoi de mail dans une application .NET :
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
MailMessage message = new MailMessage();
//...
 
SmtpClient client = new SmtpClient();
client.Send(message);
Le mail est envoyé sans erreur, mais n'est jamais reçu !

D'après ce message, il se trouve que si l'application appelante et fermée juste après l'envoi du mail, la connexion SMTP se ferme aussi sans avoir forcément terminé l'envoi.
Dans les logs du serveur de mail, on peut voir que le traitement commence mais est interrompu par l'erreur Winsock Error 10054 Connexion réinitialisée de l'autre côté ! (Connection reset by peer).

Toujours d'après le message, Microsoft a confirmé le problème et a indiqué qu'il serait résolu dans une prochaine version du framework (le message date de 2009...).



En attendant, une solution de contournement super simple est d'ajouter une pause après l'envoi pour que le traitement puisse se terminer :
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
MailMessage message = new MailMessage();
//...
 
SmtpClient client = new SmtpClient();
client.Send(message);
System.Threading.Thread.Sleep(1000);
Selon la taille du message, il conviendra peut-être de mettre une pause plus ou moins longue.
En ce qui me concerne, 1 seconde suffit.