2015-04-06 8 views
11

Ich erhalte eine Fehlermeldung, wenn ich versuche, eine E-Mail über meinen Webdienst zu senden. Ich habe versucht, den Zugriff auf weniger sichere Apps zu aktivieren, die Bestätigung in zwei Schritten zu deaktivieren und mich über einen Webbrowser beim Konto anzumelden. Keine der Lösungen auf SO hat für mich funktioniert. Ich bekomme immer noch:So senden Sie eine E-Mail mit C# über Gmail

Error: System.Net.Mail.SmtpException: The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.5.1 Authentication Required.

Was kann ich tun, um dieses Problem zu beheben?

namespace EmailService 
{ 
    public class Service1 : IService1 
    {  
     public string SendEmail(string inputEmail, string subject, string body) 
     { 
      string returnString = ""; 
      try 
      { 
       MailMessage email = new MailMessage(); 
       SmtpClient smtp = new SmtpClient(); 
       smtp.Host = "smtp.gmail.com"; 

       // set up the Gmail server 
       smtp.EnableSsl = true; 
       smtp.Port = 587; 
       smtp.Credentials = new System.Net.NetworkCredential("[email protected]", "mypassword"); 
       smtp.DeliveryMethod = SmtpDeliveryMethod.Network; 
       smtp.UseDefaultCredentials = false; 

       // draft the email 
       MailAddress fromAddress = new MailAddress("[email protected]"); 
       email.From = fromAddress; 
       email.To.Add(inputEmail); 
       email.Subject = body; 
       email.Body = body; 

       smtp.Send(email); 

       returnString = "Success! Please check your e-mail."; 
      } 
      catch(Exception ex) 
      { 
       returnString = "Error: " + ex.ToString(); 
      } 
      return returnString; 
     } 
    } 
} 
+0

sehen, ob das hilft: http://stackoverflow.com/questions/18503333/the-smtp-server-requires-a-secure-connection-o r-the-client-was-not-authenticated –

+1

Haben Sie versucht, den Server anpingen, wenn ja dann die von Eghbal Sohrabi erwähnte Lösung ist in Ordnung – Shubhojit

+0

@Shubhojit Ping der Google-Server? – Johnny

Antwort

29

Gerade hier gehen: Less secure apps, Melden Sie Ihre E-Mail und Passwort an, die für das Senden von E-Mail in Ihrem C# -Code verwenden, und Turn On wählen.

Auch zu diesem Link finden Sie, und klicken Sie auf Weiter Allow access to your Google account

es auch wenig ich bearbeiten:

public string sendit(string ReciverMail) 
{ 
    MailMessage msg = new MailMessage(); 

    msg.From = new MailAddress("[email protected]"); 
    msg.To.Add(ReciverMail); 
    msg.Subject = "Hello world! " + DateTime.Now.ToString(); 
    msg.Body = "hi to you ... :)"; 
    SmtpClient client = new SmtpClient(); 
    client.UseDefaultCredentials = true; 
    client.Host = "smtp.gmail.com"; 
    client.Port = 587; 
    client.EnableSsl = true; 
    client.DeliveryMethod = SmtpDeliveryMethod.Network; 
    client.Credentials = new NetworkCredential("[email protected]", "YourPassword"); 
    client.Timeout = 20000; 
    try 
    { 
     client.Send(msg); 
     return "Mail has been successfully sent!"; 
    } 
    catch (Exception ex) 
    { 
     return "Fail Has error" + ex.Message; 
    } 
    finally 
    { 
     msg.Dispose(); 
    } 
} 

Wenn der obige Code nicht funktioniert, versuchen Sie es wie die sich ändern folgender Code:

SmtpClient client = new SmtpClient(); 
    client.Host = "smtp.gmail.com"; 
    client.Port = 587; 
    client.EnableSsl = true; 
    client.DeliveryMethod = SmtpDeliveryMethod.Network; 
    client.UseDefaultCredentials = false; 
    client.Credentials = new NetworkCredential("[email protected]", "YourPassword"); 
+0

Ich habe beide Dinge schon ausprobiert und es funktioniert immer noch nicht. – Johnny

+5

Es stellt sich heraus, dass 'smtp.UseDefaultCredentials = false;' vor 'smtp.Credentials = new System.Net.NetworkCredential (" [email protected] "," mypassword ") gehen muss;' Ich habe einfach diese Zeilen getauscht, und alles funktioniert fein. – Johnny

+0

bedeutet, dass Sie 'smtp.UseDefaultCredentials = true;' zu 'smtp.UseDefaultCredentials = false;' ändern und es vor 'smtp.Credentials = new System.Net.NetworkCredential setzen (" [email protected] "," mypassword ") ; wenn ja, sag mir, dass ich meine Antwort bearbeiten soll. –