L’authentification C # SMTP a échoué mais les informations d’identification sont correctes

Voici mon problème: j’ai écrit le programme suivant pour vérifier si je pouvais envoyer un courrier électronique:

class Program { static void Main(ssortingng[] args) { try { Console.WriteLine("Mail To"); MailAddress to = new MailAddress("[email protected]"); Console.WriteLine("Mail From"); MailAddress from = new MailAddress("[email protected]"); MailMessage mail = new MailMessage(from, to); Console.WriteLine("Subject"); mail.Subject = "test"; Console.WriteLine("Your Message"); mail.Body = "test"; SmtpClient smtp = new SmtpClient(); smtp.Host = "mail.domain.it"; smtp.Port = 25; smtp.Credentials = new NetworkCredential( "username", "password"); smtp.EnableSsl = false; Console.WriteLine("Sending email..."); smtp.Send(mail); }catch(Exception e) { Console.WriteLine(e.Message); Console.WriteLine(e.StackTrace); } } } 

Les identifiants sont corrects (je les ai testés avec telnet, Outlook et l’application k9mail dans Android fonctionnent correctement), le programme fonctionne si je mets les parameters smtp de gmail. Je ne peux vraiment pas comprendre la cause de cette erreur.

En utilisant Wireshark, j’ai découvert ce qui se passe: S: 220 server1.business.it Serveur SMTP prêt
C: EHLO pc14
S: 250 server1.stargatenet.it Bonjour [87.28.219.65] | 250 PIPELINING | 250 TAILLE 25000000 | 250 8BITMIME | 250 BINARYMIME | 250 CHUNKING | CONNEXION 250 AUTH CRAM-MD5 DIGEST-MD5 | 250 ok
C: AUTH login User: Nom d’utilisateurBase64
S: 334 VXNlcm5hbWU6
C: Pass: PasswordBase64
S: 334 UGFzc3dvcmQ6

Il semble que le programme n’entre pas les informations d’identification à la demande. Comment est-ce possible?

Ce lien m’a sauvé la vie: lien

Ici, le problème que j’ai rencontré est bien décrit: même si le nom d’utilisateur est transmis avec AUTH LOGIN, le serveur répond avec AUTH_LOGIN_Username_Challenge à nouveau.

Ce problème se produit uniquement à l’aide de System.Net.Mail. Le lien suggère trois solutions possibles:

1) Utiliser CDOSYS (n’envoie pas le nom d’utilisateur avec le login AUTH)
2) Utilisez System.Web.Mail (n’envoie pas le nom d’utilisateur avec le login AUTH)
3) Contactez le propriétaire du serveur SMTP et demandez-leur de réparer le serveur.

Malheureusement, je ne pouvais pas le propriétaire du serveur SMTP, j’ai donc dû utiliser System.Web.Mail. Je sais que c’est obsolète, mais malheureusement dans de tels cas, il n’y a pas d’autre choix, IMO.

C’est mon code de travail:

 System.Web.Mail.MailMessage msg = new System.Web.Mail.MailMessage(); msg.Body = message.Body; ssortingng smtpServer = "mail.business.it"; ssortingng userName = "username"; ssortingng password = "password"; int cdoBasic = 1; int cdoSendUsingPort = 2; if (userName.Length > 0) { msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserver", smtpServer); msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", 25); msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusing", cdoSendUsingPort); msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", cdoBasic); msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", userName); msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", password); } msg.To = message.Destination; msg.From = "[email protected]"; msg.Subject = message.Subject; msg.BodyFormat = MailFormat.Html;//System.Text.Encoding.UTF8; SmtpMail.SmtpServer = smtpServer; SmtpMail.Send(msg); 

Cette réponse m’a aidé à utiliser System.Web.Mail.