it-swarm.com.de

sMTP-Ausnahme "Fehler beim Senden von E-Mails"

Ich habe eine Konsolenanwendung zum Senden von E-Mails erstellt

    public static void sendEmail(string email, string body)
    {
        if (String.IsNullOrEmpty(email))
            return;
        try
        {
            MailMessage mail = new MailMessage();
            mail.To.Add(email);
            mail.From = new MailAddress("[email protected]");
            mail.Subject = "sub";

            mail.Body = body;

            mail.IsBodyHtml = true;
            SmtpClient smtp = new SmtpClient();
            smtp.Host = "smtp.gmail.com"; //Or Your SMTP Server Address
            smtp.Credentials = new System.Net.NetworkCredential("[email protected]", "[email protected]"); // ***use valid credentials***
            smtp.Port = 587;

            //Or your Smtp Email ID and Password
            smtp.EnableSsl = true;
            smtp.Send(mail);
        }
        catch (Exception ex)
        {

        }
    }

Ich verwende die korrekten Anmeldeinformationen meines Google Mail-Kontos.

Gibt es irgendwelche Einstellungen die ich für GMail Account vornehmen muss?

4
user5264652

Es ist wahrscheinlich, dass Sie diesen Fehler tatsächlich erhalten. Er wird nur auf irgendeine Weise unterdrückt, wenn Sie sich in einer Konsolen-App befinden.

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

Ändern Sie diesen Code und fügen Sie eine zusätzliche Zeile hinzu. Es ist wichtig, dass es vor den Anmeldeinformationen geht.

smtp.Host = "smtp.gmail.com"; //Or Your SMTP Server Address
// ** HERE! **
smtp.UseDefaultCredentials = false;
// ***********
smtp.Credentials = new System.Net.NetworkCredential("[email protected]", "[email protected]"); // ***use valid credentials***
smtp.Port = 587;

Hier müssen Sie auch weniger sichere Apps aktivieren.

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

Wenn Sie eine zweistufige Authentifizierung für Ihr Konto haben, müssen Sie ein anwendungsspezifisches Kennwort festlegen. Verwenden Sie dieses Kennwort dann in Ihrem Code anstelle Ihres Hauptkontokennworts.

Ich habe gerade getestet und verifiziert, dass dies auf meinem zweistufigen Konto funktioniert. Zum Teufel, hier ist meine gesamte Methode, die direkt aus LINQPad kopiert wurde, falls es hilft (mit entfernten Details natürlich).

var fromAddress = new MailAddress("[email protected]", "My Name");
var toAddress = new MailAddress("[email protected]", "Mr Test");
const string fromPassword = "tbhagpfpcxwhkczd";
const string subject = "test";
const string body = "HEY, LISTEN!";

var smtp = new SmtpClient
{
    Host = "smtp.gmail.com",
    Port = 587,
    EnableSsl = true,
    DeliveryMethod = SmtpDeliveryMethod.Network,
    UseDefaultCredentials = false,
    Credentials = new NetworkCredential(fromAddress.Address, fromPassword),
    Timeout = 20000
};

using (var message = new MailMessage(fromAddress, toAddress)
{
    Subject = subject,
    Body = body
})
{
    smtp.Send(message);
}

Bearbeiten:

Anhänge verwenden:

using (var message = new MailMessage(fromAddress, toAddress)
{
    Subject = subject,
    Body = body
})
{
    Attachment attachment = new Attachment(filePath);
    message.Attachments.Add(attachment);

    smtp.Send(message);
}
7
Equalsk

In meinem erfahrenen C # SMTP-Client müssen im Code bestimmte Schritte ausgeführt werden (siehe Codeausschnitt unten).

smtpClient.Host = "smtp.gmail.com";
smtpClient.Port = 587;
smtpClient.EnableSsl = true;
smtpClient.UseDefaultCredentials = false;
smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
smtpClient.Credentials = new NetworkCredential("[email protected]", "secretPassword");
smtpClient.Send(mail);
0
Benjsoft