it-swarm.com.de

Der SMTP-Server erfordert eine sichere Verbindung oder der Client wurde nicht authentifiziert. Die Serverantwort war: 5.5.1 Authentifizierung erforderlich?

Ich möchte eine E-Mail von meiner Bewerbung aus senden und habe folgenden Code zum Versenden von E-Mails geschrieben

    MailMessage msg = new MailMessage();

    msg.From = new MailAddress("mymailid");
    msg.To.Add("receipientid");
    msg.Subject = "test";
    msg.Body = "Test Content";
    msg.Priority = MailPriority.High;

    SmtpClient client = new SmtpClient();

    client.Credentials = new NetworkCredential("mymailid", "mypassword", "smtp.gmail.com");
    client.Host = "smtp.gmail.com";
    client.Port = 587;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;
    client.EnableSsl = true;
    client.UseDefaultCredentials = true;

    client.Send(msg);

Ich lasse es auf localhost laufen, also was für einen Fehler ich tue, um es zu senden.

Wenn ich den Button schicke, gibt es eine Fehlermeldung

Der SMTP-Server erfordert eine sichere Verbindung oder der Client war nicht authentifiziert Die Serverantwort war: 5.5.1 Authentifizierung Erforderlich.

Code in der Datei "Web.config"

 <appSettings>
    <add key="webpages:Version" value="2.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="PreserveLoginUrl" value="true" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />   
    <add key="smtpServer" value="smtp.gmail.com" />
    <add key="EnableSsl" value = "true"/>
    <add key="smtpPort" value="587" />
    <add key="smtpUser" value="[email protected]" />
    <add key="smtpPass" value="mypassword" />
    <add key="adminEmail" value="[email protected]" />
  </appSettings>
  <system.net>
    <mailSettings>
      <smtp from="[email protected]">
        <network Host="smtp.gmail.com" password="mypassword" port="587" userName="[email protected]"  enableSsl="true"/>
      </smtp>
    </mailSettings>
  </system.net>

was muss ich tun, um diesen Fehler zu beheben und E-Mails zu senden?

68
Abhay Andhariya

Überprüfen Sie zunächst die Sicherheitsprobleme von Google Mail. Möglicherweise haben Sie die doppelte Authentifizierung in Google Mail aktiviert. Überprüfen Sie auch Ihren Google Mail-Posteingang, wenn Sie Sicherheitswarnungen erhalten. In solchen Fällen überprüfen Sie die andere Antwort von @mjb wie unten

Im Folgenden wird die generelle Sache beschrieben, die ich immer zuerst auf solche Probleme prüfe

client.UseDefaultCredentials = true;

setze es auf false.

Hinweis @Joe Kings answer - Sie müssen client.UseDefaultCredentials einstellen, bevor Sie client.Credentials festlegen

36
Ronak Patel

Ich habe das gleiche Problem.

Ich habe diese Lösung gefunden:

Google blockiert möglicherweise Anmeldeversuche von einigen Apps oder Geräten, die keine modernen Sicherheitsstandards verwenden. Da diese Apps und Geräte leichter zu knacken sind, hilft das Blockieren, Ihr Konto sicherer zu machen.

Einige Beispiele für Apps, die nicht die neuesten Sicherheitsstandards unterstützen, sind:

  • Die Mail-App auf Ihrem iPhone oder iPad mit iOS 6 oder niedriger
  • Die Mail-App auf Ihrem Windows-Telefon vor Version 8.1
  • Einige Desktop-Mail-Clients wie Microsoft Outlook und Mozilla Thunderbird

Daher müssen Sie aktivieren Weniger sichere Anmeldung in Ihrem Google-Konto.

Gehen Sie nach dem Anmelden bei Google-Konto zu:

https://www.google.com/settings/security/lesssecureapps

In C # können Sie den folgenden Code verwenden:

using (MailMessage mail = new MailMessage())
{
    mail.From = new MailAddress("[email protected]");
    mail.To.Add("[email protected]");
    mail.Subject = "Hello World";
    mail.Body = "<h1>Hello</h1>";
    mail.IsBodyHtml = true;
    mail.Attachments.Add(new Attachment("C:\\file.Zip"));

    using (SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587))
    {
        smtp.Credentials = new NetworkCredential("[email protected]", "password");
        smtp.EnableSsl = true;
        smtp.Send(mail);
    }
}

-------------------
Information, die Michael Freidgeim im Kommentarbereich geteilt hat:
Ähnliche Antwort mit Screenshots https://stackoverflow.com/a/32457468/52277

86
mjb

Stellen Sie sicher, dass Sie SmtpClient.Credentials after aufruf SmtpClient.UseDefaultCredentials = false einstellen. 

Die Reihenfolge ist wichtig, da mit SmtpClient.UseDefaultCredentials = falseSmtpClient.Credentials auf null zurückgesetzt wird.

31
Joe King

Ich habe stundenlang verschiedene Dinge gesucht und ausprobiert. Zusammenfassend musste ich folgende Punkte berücksichtigen:

  1. Verwenden Sie smtp.gmail.com anstelle von smtp.google.com
  2. Verwenden Sie Port 587
  3. Legen Sie client.UseDefaultCredentials = false; fest, bevor Sie die Berechtigungsnachweise festlegen
  4. Aktivieren Sie den Zugriff für weniger sichere Apps
  5. client.EnableSsl = true; einstellen

Wenn diese Schritte nicht geholfen haben, überprüfen Sie diese Antwort .
Vielleicht finden Sie auf dieser System.Net.Mail FAQ auch etwas Nützliches.

16
Stacked

Versuchen Sie, sich in Ihrem Google Mail-Konto anzumelden. Es wird gesperrt, wenn Sie E-Mails mit Google Mail SMTP senden. Ich weiß nicht, wie viele E-Mails Sie senden können, bevor sie gesperrt werden. Wenn Sie sich jedoch einmal anmelden, funktioniert der Code erneut mit dem Code . Stellen Sie sicher, dass Ihre Webconfig-Einstellungen korrekt sind.

8
Shuchita Bora

Versuchen Sie es auf diese Weise, ich habe nur ein paar leichte Änderungen vorgenommen:

MailMessage msg = new MailMessage();

msg.From = new MailAddress("[email protected]");
msg.To.Add("[email protected]");
msg.Subject = "test";
msg.Body = "Test Content";
//msg.Priority = MailPriority.High;


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

    client.Send(msg);
}

Zeigen Sie bitte auch Ihre app.config-Datei, wenn Sie E-Mail-Einstellungen dort haben.

7
meda

Ich habe das gleiche Problem festgestellt, obwohl ich "UseDefaultCredentials" auf "false" gesetzt habe. Später stellte ich fest, dass die Hauptursache darin liegt, dass ich in meinem Konto die "Bestätigung in zwei Schritten" aktiviert habe. Nachdem ich es ausgeschaltet habe, ist das Problem weg.

3
Soros Liu

enter image description hereStellen Sie sicher, dass der Zugriff auf eine weniger sichere App zulässig ist.

        MailMessage mail = new MailMessage();
        mail.From = new MailAddress("[email protected]");
        mail.Sender = new MailAddress("[email protected]");
        mail.To.Add("[email protected]");
        mail.IsBodyHtml = true;
        mail.Subject = "Email Sent";
        mail.Body = "Body content from";

        SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587);
        smtp.UseDefaultCredentials = false;

        smtp.Credentials = new System.Net.NetworkCredential("[email protected]", "xx");
        smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
        smtp.EnableSsl = true;

        smtp.Timeout = 30000;
        try
        {

            smtp.Send(mail);
        }
        catch (SmtpException e)
        {
            textBox1.Text= e.Message;
        }
2

Wenn es sich um ein neues Google-Konto handelt, müssen Sie eine E-Mail (die erste) über die normale Benutzeroberfläche senden. Danach können Sie Ihre Anwendung/Ihren Roboter zum Senden von Nachrichten verwenden.

1
user1913909

Unten ist mein Code. Ich hatte auch den gleichen Fehler, aber das Problem bestand darin, dass ich mein Passwort falsch angegeben hatte

            MailMessage mail = new MailMessage();
            SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");              
            mail.From = new MailAddress("[email protected]");
            mail.To.Add("[email protected]");
            mail.To.Add("[email protected]");
            mail.Subject = "Password Recovery ";
            mail.Body += " <html>";
            mail.Body += "<body>";
            mail.Body += "<table>";

            mail.Body += "<tr>";
            mail.Body += "<td>User Name : </td><td> HAi </td>";
            mail.Body += "</tr>";

            mail.Body += "<tr>";
            mail.Body += "<td>Password : </td><td>aaaaaaaaaa</td>";
            mail.Body += "</tr>";

            mail.Body += "</table>";
            mail.Body += "</body>";
            mail.Body += "</html>";

            mail.IsBodyHtml = true;
            SmtpServer.Port = 587;
            SmtpServer.Credentials = new System.Net.NetworkCredential("sendfrommailaddress.com", "password");
            SmtpServer.EnableSsl = true;

            SmtpServer.Send(mail);

Sie können es in Senden von E-Mails

1
Ganesh Pillai N

Aktivieren Sie eine weniger sichere App von diesem link und boom ...

1
Behzad Qureshi

Sie sollten die SMTP-Konfigurationsdaten in der Konfigurationsdatei angeben und nicht in einem Code überschreiben - siehe SMTP-Konfigurationsdaten unter http://www.systemnetmail.com/faq/4.1.aspx

<system.net>
            <mailSettings>
                <smtp deliveryMethod="Network" from="[email protected]">
                    <network defaultCredentials="false" Host="smtp.example.com" port="25" userName="[email protected]" password="password"/>
                </smtp>
            </mailSettings>
        </system.net>
1

bei einigen sicheren (sicheren) SMTP-Servern müssen Sie sowohl den Benutzernamen als auch die E-Mail-Adresse angeben. Wenn es sich bei Google Mail um die geringste Gefahr handelt, müssen Sie sich mit dem Problem "Weniger sichere Anmeldung" befassen. Andernfalls können Sie Folgendes versuchen:

public static void SendEmail(string address, string subject, 
    string message, string email, string username, string password, 
    string smtp, int port)
{
    var loginInfo = new NetworkCredential(username, password);
    var msg = new MailMessage();
    var smtpClient = new SmtpClient(smtp, port);

    msg.From = new MailAddress(email);
    msg.To.Add(new MailAddress(address));
    msg.Subject = subject;
    msg.Body = message;
    msg.IsBodyHtml = true;

    smtpClient.EnableSsl = true;
    smtpClient.UseDefaultCredentials = false;
    smtpClient.Credentials = loginInfo;
    smtpClient.Send(msg);
}

beachten Sie, dass die E-Mail-Adresse und der Benutzername anders sind als bei einigen Implementierungen, die sie als gleich bezeichnen. 

das Aufrufen dieser Methode kann wie folgt durchgeführt werden:

SendEmail("[email protected]", "test", "Hi it worked!!", 
   "from-mail", "from-username", "from-password", "smtp", 587);
0
Yakir Manor

versuchen Sie, einen weniger sicheren App-Zugriff zuzulassen.

Hier können Sie nach dem Anmelden mit Google Mail eine weniger sichere App aktivieren.

https://myaccount.google.com/lesssecureapps

Vielen Dank.

0
RaviTeja V

Nachdem Sie die sichere Option less auf gesetzt und andere Lösungen versucht haben, versuchen Sie, diese Überladung zu verwenden, wenn Sie immer noch das gleiche Problem haben:

client.Credentials = new NetworkCredential("mymailid", "mypassword");

anstatt:

client.Credentials = new NetworkCredential("mymailid", "mypassword", "smtp.gmail.com");
0
DeveloperX