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


110

Ich möchte eine E-Mail von meiner Bewerbung senden und habe den folgenden Code zum Senden 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 führe es auf localhost aus, also was für ein Fehler mache ich, um es zu senden.

Wenn ich Button sende gibt es einen Fehler wie

Der SMTP-Server erfordert eine sichere Verbindung oder der Client wurde nicht authentifiziert. Die Serverantwort lautete: 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="sender@gmail.com" />
    <add key="smtpPass" value="mypassword" />
    <add key="adminEmail" value="sender@gmail.com" />
  </appSettings>
  <system.net>
    <mailSettings>
      <smtp from="sender@gmail.com">
        <network host="smtp.gmail.com" password="mypassword" port="587" userName="sender@gmail.com"  enableSsl="true"/>
      </smtp>
    </mailSettings>
  </system.net>

Was soll ich tun, um diesen Fehler zu beheben und E-Mails zu senden?



Ich denke, Sie müssen möglicherweise auch in diese Antwort schauen: stackoverflow.com/a/9572958/1136253
mrbengi

Ich hatte das gleiche Problem. Überprüfen Sie [diesen Beitrag] [1] [1]: stackoverflow.com/a/20186909/709340
Moslem Hady

Sie sollten in Betracht ziehen, SMTP-Konfigurationsdaten in der Konfigurationsdatei anzugeben und diese nicht in einem Code zu überschreiben - siehe SMTP-Konfigurationsdaten unter systemnetmail.com/faq/4.1.aspx
Michael Freidgeim

Antworten:


62

Ü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

Unten ist die sehr allgemeine Sache, die ich immer zuerst auf solche Probleme überprüfe

client.UseDefaultCredentials = true;

setze es auf false.

Hinweis: Die Antwort von @Joe King: Sie müssen client.UseDefaultCredentials festlegen, bevor Sie client.Credentials festlegen


2
In diesem Fall sollten Sie Ihren Code freigeben. Die
obige

7
Hinweis @Joe Kings Antwort - Sie müssen client.UseDefaultCredentials festlegen, bevor Sie client.Credentials
Aaron

1
Diese Antwort wird nicht funktionieren. Ich denke, die meisten Leute waren auf der Google Mail-Seite mit Sicherheit konfrontiert. siehe mjbs Antwort für eine richtige Lösung
Jerry Liang

2
Stellen Sie außerdem sicher, dass "Captcha" deaktiviert ist. Dies kann erforderlich sein, wenn Sie das Skript auf einem Remote-Server ausführen (nicht erforderlich, wenn es auf einem lokalen Computer ausgeführt wird): accounts.google.com/DisplayUnlockCaptcha
Jens

3
Festlegen von client.UseDefaultCredentials = false; vor client.Credentials und Setzen von client.EnableSsl = true; habe den Trick in meinem Fall gemacht.
Gestapelt

138

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 erreichen sind, hilft das Blockieren, Ihr Konto sicherer zu machen.

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

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

Daher müssen Sie in Ihrem Google-Konto die weniger sichere Anmeldung (oder den weniger sicheren App-Zugriff ) aktivieren .

Nachdem Sie sich in einem Google-Konto angemeldet haben, gehen Sie zu:

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

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

using (MailMessage mail = new MailMessage())
{
    mail.From = new MailAddress("email@gmail.com");
    mail.To.Add("somebody@domain.com");
    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@gmail.com", "password");
        smtp.EnableSsl = true;
        smtp.Send(mail);
    }
}

-------------------
Von Michael Freidgeim im Kommentarbereich unten geteilte Informationen:
Ähnliche Antwort mit Screenshots https://stackoverflow.com/a/32457468/52277


1
Dies zusammen mit der Sicherstellung, dass SSL im Code aktiviert wurde, hat Wunder gewirkt, vielen Dank
Crouch

1
Als Sie @mjb für das Teilen der Antwort. Es rettet mein Leben :)
Mayeed

3
Dies sollte die ausgewählte Antwort sein
thatOneGuy

2
Dies war mein Problem. Vielen Dank, dass Sie sich die Mühe gemacht und eine erklärendere Antwort gegeben haben.
Bojan

Hat auch für mich gearbeitet. Danke @mjb
Rajbir Jawanda

44

Stellen Sie sicher, dass Sie SmtpClient.Credentials nach dem Anruf einstellen SmtpClient.UseDefaultCredentials = false.

Die Reihenfolge ist wichtig , da Einstellung SmtpClient.UseDefaultCredentials = falsezurückgesetzt SmtpClient.Credentialsauf null.


2
Ich habe eine halbe Stunde lang nach einer Lösung für dieses Problem gesucht. Ihr Beitrag ist der einzige kleine Beitrag im Internet, in dem die Bestellung erwähnt wird. Danke Kumpel.

4
@ Joe King Du bist einfach ein großartiger Kumpel ..... habe seit 3 ​​Stunden danach gesucht :)
Jatin

1
Vielen Dank an Joe King, dass wichtige Informationen in den MS-Dokumenten fehlen. Dies war die Lösung für mein Problem beim Senden mit Benutzername und Passwort.
Aaron

1
Dies wird leicht übersehen, aber die Bestellung ist wichtig, wie ich gerade herausgefunden habe.
GatesReign

1
Ja. hat meinen Tag gerettet. Sie müssen UseDefaultCredentials = false aufrufen, bevor Sie Anmeldeinformationen festlegen.
Rendel

33

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

  1. Verwenden Sie smtp.gmail.comanstelle vonsmtp.google.com
  2. Verwenden Sie Port 587
  3. Stellen Sie client.UseDefaultCredentials = false;vor dem Anmeldeinformationen einstellen
  4. Aktivieren Sie den Zugriff für weniger sichere Apps
  5. einstellen client.EnableSsl = true;

Wenn diese Schritte nicht geholfen haben, überprüfen Sie diese Antwort .
Vielleicht finden Sie auch in diesen häufig gestellten Fragen zu System.Net.Mail etwas Nützliches .


1
Diese Antwort ist sehr nützlich ... hat mein Problem gelöst. Vielen Dank
Hari

1
Wenn es immer noch nicht funktioniert, gehen Sie auf diesen Link g.co/allowaccess und erlauben Sie den Zugriff
Portekoi

1
"Zugriff für weniger sichere Apps" hat mir den Tag gerettet.
Romil Kumar Jain

1
Dieser Teil hat es für mich getan: "Aktivieren Sie den Zugriff für weniger sichere Apps". Vielen Dank!
Tadej

11

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 dies erneut über den Code. Stellen Sie sicher, dass Ihre Webkonfigurationseinstellungen gut sind.


Beste Antwort in der Tat! Ich habe mich wieder angemeldet und es hat funktioniert! PS: Ich musste ein Captcha bei Google
bereitstellen

Ich habe diesen Fehler erhalten, da mein Google-Konto durch eine Zwei-Faktor-Authentifizierung geschützt ist. Am Ende habe ich ein spezielles Konto erstellt, von dem aus ich die E-Mail senden kann.
MvdD

8

Probieren Sie es so aus, ich habe gerade einige leichte Änderungen vorgenommen:

MailMessage msg = new MailMessage();

msg.From = new MailAddress("mymailid@gmail.com");
msg.To.Add("receipientid@gmail.com");
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("mymailid@gmail.com", "mypassword");
    client.Host = "smtp.gmail.com";
    client.Port = 587;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;

    client.Send(msg);
}

Bitte zeigen Sie auch Ihre app.config-Datei an, wenn Sie dort E-Mail-Einstellungen haben.


Ich habe es noch nicht konfiguriert. was soll ich da schreiben
Abhay Andhariya

In meiner MVC-Anwendung befindet sich keine Datei app.config.
Abhay Andhariya

Ich habe viele andere Lösungen ausprobiert, aber nur diese hat funktioniert. Danke
Adil Malik

3

Ich bin auf dasselbe Problem gestoßen, obwohl ich "UseDefaultCredentials" auf false gesetzt habe. Später stellte ich fest, dass die Hauptursache darin besteht, dass ich in meinem Konto die "Bestätigung in zwei Schritten" aktiviert habe. Nachdem ich es ausgeschaltet habe, ist das Problem weg.


4
Deaktivieren Sie die Bestätigung in zwei Schritten nicht. Es gibt einen Grund dafür. Sie können in den GMail-Einstellungen ein anwendungsspezifisches Kennwort generieren und dieses im SmtpClient verwenden. Sie sollten dies unabhängig davon tun, anstatt ein normales Passwort preiszugeben.
Daniel Dyson

3

Schalten Sie die weniger sichere App über diesen Link ein und boomen Sie ...


Dies funktionierte für mich .. Dies muss die akzeptierte Antwort sein
Noman


2

Geben Sie hier die Bildbeschreibung ein Stellen Sie sicher, dass die weniger sichere App für den Zugriff zulässig ist.

        MailMessage mail = new MailMessage();
        mail.From = new MailAddress("xx@gmail.com");
        mail.Sender = new MailAddress("xx@gmail.com");
        mail.To.Add("external@emailaddress");
        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("xx@gmail.com", "xx");
        smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
        smtp.EnableSsl = true;

        smtp.Timeout = 30000;
        try
        {

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

1
Der Link zum Umschalten der Einstellung für "Zugriff auf weniger sichere App" ist hier - google.com/settings/security/lesssecureapps Das Ändern der Einstellung hat mir nicht geholfen, den Fehler zu überwinden
mvark

1

Unten ist mein Code. Ich hatte auch den gleichen Fehler, aber das Problem war, dass ich mein Passwort falsch angegeben habe. Der folgende Code wird perfekt funktionieren. Versuchen Sie es

            MailMessage mail = new MailMessage();
            SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");              
            mail.From = new MailAddress("fromaddress@gmail.com");
            mail.To.Add("toaddress1@gmail.com");
            mail.To.Add("toaddress2@gmail.com");
            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 unter Senden von E-Mails erneut anzeigen


1

Wenn es sich um ein neues Google-Konto handelt, müssen Sie eine E-Mail (die erste) über die reguläre Benutzeroberfläche senden. Danach können Sie mit Ihrer Anwendung / Ihrem Roboter Nachrichten senden.


1

Sie sollten in Betracht ziehen, SMTP-Konfigurationsdaten in der Konfigurationsdatei anzugeben und diese nicht in einem Code zu überschreiben - siehe SMTP-Konfigurationsdaten unter http://www.systemnetmail.com/faq/4.1.aspx

<system.net>
            <mailSettings>
                <smtp deliveryMethod="Network" from="admin@example.com">
                    <network defaultCredentials="false" host="smtp.example.com" port="25" userName="admin@example.com" password="password"/>
                </smtp>
            </mailSettings>
        </system.net>



0

Bei einigen SMTP-Servern (sicheren Servern) müssen Sie sowohl den Benutzernamen als auch die E-Mail-Adresse angeben. Wenn es sich um Google Mail handelt, besteht die größte Wahrscheinlichkeit, dass Sie das Problem der weniger sicheren Anmeldung lösen müssen. 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 sich die E-Mail-Adresse und der Benutzername von anderen Implementierungen unterscheiden, die sie als gleich bezeichnen.

Das Aufrufen dieser Methode kann folgendermaßen erfolgen:

SendEmail("to-mail@gmail.com", "test", "Hi it worked!!", 
   "from-mail", "from-username", "from-password", "smtp", 587);

0

Wenn Sie nach dem Aktivieren der weniger sicheren Option und dem Ausprobieren anderer Lösungen immer noch das gleiche Problem haben, versuchen Sie, diese Überlastung zu verwenden:

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

anstatt:

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

0

Ich habe heute Morgen ein Microsoft 365 Developer-Abonnement (E5) erstellt und damit eine Test-E-Mail mit den folgenden Einstellungen gesendet

using (SmtpClient client = new SmtpClient())
{
    client.EnableSsl = true;
    client.UseDefaultCredentials = false;
    client.Credentials = new NetworkCredential(username, password);
    client.Host = "smtp.office365.com";
    client.Port = 587;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;

    client.Send(msg);
}

Am Anfang hat es nicht funktioniert, da ich diese Fehlermeldung mit der von diesem Code ausgelösten Ausnahme immer wieder erhielt. Dann habe ich mehr als 4 Stunden damit verbracht, mit den Einstellungen des Microsoft 365 Admin Centers zu spielen und Artikel zu lesen, um das Problem herauszufinden. Letztendlich habe ich mein Microsoft 365 Admin Center-Passwort geändert und es hat wie ein Zauber funktioniert. Es lohnt sich also, das Kennwort zu ändern, wenn Sie diese Nachricht erhalten, bevor Sie über eine Vorablösung nachdenken.

Beachten Sie, dass das Kennwort mit Sicherheit nicht ungültig war, da ich mich ohne Probleme bei meinem Microsoft 365-Konto angemeldet habe. Die Kennwortänderung löste jedoch das Problem.


-1

Ich hatte auch das Problem: "Der SMTP-Server erfordert eine sichere Verbindung oder der Client wurde nicht authentifiziert." Die Serverantwort lautete: 5.5.0 Authentifizierung erforderlich. Dann wurden so viele Internetmaterialien durchgesehen, aber es hat mir nicht vollständig geholfen. Wie ich es gelöst habe

Schritt 1: smtp.gmail.com ist ein Google Mail-Server. Gehen Sie also zu den Google Mail-Einstellungen Ihres Kontos -> klicken Sie auf Alle Einstellungen anzeigen -> Weiterleitung und IMAP / POP -> Pop und IMAP aktivieren, wenn nicht aktivieren -> Änderungen speichern. Schritt 2 - Klicken Sie auf Ihr Google Mail-Profilbild -> Klicken Sie auf Google-Konto verwalten -> Gehen Sie zur Registerkarte "Sicherheit" -> Überprüfen Sie den Zugriff auf weniger sichere Apps (diese Option ist verfügbar, wenn Sie sich nicht für eine Bestätigung in zwei Schritten entschieden haben) -> Standardmäßig Google setzt es als deaktiviert und aktiviert es, um Ihr echtes Google Mail-Passwort für das Senden von E-Mails zu verwenden. Hinweis: - Das Aktivieren des Google Mail-Zugriffs für weniger sichere Apps kann für Sie gefährlich sein, daher empfehle ich dies nicht

Schritt 3: - Wenn für Ihr Konto die Bestätigung in zwei Schritten aktiviert ist oder Sie ein anderes Kennwort als Ihr Google Mail Real-Kennwort mit einem app-spezifischen Kennwort verwenden möchten, versuchen Sie Folgendes: - Klicken Sie auf Ihr Google Mail-Profilbild-> Klicken Sie auf Google-Konto verwalten-> Gehen Sie zur Sicherheit Registerkarte-> Suche nach APP-PASSWORT-> Wählen Sie einen beliebigen App-Namen aus-> Wählen Sie einen beliebigen Gerätenamen-> Klicken Sie auf Generieren-> Kopieren Sie das 16-stellige Passwort und fügen Sie es in Ihre App ein, in die Sie anstelle von ein Google Mail-Passwort eingeben müssen Ihr echtes Google Mail-Passwort.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.