it-swarm.com.de

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

Aus irgendeinem Grund funktioniert für mich weder die akzeptierte noch eine andere Antwort 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 ausprobiert, aber keine von ihnen funktioniert.

Ich würde nur gerne wissen, ob es für irgendjemanden funktioniert, ansonsten könnte Google etwas geändert haben (was vorher schon passiert ist).

Wenn ich den Code versuche, der SmtpDeliveryMethod.Network Verwendet, erhalte ich schnell eine SmtpException beim Senden (Nachricht). Die Nachricht ist

Der SMTP-Server erfordert eine sichere Verbindung oder der Client wurde nicht authentifiziert.

Die Serverantwort lautete:

5.5.1 Authentifizierung erforderlich. Erfahren Sie mehr unter "<- im Ernst, es endet dort.

UPDATE:

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

Ich habe einige der Ideen in diesem Beitrag und in anderen EmailSender-Projekten verwendet, um ein EmailSender-Projekt bei Codeplex zu erstellen. Es ist auf Testbarkeit ausgelegt und unterstützt meine bevorzugten SMTP-Dienste wie GoDaddy und Gmail.

234
CVertex

CVertex, überprüfen Sie unbedingt Ihren Code und veröffentlichen Sie ihn, falls sich daraus nichts ergibt. Ich habe dies gerade auf einer Test-ASP.NET-Site aktiviert, an der ich gearbeitet habe, und es funktioniert.

Eigentlich hatte ich irgendwann ein Problem mit meinem Code. Ich habe es erst entdeckt, als ich eine einfachere Version in einem Konsolenprogramm hatte und sah, dass es funktionierte (keine Änderung auf der Google Mail-Seite, da Sie sich Sorgen machten). Der folgende Code funktioniert genauso 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("[email protected]", "mypwd"),
                EnableSsl = true
            };
            client.Send("[email protected]", "[email protected]", "test", "testbody");
            Console.WriteLine("Sent");
            Console.ReadLine();
        }
    }
}

Ich habe es auch funktioniert mit einer Kombination aus web.config, http://msdn.Microsoft.com/en-us/library/w355a94k.aspx und Code (da es kein passendes EnableSsl in der Konfigurationsdatei :().

286
eglasius

DAS FOLGENDE WIRD FAST BESTIMMT DIE ANTWORT ZU IHRER FRAGE WENN ALLE ANDEREN VERSAGEN HAT:

Ich habe genau den gleichen Fehler erhalten. Es stellte sich heraus, dass Googles neuer Algorithmus zur Messung der Kennwortstärke sich geändert hat und mein aktuelles Kennwort als zu schwach eingestuft hat und mir nichts darüber gesagt hat (nicht einmal eine Meldung oder Warnung) ... Wie habe ich das herausgefunden? ? Nun, ich habe mein Passwort geändert, um zu sehen, ob es helfen würde (versuchte alles andere ohne Erfolg) und als ich mein Passwort änderte, funktionierte es!

In einem Test habe ich dann versucht, mein Passwort auf das vorherige Passwort zurückzusetzen, um festzustellen, was passieren würde. In Google Mail wurde dies jedoch nicht zugelassen. Der Grund dafür war: "Es tut uns leid, dass Sie diese Änderung nicht als Ihre Auswahl speichern können Passwort ist zu schwach "und ließ mich nicht zu meinem alten Passwort zurückkehren. Daraus ging hervor, dass ein Fehler aufgetreten ist, da entweder a) Sie Ihr Passwort alle x Monate ändern müssen oder b). Wie ich bereits sagte, änderten sich die Algorithmen für die Kennwortstärke und daher wurde das schwache Kennwort, das ich hatte, nicht akzeptiert, obwohl sie beim Versuch, sich ÜBERALL anzumelden, nichts darüber sagten! Dies (Nummer 2) ist das wahrscheinlichste Szenario, da mein schwaches Passwort etwa 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 Software außerhalb von Google Mail angemeldet sind und Sie vermutlich ein stärkeres Kennwort benötigen, wenn Sie Google Mail außerhalb der Google Mail-Umgebung verwenden möchten.

Ich hoffe das hilft!

67

Zusätzlich zu den anderen Schritten zur Fehlerbehebung möchte ich hinzufügen, dass Sie, wenn Sie die Zwei-Faktor-Authentifizierung (auch bekannt als Bestätigung in zwei Schritten ) für Ihr GMail-Konto aktiviert haben muss ein anwendungsspezifisches Kennwort generieren und dieses neu generierte Kennwort zur Authentifizierung über SMTP verwenden .

Besuchen Sie zum Erstellen eines Passworts: https://www.google.com/settings/ und wählen Sie Autorisieren von Anwendungen und Websites, um das Passwort zu generieren.

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

Link zur Google Mail-Einstellung

enter image description here

51

Ich hatte auch einige Probleme beim Versenden von E-Mails von meinem Google Mail-Konto, die auf mehrere der oben genannten Situationen zurückzuführen waren. Hier ist eine Zusammenfassung, wie ich es zum Laufen gebracht und gleichzeitig flexibel gehalten habe:

  • Richten Sie zunächst Ihr GMail-Konto ein:
    • Aktivieren Sie IMAP und geben Sie die richtige maximale Anzahl von Nachrichten an (Sie können dies hier tun)
    • Stellen Sie sicher, dass Ihr Passwort mindestens 7 Zeichen lang und sicher 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 aus senden.
  • Nehmen Sie Änderungen in web.config vor (oder app.config, das habe ich noch nicht ausprobiert, aber ich gehe davon aus, dass es genauso einfach ist, es in einer Windows-Anwendung zum Laufen zu bringen):
<configuration>
    <appSettings>
        <add key="EnableSSLOnMail" value="True"/>   
    </appSettings>

    <!-- other settings --> 

    ...

    <!-- system.net settings -->
    <system.net>
        <mailSettings>
            <smtp from="[email protected]" deliveryMethod="Network">
                <network 
                    defaultCredentials="false" 
                    Host="smtp.gmail.com" 
                    port="587" 
                    password="stR0ngPassW0rd" 
                    userName="[email protected]"
                    />
                <!-- When using .Net 4.0 (or later) add attribute: enableSsl="true" and you're all set-->
            </smtp>
        </mailSettings>
    </system.net>
</configuration>
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 noch SSLMail.SendMail Aufrufen:

z.B. Auf 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("[email protected]")
    SSLMail.SendMail(e)
End Sub

End Class

Oder irgendwo in Ihrem Code können Sie anrufen:

SSLMail.SendMail(New system.Net.Mail.MailMessage("[email protected]","[email protected]", "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.)

29
Sebas

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

//(1)
client.UseDefaultCredentials = true;
//(2)
client.Credentials = new System.Net.NetworkCredential("[email protected]", "password");

Ich hoffe das hilft!!! :)

13
Wirol
Dim SMTPClientObj As New Net.Mail.SmtpClient
SMTPClientObj.UseDefaultCredentials = False
SMTPClientObj.Credentials = New System.Net.NetworkCredential("[email protected]", "mypwd")
SMTPClientObj.Host = "smtp.gmail.com"
SMTPClientObj.Port = 587
SMTPClientObj.EnableSsl = True
SMTPClientObj.Send("[email protected]","[email protected]","test","testbody")

Wenn Sie eine Fehlermeldung wie "Der SMTP-Server erfordert eine sichere Verbindung oder der Client wurde nicht authentifiziert. Die Antwort des Servers lautete: 5.5.1 Authentifizierung erforderlich. Weitere Informationen finden Sie unter". Stellen Sie sicher, dass die Zeile SMTPClientObj.UseDefaultCredentials = False enthalten und diese Zeile sollte vor dem SMTPClientObj.Credentials.

Ich habe versucht, diese beiden Zeilen in die entgegengesetzte Richtung umzuschalten, und der Fehler 5.5.1 Authentication Required error wurde zurückgegeben.

13
Terry Chng

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 & auf "Einschalten" setzen

10
Kevin

Ich hatte das gleiche Problem, aber es stellte sich heraus, dass mein Virenschutz ausgehende "Spam" -E-Mails blockierte. Durch Deaktivieren dieser Option konnte ich über Port 587 SMTP-E-Mails über GMail senden

9
user464329

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

Das Problem, mit dem die meisten Nutzer konfrontiert sind, besteht darin, dass Google die Grenzwerte für ausgehende Nachrichten ständig ändert. Sie sollten Ihrer Lösung immer defensiven Code hinzufügen. Wenn Sie anfangen, Fehler zu sehen, verringern Sie Ihre Sendegeschwindigkeit und hören Sie einfach für eine Weile auf zu senden. Wenn Sie weiterhin versuchen, Google zu senden, verlängert sich manchmal die Verzögerungszeit, bevor Sie 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 ich dann eine Fehlermeldung erhalte, halte ich für 5 Minuten an und beginne erneut. Dies funktioniert normalerweise und ermöglicht es Ihnen, bis zu den Grenzen des Kontos zu senden (zuletzt habe ich überprüft, dass es 2.000 für erstklassige Kundenanmeldungen pro Tag waren).

9
Jason Short

Ich bin nicht sicher, welche .NET-Version dafür erforderlich ist, da eglasius erwähnt hat, 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). Diese Konfiguration hat jedoch für mich funktioniert (und erfordert keine programmgesteuerte Konfiguration):

<system.net>
  <mailSettings>
    <smtp from="[email protected]" deliveryMethod="Network">
      <network defaultCredentials="false" enableSsl="true" Host="smtp.gmail.com" port="587" password="password" userName="[email protected]"/>
    </smtp>
  </mailSettings>
</system.net>

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 zu versuchen ...

8
Wiebe Tijsma

Wenn hier nichts anderes für Sie funktioniert hat, müssen Sie möglicherweise den Zugriff auf Ihr Google Mail-Konto von Drittanbieteranwendungen aus zulassen. Das war mein Problem. Gehen Sie wie folgt vor, um den Zugriff zuzulassen:

  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 zuzulassen.
  3. Besuchen Sie diese Seite https://www.google.com/settings/security/lesssecureapps und aktivieren Sie den Zugriff für weniger sichere Apps.

Das hat bei mir funktioniert, hoffe es funktioniert bei jemand anderem!

8
Celt

Ich habe eine Firmen-VPN-Verbindung verwendet. Aus diesem Grund konnte ich keine E-Mails aus meiner Bewerbung senden. Es funktioniert, wenn ich die Verbindung zum VPN trenne.

6
Ned

@Andres Pompiglio: Ja, das stimmt, Sie müssen Ihr Passwort mindestens einmal ändern. Dieser Code funktioniert einwandfrei:

//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<BR>";
    }
    catch (Exception ex)
    {
        msg = ex.Message;
    }
    return msg;
}
//End Send Email Function

UND Sie können die Funktion folgendermaßen aufrufen:

Response.Write(SendMail(recipient Address, "[email protected]", "ccList if any", "subject", "body"))
6
maxcoder

Ich habe den gleichen Fehler erhalten und keine der oben genannten Lösungen hat geholfen.

Mein Problem war, dass ich den Code von einem Remote-Server aus ausführte, mit dem ich mich noch nie beim Google Mail-Konto angemeldet hatte.

Ich habe einen Browser auf dem Remote-Server geöffnet und mich von dort aus bei Google Mail angemeldet. Es wurde eine Sicherheitsfrage gestellt, um zu überprüfen, ob ich es war, da dies ein neuer Standort war. Nach der Sicherheitsprüfung konnte ich mich durch Code authentifizieren.

5
Vlad Tamas

Ich habe auch festgestellt, dass das Konto, mit dem ich mich angemeldet habe, aus irgendeinem Grund von Google deaktiviert wurde. Nachdem ich mein Passwort zurückgesetzt hatte (auf dasselbe wie früher), konnte ich problemlos E-Mails senden. Ich erhielt auch die Meldung 5.5.1.

5
RKL

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

5
Burak Kalkan

Ich hatte auch schon viele Lösungsansätze ausprobiert, aber einige Änderungen werden funktionieren

Host = smtp.gmail.com
port = 587
username = [email protected]
password = password
enabledssl = true

mit smtpclient funktionieren die oben genannten parameter in gmail

5
Suresh

Noch eine mögliche Lösung für Sie. Ich hatte ähnliche Probleme mit der Verbindung zu Google Mail über IMAP. Nachdem Sie alle Lösungen ausprobiert haben, auf die ich gestoßen bin, lesen Sie hier und an anderer Stelle SO (zB IMAP aktivieren, weniger sicheren Zugriff auf Ihre E-Mails mit https://accounts.google.com/b/0/displayunlockcaptcha und so weiter) habe ich tatsächlich noch einmal ein neues Google Mail-Konto eingerichtet.

In meinem ursprünglichen Test, dem ersten von mir erstellten Google Mail-Konto, hatte ich eine Verbindung zu meinem Haupt-Google Mail-Konto hergestellt. Dies führte zu einem fehlerhaften Verhalten, bei dem das falsche Konto von Google referenziert wurde. Wenn Sie beispielsweise https://accounts.google.com/b/0/displayunlockcaptcha ausführen, haben Sie mein Hauptkonto geöffnet und nicht das Konto, das ich zu diesem Zweck erstellt habe.

Als ich ein neues Konto erstellte und es nicht mit meinem Hauptkonto verband, stellte ich fest, dass es gut funktionierte, nachdem ich alle oben beschriebenen Schritte ausgeführt hatte!

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

4
sinewave440hz

Ich bin auf denselben Fehler gestoßen ("Der SMTP-Server erfordert eine sichere Verbindung oder der Client wurde nicht authentifiziert. Die Serverantwort lautete: 5.5.1 Authentifizierung erforderlich. Weitere Informationen unter") und habe festgestellt, dass ich habe das falsche Passwort verwendet. Ich habe die Anmeldedaten korrigiert und sie korrekt gesendet.

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

4
Albert Bori
  1. Überprüfen Sie zuerst Ihre Google Mail-Kontoeinstellungen und aktivieren Sie sie unter "Zugriff für weniger sichere Apps" enter image description here

Wir empfehlen Ihnen dringend, eine sichere App wie Google Mail zu verwenden, um auf Ihr Konto zuzugreifen. Alle Apps von Google erfüllen diese Sicherheitsstandards. Wenn Sie eine weniger sichere App verwenden, ist Ihr Konto möglicherweise anfällig. Erfahren Sie mehr.

  1. Einstellen

    smtp.UseDefaultCredentials = false;
    

    vor

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

Eine andere Sache, die ich gefunden habe, ist, dass Sie Ihr Passwort mindestens einmal ändern müssen. Versuchen Sie auch, ein Passwort auf sicherer Ebene zu verwenden (verwenden Sie nicht denselben Benutzer wie Passwort, 123456 usw.).

4

Ich hatte dieses Problem behoben. Anscheinend wird diese Nachricht in mehreren Fehlertypen verwendet. Mein Problem war, dass ich mein Maximum von 500 gesendeten Mails erreicht hatte.

melden Sie sich im Konto an und versuchen Sie manuell, eine E-Mail zu senden. Wenn das Limit erreicht wurde, werden Sie darüber informiert

3
Ayson Baxter

Sie können auch eine Verbindung über Port 465 herstellen. Aufgrund einiger Einschränkungen des System.Net.Mail-Namespace müssen Sie jedoch möglicherweise Ihren Code ändern. Dies liegt daran, dass der Namespace keine 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-authenticate-against-port-465 besprochen. aspx , und ich habe 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 ).

3
Bryan Allred

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

  • Melden Sie sich mit Ihrem Google Mail-Konto (oder einem anderen If-Konto) in Ihrem lokalen System an.

  • Überprüfen Sie auch, ob die App weniger sicher ist, und setzen Sie sie auf "Einschalten". Hier finden Sie den Link für GMAIL. https://www.google.com/settings/security/lesssecureapps

  • überprüfen Sie Ihren E-Mail-Code auf 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 auch für andere wie 587 überprüfen. Überprüfen Sie hier. Findet die gesamte SMTP-Kommunikation über 25 statt?

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

2
Bharat
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;
2
somesh

Ä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.

1
Jo Smo

Wenn Sie eine Bestätigung in zwei Schritten für Ihr Google Mail-Konto haben, müssen Sie ein App-Passwort generieren. https://support.google.com/accounts/answer/185833?p=app_passwords_sa&hl=de&visit_id=636903322072234863-1319515789&rd=1 Wählen Sie die Option So generieren Sie ein App-Passwort, und befolgen Sie die angegebenen Schritte. Kopieren Sie das generierte App-Passwort und fügen Sie es an einer Stelle ein, da Sie es nicht wiederherstellen können, nachdem Sie auf FERTIG geklickt haben.

0
Faith Nassiwa