2016-02-02 1 views
0

Voici mon problème: je l'ai écrit whe programme suivant pour tester si je peux envoyer des e-mail:C# l'authentification SMTP a échoué, mais les informations d'identification sont corrects

class Program 
{ 
    static void Main(string[] 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 informations d'identification sont corrects (je les ai testés à l'aide telnet, les perspectives et la application k9mail dans Android fonctionne correctement), le programme fonctionne si je mets le réglage smtp 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 | 250 AUTH LOGIN CRAM-MD5 DIGEST-MD5 | 250 Ok
C: AUTH Connexion utilisateur: UsernameBase64
S: 334 VXNlcm5hbWU6
C: Pass: PasswordBase64
S: 334 UGFzc3dvcmQ6

Il semble que le programme ne pénètre pas dans les pouvoirs lorsqu'on lui a demandé. Comment est-ce possible?

+0

@janina Je n'utilise pas gmail. J'utilise un autre hôte. – silviagreen

+0

Le port 25 est-il bloqué par votre pare-feu? et pourquoi EnableSsl est-il faux? –

+0

pourriez-vous utiliser smtp .UseDefaultCredentials = false; Vous avez également activer Enable SSL. Assurez-vous que SSL n'est pas activé par le domaine –

Répondre

1

Ce lien sauvé ma vie: link

ici le problème que j'ai vécu est bien décrit: même si le nom d'utilisateur est passé avec le AUTH LOGIN le serveur répond avec le AUTH_LOGIN_Username_Challenge nouveau.

Ce problème se produit uniquement avec System.Net.Mail. Le lien suggère tre solutions possibles:

1) Utilisation CDOSYS (Ne pas envoyer le nom d'utilisateur avec le AUTH Connexion)
2) Utilisation System.Web.Mail (Ne pas envoyer le nom d'utilisateur avec le AUTH Connexion)
3) Contactez le propriétaire du serveur SMTP et demandez-lui de réparer le serveur.

Malheureusement, je ne pouvais pas le propriétaire du serveur SMTP, donc j'ai dû utiliser System.Web.Mail. Je sais que c'est obsolète mais malheureusement dans des cas comme celui-ci, il n'y a pas d'autre choix OMI.

C'est mon code de travail:

System.Web.Mail.MailMessage msg = new System.Web.Mail.MailMessage(); 
     msg.Body = message.Body; 

     string smtpServer = "mail.business.it"; 
     string userName = "username"; 
     string 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 answer m'a aidé à utiliser System.Web.Mail.