without - c# smtpclient send exceptions




Der SMTP-Server benötigt eine sichere Verbindung oder der Client wurde nicht authentifiziert. Die Serverantwort lautete: 5.5.1 Authentifizierung erforderlich? (10)

Ich möchte eine E-Mail von meiner Bewerbung 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 betreibe es auf localhost, also welchen Fehler ich mache, um es zu senden.

Wenn ich Knopf sende, gibt es einen Fehler wie

Der SMTP-Server benötigt 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="[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 soll ich tun, um diesen Fehler zu beheben und Mail zu senden?


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

Unten ist die sehr allgemeine Sache, die ich immer zuerst für solche Ausgaben prüfe

client.UseDefaultCredentials = true;

setze es auf falsch.

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


Bei einigen SMTP-Servern (sichere) müssen Sie sowohl den Nutzernamen als auch die E-Mail-Adresse angeben. Wenn Ihr Google Mail-Konto dann am wahrscheinlichsten das Problem "Weniger sichere Anmeldung" anspricht, 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 sich auf sie beziehen.

Diese Methode kann folgendermaßen aufgerufen werden:

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

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 es einfacher ist, diese Apps und Geräte zu öffnen, hilft das Blockieren dieser Apps, 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 die weniger sichere Anmeldung in Ihrem Google-Konto aktivieren.

Nach der Anmeldung im Google-Konto gehen Sie 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);
    }
}

-------------------
Info von Michael Freigimeim im unteren Kommentarbereich:
Ähnliche Antwort mit Screenshots https://.com/a/32457468/52277


Ich habe stundenlang verschiedene Dinge gesucht und ausprobiert. Um es zusammenzufassen, musste ich folgende Punkte berücksichtigen:

  1. Verwenden Sie smtp.gmail.com anstelle von smtp.google.com
  2. Verwenden Sie Anschluss 587
  3. Setzen Sie client.UseDefaultCredentials = false; vor dem Festlegen der Anmeldeinformationen
  4. Aktivieren Sie den https://www.google.com/settings/security/lesssecureapps
  5. Setzen Sie client.EnableSsl = true;

Wenn diese Schritte nicht hilfreich waren, überprüfen Sie diese answer .
Vielleicht finden Sie auch in dieser System.Net.Mail-FAQ etwas Nützliches.



Sie sollten in Erwägung ziehen, SMTP-Konfigurationsdaten in der Konfigurationsdatei anzugeben und sie nicht in einem Code zu überschreiben - siehe SMTP-Konfigurationsdaten unter 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>

Stellen Sie sicher, dass die App "Access secrets apply" erlaubt 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;
        }

Unten ist mein Code. Ich hatte auch den gleichen Fehler, aber das Problem war, dass ich mein Passwort falsch gab. Der unten stehende Code wird perfekt funktionieren

            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 finden


Versuchen Sie, sich in Ihrem Google Mail-Konto anzumelden. Es wird gesperrt, wenn Sie E-Mails mit gmail SMTP versenden. Ich kenne nicht die Grenze der E-Mails, die Sie senden können, bevor es gesperrt wird, aber wenn Sie einmal anmelden, funktioniert es wieder von Code. Stellen Sie sicher, dass Ihre Webconfig-Einstellung gut ist.


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 verwenden, um Nachrichten zu senden.





smtp