Senden von E-Mails über den Gmail-SMTP-Server mit C #

Aus irgendeinem Grund funktionieren weder die akzeptierte Antwort noch andere für mich für ” Senden von E-Mails in .NET über Google Mail “. Warum sollten sie nicht arbeiten?

UPDATE: Ich habe alle Antworten (akzeptiert und anders) in der anderen Frage versucht, aber keiner von ihnen funktioniert.

Ich möchte nur wissen, ob es für irgendjemand anderen funktioniert, ansonsten hat Google möglicherweise etwas verändert (was vorher passiert ist).

Wenn ich den Codeabschnitt SmtpDeliveryMethod.Network , der SmtpDeliveryMethod.Network verwendet, SmtpDeliveryMethod.Network ich schnell eine SmtpException auf Send (Nachricht). Die Nachricht ist

Der SMTP-Server benötigt eine sichere Verbindung oder der Client wurde nicht authentifiziert.

Die Serverantwort war:

5.5.1 Authentifizierung erforderlich Erfahren Sie mehr unter “<- ernsthaft, es endet dort.

AKTUALISIEREN:

Dies ist eine Frage, die ich vor langer Zeit gestellt habe, und die akzeptierte Antwort ist Code, den ich viele, viele Male in verschiedenen Projekten verwendet habe.

Ich habe einige der Ideen in diesem Post und anderen EmailSender-Projekten verwendet, um ein EmailSender-Projekt bei Codeplex zu erstellen . Es wurde für die Testbarkeit entwickelt und unterstützt meine bevorzugten SMTP-Dienste wie GoDaddy und Google Mail.

   

CVertex, stellen Sie sicher, dass Sie Ihren Code überprüfen und, falls dies nichts verraten sollte, posten Sie ihn. Ich habe dies nur auf einer Test-ASP.NET-Site aktiviert, an der ich gearbeitet habe, und es funktioniert.

Irgendwann hatte ich ein Problem mit meinem Code. Ich habe es nicht bemerkt, bis ich eine einfachere Version in einem Konsolenprogramm hatte und sah, dass es funktionierte (keine Änderung auf der Gmail-Seite, wie Sie sich Sorgen machten). Der folgende Code funktioniert genau wie die Beispiele, auf die Sie sich bezogen haben:

 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Mail; using System.Net; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { var client = new SmtpClient("smtp.gmail.com", 587) { Credentials = new NetworkCredential("myusername@gmail.com", "mypwd"), EnableSsl = true }; client.Send("myusername@gmail.com", "myusername@gmail.com", "test", "testbody"); Console.WriteLine("Sent"); Console.ReadLine(); } } } 

Ich habe es auch funktioniert mit einer Kombination von web.config, http://msdn.microsoft.com/en-us/library/w355a94k.aspx und Code (weil es keine übereinstimmende EnableSsl in der Konfigurationsdatei :().

FOLGENDES WERDEN FAST DIE ANTWORT AUF IHRE FRAGE WERDEN, WENN ALLES NOCH VERLASSEN HAT :

Ich habe genau den gleichen Fehler, es stellt sich heraus, dass Googles neuer Passwortstärkemessalgorithmus geändert hat, mein aktuelles Passwort als zu schwach erachtet und mir nichts darüber gesagt hat (nicht einmal eine Nachricht oder Warnung) … Wie habe ich das entdeckt? ? Nun, ich entschied mich mein Passwort zu ändern, um zu sehen, ob es helfen würde (versuchte alles andere ohne Erfolg) und als ich mein Passwort änderte, es funktionierte!

Für ein Experiment habe ich dann versucht, mein Passwort auf mein vorheriges Passwort zurückzusetzen, um zu sehen, was passieren würde. Gmail erlaubte mir das nicht und nannte den Grund: “Entschuldigung, wir können dir nicht erlauben, diese Änderung zu speichern Passwort ist zu schwach “und ließ mich nicht zu meinem alten Passwort zurückkehren. Ich habe mir gedacht, dass es falsch war, weil entweder a) du dein Passwort einmal alle x Monate ändern musst oder b). Wie ich bereits sagte, haben sich die Algorithmen für die Passwortstärke geändert und deshalb wurde das schwache Passwort, das ich hatte, nicht akzeptiert, obwohl sie nichts darüber sagten, als sie sich ANYWHERE anzumelden versuchten! Dies (Nummer 2) ist das wahrscheinlichste Szenario, da mein schwaches Passwort ungefähr 4 Monate alt war und ich es in Google Mail verwenden konnte.

Es ist ziemlich schlimm, dass sie nichts darüber gesagt haben, aber es macht Sinn. Da die meisten entführten E-Mails mit einer Software außerhalb von Google Mail eingeloggt sind, muss ein stärkeres Passwort verwendet werden, wenn Sie Google Mail außerhalb der Gmail-Umgebung verwenden möchten.

Ich hoffe das hilft!

Zusätzlich zu den oben genannten Schritten zur Fehlerbehebung möchte ich hinzufügen, dass Sie, wenn Sie die Zwei-Faktor-Authentifizierung (auch als Bestätigung in zwei Schritten bekannt ) auf Ihrem Google Mail-Konto aktiviert haben , ein anwendungsspezifisches Passwort generieren und dieses neu verwenden müssen generiertes Passwort zur Authentifizierung via SMTP .

Um eines zu erstellen, rufen Sie https://www.google.com/settings/ auf und wählen Sie Programme und Websites autorisieren , um das Passwort zu generieren.

 Turn On Access For Less Secure Apps and it will work for all no need to change password. 

Link zu Google Mail-Einstellungen

Bildbeschreibung hier eingeben

Ich hatte einige Probleme beim Senden von E-Mails von meinem Google Mail-Konto, die auf mehrere der oben genannten Situationen zurückzuführen sind. Hier ist eine Zusammenfassung, wie ich es funktionierte und gleichzeitig flexibel hielt:

  • Stellen Sie zunächst Ihr Google Mail-Konto ein:
    • Aktivieren Sie IMAP und setzen Sie die maximale Anzahl an Nachrichten fest (dies können Sie hier tun)
    • Stellen Sie sicher, dass Ihr Passwort mindestens 7 Zeichen lang und stark ist (laut Google)
    • Stellen Sie sicher, dass Sie nicht zuerst einen Captcha-Code eingeben müssen. Sie können dies tun, indem Sie eine Test-E-Mail von Ihrem Browser senden.
  • Nehmen Sie Änderungen in web.config (oder app.config, ich habe das noch nicht ausprobiert, aber ich nehme an, es ist genauso einfach, es in einer Windows-Anwendung funktionieren zu lassen):
      ...           
 Add a Class to your project: Imports System.Net.Mail Public Class SSLMail Public Shared Sub SendMail(ByVal e As System.Web.UI.WebControls.MailMessageEventArgs) GetSmtpClient.Send(e.Message) 'Since the message is sent here, set cancel=true so the original SmtpClient will not try to send the message too: e.Cancel = True End Sub Public Shared Sub SendMail(ByVal Msg As MailMessage) GetSmtpClient.Send(Msg) End Sub Public Shared Function GetSmtpClient() As SmtpClient Dim smtp As New Net.Mail.SmtpClient 'Read EnableSSL setting from web.config smtp.EnableSsl = CBool(ConfigurationManager.AppSettings("EnableSSLOnMail")) Return smtp End Function End Class 

Und jetzt, wenn Sie E-Mails senden möchten, müssen Sie nur SSLMail.SendMail :

zB in einer Seite mit einem PasswordRecovery-Steuerelement:

 Partial Class RecoverPassword Inherits System.Web.UI.Page Protected Sub RecoverPwd_SendingMail(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.MailMessageEventArgs) Handles RecoverPwd.SendingMail e.Message.Bcc.Add("webmaster@example.com") SSLMail.SendMail(e) End Sub End Class 

Oder irgendwo in Ihrem Code können Sie anrufen:

 SSLMail.SendMail(New system.Net.Mail.MailMessage("from@from.com","to@to.com", "Subject", "Body"}) 

Ich hoffe, das hilft jedem, der auf diesen Beitrag stößt! (Ich habe VB.NET verwendet, aber ich denke, es ist trivial, es in eine beliebige .NET-Sprache zu konvertieren.)

 Dim SMTPClientObj As New Net.Mail.SmtpClient SMTPClientObj.UseDefaultCredentials = False SMTPClientObj.Credentials = New System.Net.NetworkCredential("myusername@gmail.com", "mypwd") SMTPClientObj.Host = "smtp.gmail.com" SMTPClientObj.Port = 587 SMTPClientObj.EnableSsl = True SMTPClientObj.Send("myusername@gmail.com","yourusername@gmail.com","test","testbody") 

Wenn Sie einen Fehler wie “Der SMTP-Server erfordert eine sichere Verbindung oder der Client wurde nicht authentifiziert. Die Server-Antwort war: 5.5.1 Authentifizierung erforderlich. Erfahren Sie mehr unter” wie ich davor bekomme, stellen Sie sicher, die Zeile SMTPClientObj.UseDefaultCredentials = False enthalten und diese Zeile sollte vor dem SMTPClientObj.Credentials .

Ich habe versucht, diese zwei Zeilen in die entgegengesetzte Richtung zu wechseln, und der Fehler 5.5.1 Authentifizierung erforderlich zurückgegeben.

Oh … Es ist erstaunlich … Zuerst konnte ich aus irgendwelchen Gründen keine E-Mail senden. Aber nachdem ich die Reihenfolge dieser zwei Zeilen wie unten geändert habe, funktioniert es perfekt.

 //(1) client.UseDefaultCredentials = true; //(2) client.Credentials = new System.Net.NetworkCredential("username@gmail.com", "password"); 

Ich hoffe das hilft!!! 🙂

Das Problem besteht nicht in der technischen Fähigkeit, über Google Mail zu senden. Das funktioniert in den meisten Situationen. Wenn Sie eine Maschine nicht zum Senden bringen können, liegt dies normalerweise daran, dass die Maschine nicht mindestens einmal mit einem Benutzer an der Steuerung authentifiziert wurde.

Das Problem, vor dem die meisten Nutzer stehen, ist, dass Google die Outbound-Limits ständig ändert. Sie sollten Ihrer Lösung immer einen defensiven Code hinzufügen. Wenn du Fehler bemerkst, solltest du die Sendegeschwindigkeit abbrechen und einfach für eine Weile aufhören zu senden. Wenn Sie versuchen, Google zu senden, fügt Google manchmal eine zusätzliche Zeit hinzu, bevor Sie es erneut senden können.

Was ich in meinem gegenwärtigen System getan habe, ist mit einer Verzögerung von 1,5 Sekunden zwischen jeder Nachricht zu senden. Wenn dann irgendwelche Fehler auftreten, halte für 5 Minuten an und starte dann erneut. Dies funktioniert in der Regel und Sie können bis zu den Grenzen des Kontos senden (zuletzt habe ich überprüft, es war 2.000 für Premier Kunden Logins pro Tag).

Ich hatte das gleiche Problem, aber es stellte sich heraus, dass mein Virenschutz ausgehende “Spam” E-Mails blockierte. Wenn ich dies deaktivierte, konnte ich Port 587 verwenden, um SMTP-E-Mails über GMail zu senden

Ich bin mir nicht sicher, welche .NET-Version dafür erforderlich ist, weil eglasius erwähnt, dass es keine passende enableSsl Einstellung gibt (ich verwende .NET 4.0, aber ich vermute, dass es in .NET 2.0 oder höher funktioniert), aber diese Konfiguration funktioniert für mich (und erfordert keine programmatische Konfiguration):

        

Möglicherweise müssen Sie zuerst POP oder IMAP in Ihrem Google Mail-Konto aktivieren: https://mail.google.com/mail/?shva=1#settings/fwdandpop

Ich empfehle es zuerst mit einem normalen Mail-Client auszuprobieren …

Wenn nichts anderes für Sie funktioniert hat, müssen Sie möglicherweise den Zugriff auf Ihr Google Mail-Konto von Drittanbieteranwendungen aus ermöglichen. Das war mein Problem. Um den Zugriff zu ermöglichen, mache folgendes:

  1. Melden Sie sich in Ihrem Google Mail-Konto an.
  2. Besuchen Sie diese Seite https://accounts.google.com/DisplayUnlockCaptcha und klicken Sie auf die Schaltfläche, um den Zugriff zu ermöglichen.
  3. Besuchen Sie diese Seite https://www.google.com/settings/security/lesssecureapps und aktivieren Sie den Zugriff für weniger sichere Apps.

Das funktionierte für mich hoffentlich funktioniert es für jemand anderen!

Einfache Schritte, um dies zu beheben:

1) Melden Sie sich in Ihrem Google Mail-Konto an

2) Navigieren Sie zu dieser Seite https://www.google.com/settings/security/lesssecureapps & setzen Sie auf “Einschalten”

@Andres Pompiglio: Ja, das ist richtig, du musst dein Passwort mindestens einmal ändern .. dieser Code funktioniert ganz gut:

 //Satrt Send Email Function public string SendMail(string toList, string from, string ccList, string subject, string body) { MailMessage message = new MailMessage(); SmtpClient smtpClient = new SmtpClient(); string msg = string.Empty; try { MailAddress fromAddress = new MailAddress(from); message.From = fromAddress; message.To.Add(toList); if (ccList != null && ccList != string.Empty) message.CC.Add(ccList); message.Subject = subject; message.IsBodyHtml = true; message.Body = body; // We use gmail as our smtp client smtpClient.Host = "smtp.gmail.com"; smtpClient.Port = 587; smtpClient.EnableSsl = true; smtpClient.UseDefaultCredentials = true; smtpClient.Credentials = new System.Net.NetworkCredential( "Your Gmail User Name", "Your Gmail Password"); smtpClient.Send(message); msg = "Successful
"; } catch (Exception ex) { msg = ex.Message; } return msg; } //End Send Email Function

UND Sie können die function aufrufen, indem Sie Folgendes verwenden:

 Response.Write(SendMail(recipient Address, "UserName@gmail.com", "ccList if any", "subject", "body")) 

Ich habe auch festgestellt, dass das Konto, mit dem ich mich angemeldet habe, aus irgendeinem Grund von Google deaktiviert wurde. Sobald ich mein Passwort zurückgesetzt habe (auf das gleiche wie früher), konnte ich E-Mails senden. Ich bekam auch 5.5.1 Nachricht.

Ich habe auch versucht, viele Lösungen, aber einige Änderungen, die es funktioniert

 host = smtp.gmail.com port = 587 username = email@gmail.com password = password enabledssl = true 

mit smtpclient oben Parameter sind Arbeit in Google Mail

Ich habe eine Unternehmens-VPN-Verbindung verwendet. Es war der Grund, warum ich keine E-Mails von meiner Bewerbung senden konnte. Es funktioniert, wenn ich von VPN trennen.

Ich stieß auf denselben Fehler ( “Der SMTP-Server erfordert eine sichere Verbindung oder der Client wurde nicht authentifiziert. Die Serverantwort war: 5.5.1 Authentifizierung erforderlich. Erfahren Sie mehr unter” ) und stellte fest, dass ich das falsche Passwort verwendete. Ich habe die Anmeldedaten korrigiert und sie korrekt gesendet.

Ich weiß, das ist spät, aber vielleicht hilft das jemand anderem.

Eine andere Sache, die ich gefunden habe, ist, dass Sie Ihr Passwort mindestens einmal ändern müssen. Und versuchen Sie, ein sicheres Passwort zu verwenden (benutzen Sie nicht denselben Benutzer wie Passwort 123456, etc.)

Ich bekam den gleichen Fehler und keine der oben genannten Lösungen half.

Mein Problem war, dass ich den Code von einem Remote-Server ausführte, der nie zum Anmelden beim Google Mail-Konto verwendet wurde.

Ich öffnete einen Browser auf dem Remote-Server und loggte mich von dort in Google Mail ein. Es stellte eine Sicherheitsfrage, um zu bestätigen, dass ich es war, da dies ein neuer Ort war. Nach der Sicherheitsüberprüfung konnte ich mich über Code authentifizieren.

Noch eine mögliche Lösung für Sie. Ich hatte ähnliche Probleme bei der Verbindung mit Google Mail über IMAP. Nachdem Sie alle Lösungen, auf die ich stieß, gelesen haben, die Sie hier und an anderen Stellen auf SO lesen (z. B. IMAP aktivieren, ermöglichen Sie einen weniger sicheren Zugriff auf Ihre E-Mails mithilfe von https://accounts.google.com/b/0/displayunlockcaptcha und usw.), habe ich ein neues Google Mail-Konto eingerichtet.

In meinem ursprünglichen Test, dem ersten von mir erstellten Google Mail-Konto, hatte ich mich mit meinem Haupt-Google Mail-Konto verbunden. Dies führte zu unberechenbarem Verhalten, bei dem auf das falsche Konto von Google verwiesen wurde. Durch das Ausführen von https://accounts.google.com/b/0/displayunlockcaptcha wurde beispielsweise mein Hauptkonto geöffnet und nicht das Konto, das ich für diesen Zweck erstellt habe.

Als ich ein neues Konto erstellt habe und es nicht mit meinem Hauptkonto verbunden habe, nachdem ich alle entsprechenden Schritte wie oben beschrieben durchgeführt habe, habe ich festgestellt, dass es gut funktioniert hat!

Ich habe das noch nicht bestätigt (dh reproduziert), aber es hat es anscheinend für mich getan … hoffe es hilft.

Aktivieren Sie weniger sichere Apps für Ihr Konto: https://www.google.com/settings/security/lesssecureapps

  1. Überprüfen Sie zuerst Ihre Google Mail-Kontoeinstellungen und aktivieren Sie die Option “Zugriff für weniger sichere Apps”. Bildbeschreibung hier eingeben

Wir empfehlen dringend, dass Sie eine sichere App wie Gmail verwenden, um auf Ihr Konto zuzugreifen. Alle Apps von Google erfüllen diese Sicherheitsstandards. Durch die Verwendung einer weniger sicheren App kann Ihr Konto jedoch angreifbar werden. Mehr erfahren.

  1. einstellen

     smtp.UseDefaultCredentials = false; 

    Vor

     smtp.Credentials = new NetworkCredential(fromAddress, fromPassword); 

Sie können auch über Port 465 eine Verbindung herstellen, aber aufgrund einiger Einschränkungen des Namespaces System.Net.Mail müssen Sie möglicherweise Ihren Code ändern. Dies liegt daran, dass der Namespace nicht die Möglichkeit bietet, implizite SSL-Verbindungen herzustellen. Dies wird unter http://blogs.msdn.com/b/webdav_101/archive/2008/06/02/system-net-mail-with-ssl-to-authentica-against-port-465.aspx und I diskutiert haben ein Beispiel für die Verwendung des CDO (Collaborative Data Object) in einer anderen Diskussion angegeben ( GMail SMTP über C # .Net-Fehler an allen Ports ).

Ich hatte dieses Problem getriggers. Aparently wird diese Nachricht in mehreren Fehlertypen verwendet. Mein Problem war, dass ich mein Maximum von 500 verschickten Mails erreicht hatte.

Melden Sie sich beim Konto an und versuchen Sie manuell, eine E-Mail zu senden. Wenn das Limit erreicht ist, wird es Sie informieren

Für diesen Fehler gibt es einen oder mehrere Gründe.

  • Melden Sie sich mit Ihrem Gmail (oder einem anderen if) in Ihrem lokalen System an.

  • Suche auch nach Less Secure App und setze es auf “Einschalten”, hier ist der Link für GMAIL. https://www.google.com/settings/security/lesssecureapps

  • Suchen Sie in Ihrem E-Mail-Code nach EnableSsl und setzen Sie ihn auf “True”.

     smtp.EnableSsl = true; 
  • Überprüfen Sie auch, welchen Port Sie gerade verwenden. 25 ist Global, aber Sie können es für andere wie 587 überprüfen. Erfolgt die gesamte SMTP-Kommunikation über 25?

  • WENN SIE AUF REMOTE SIND : Überprüfen Sie die Antwort von Vlad Tamas oben.

  smtp.Host = "smtp.gmail.com"; //host name smtp.Port = 587; //port number smtp.EnableSsl = true; //whether your smtp server requires SSL smtp.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network; smtp.Credentials = new NetworkCredential(fromAddress, fromPassword); smtp.Timeout = 20000; 

Ändern Sie Ihr Google Mail-Passwort und versuchen Sie es erneut. Danach sollte es funktionieren.

Ich weiß nicht warum, aber jedes Mal, wenn Sie Ihr Hosting ändern, müssen Sie Ihr Passwort ändern.