Ich verwende folgenden Code, um E-Mails zu senden. Der Code funktioniert auf meinem lokalen Computer ordnungsgemäß. Aber auf dem Produktionsserver bekomme ich die Fehlermeldung
var fromAddress = new MailAddress("[email protected]");
var fromPassword = "xxxxxx";
var toAddress = new MailAddress("[email protected]");
string subject = "subject";
string body = "body";
System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient
{
Host = "smtp.gmail.com",
Port = 587,
EnableSsl = true,
DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network,
UseDefaultCredentials = false,
Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
};
using (var message = new MailMessage(fromAddress, toAddress)
{
Subject = subject,
Body = body
})
smtp.Send(message);
Und auf meinem Google Mail-Konto habe ich die folgende E-Mail erhalten, nachdem ich den Code vom Produktionsserver ausgeführt habe
Hallo ,
Jemand hat kürzlich Ihr Passwort verwendet, um sich bei Google zu registrieren Konto [email protected] Diese Person verwendete eine Anwendung wie als E-Mail, Client oder mobiles Gerät.
Wir haben den Anmeldeversuch verhindert, falls dies ein Hijacker war, der versuchte, greife auf dein Konto zu. Bitte überprüfen Sie die Details des Anmeldeversuchs:
Freitag, 3. Januar 2014 13:56:08 Uhr UTC IP-Adresse: xxx.xx.xx.xxx (abcd.net.) Ort: Philadelphia PA, Philadelphia, PA, USA
Wenn Sie diesen Anmeldeversuch nicht erkennen, kann es sein, dass eine andere Person .__ ist. versuchen, auf Ihr Konto zuzugreifen. Sie sollten sich in Ihrem Konto und .__ anmelden. Setzen Sie Ihr Passwort sofort zurück.
Passwort zurücksetzen
Wenn dies bei Ihnen der Fall ist und Sie Probleme beim Zugriff auf Ihr Konto haben, Führen Sie die unter .__ aufgeführten Schritte zur Fehlerbehebung aus. http://support.google.com/mail?p=client_login
Mit freundlichen Grüßen Ihr Google-Konten-Team
Dies geschieht im Allgemeinen, wenn Sie versuchen, sich von einer anderen Zeitzone oder einem IP-Adresscomputer aus anzumelden. Ihr Produktionsserver und die von Ihnen verwendete Mail-ID befinden sich in unterschiedlichen Zeitzonen. Wählen Sie eine der einzigen Lösungen:
1) Melden Sie sich per Fernzugriff beim Produktionsserver an, und melden Sie sich einmal bei Google Mail mit Ihren Anmeldeinformationen an. Sie werden nach der Bestätigung gefragt, bestätigt und abgemeldet.
Oder 2) Melden Sie sich bei gmail auf Ihrem lokalen Computer an. Folgen Sie diesem Link und wählen Sie Überprüfen Sie diese Aktivität und ergreifen Sie geeignete Maßnahmen.
Wenn Sie versuchen, E-Mails aus dem Code zu senden und Sie den Fehler finden "Der SMTP-Server erfordert eine sichere Verbindung oder der Client wurde nicht authentifiziert. Die Antwort des Servers war: 5.5.1 Authentication Required". Der Fehler kann aufgrund des folgenden Fehlers auftreten Fälle.
case 1:, wenn das Passwort falsch ist
case 2:, wenn Sie versuchen, sich von einer App aus anzumelden
case 3:, wenn Sie versuchen, sich von einer anderen Domäne als Ihrer Zeitzone/Domäne/Ihrem Computer anzumelden (Dies ist in den meisten Szenarien der Fall, wenn E-Mails über den Code gesendet werden.)
Für jeden gibt es eine Lösung
Lösung für Fall 1: Geben Sie das richtige Passwort ein.
Lösung 1 für Fall 2: Gehen Sie zu den Sicherheitseinstellungen unter folgendem Link https://www.google.com/settings/security/lesssecureapps und aktivieren Sie weniger sichere Apps. Damit Sie sich von allen Apps aus anmelden können.
Lösung 2 für Fall 2 :( siehe https://stackoverflow.com/a/9572958/52277 ) Aktivieren Sie die Zwei-Faktor-Authentifizierung (auch als Bestätigung in zwei Schritten bezeichnet) und generieren Sie dann eine anwendungsspezifische Passwort. Verwenden Sie dieses neu generierte Kennwort, um sich über SMTP zu authentifizieren.
Lösung 1 für Fall 3: (Dies kann hilfreich sein). Sie müssen die Aktivität überprüfen. Die Überprüfung der Aktivität ist jedoch aufgrund der neuesten Sicherheitsstandards nicht hilfreich. Der Link ist nicht hilfreich. Probieren Sie also den unten stehenden Fall aus.
Lösung 2 für Fall 3: Wenn Sie Ihren Code irgendwo auf dem Produktionsserver gehostet haben und Zugriff auf den Produktionsserver haben, nehmen Sie die Remote-Desktop-Verbindung zum Produktionsserver und versuchen Sie, sich einmal über den Browser der Produktion anzumelden Server . Dies fügt excpetioon für die Anmeldung bei google hinzu und Sie können sich vom Code aus anmelden.
Was aber, wenn Sie keinen Zugriff auf den Produktionsserver haben. probiere die Lösung 3
Lösung 3 für Fall 3: Sie müssen das Anmelden aus einer anderen Zeitzone/IP für Ihr Google-Konto aktivieren.
folgen Sie dazu dem Link https://g.co/allowaccess und gewähren Sie den Zugriff, indem Sie auf die Schaltfläche Weiter klicken.
Und das ist es. Bitte schön. Jetzt können Sie sich von jedem Computer aus und mit jeder App bei Ihrem Google-Konto anmelden.
Es ist ein Sicherheitsproblem. Google Mail verhindert standardmäßig den Zugriff Ihres E-Mail-Kontos von benutzerdefinierten Anwendungen. Sie können es einrichten, um die Anmeldung aus Ihrer Anwendung zu akzeptieren.
Nach dem Einloggen in Ihre E-Mail, KLICKEN SIE HIER
Sie gelangen auf die folgende Seite
Nachdem ich heute ein paar Stunden damit verbracht hatte, jede Lösung hier auszuprobieren, konnte ich immer noch nicht über diesen Fehler hinwegkommen. Ich habe Gmail viele Male auf diese Weise verwendet, also wusste ich, dass es etwas Dummes war, aber nichts, was ich tat, beendete das Problem. Ich bin schließlich in meinem Fall über die Lösung gestolpert, also dachte ich, ich würde sie teilen.
Erstens sind die meisten der obigen Antworten ebenfalls erforderlich, aber in meinem Fall musste der Code beim Erstellen der SmtpClient-Klasse einfach geordnet werden.
Beachten Sie in diesem ersten Codefragment unten, wo sich die Zeile "Credentials = creds" befindet. Diese Implementierung generiert den Fehler, auf den in dieser Frage verwiesen wird, auch wenn Sie alles andere ordnungsgemäß eingerichtet haben.
System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient
{
Host = Emailer.Host,
Port = Emailer.Port,
Credentials = creds,
EnableSsl = Emailer.RequireSSL,
UseDefaultCredentials = false,
DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network
}
Wenn Sie jedoch den Setzaufruf Credentials nach unten verschieben, wird die E-Mail ohne Fehler gesendet. Ich habe keine Änderungen am umgebenden Code vorgenommen, dh den Benutzernamen/das Kennwort usw. Offensichtlich sind entweder EnableSSL, UseDefaultCredentials oder DeliveryMethod davon abhängig, dass zuerst die Berechtigungsnachweise festgelegt werden. Ich habe nicht getestet alle um herauszufinden, welche es war.
System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient
{
Host = Emailer.Host,
Port = Emailer.Port,
EnableSsl = Emailer.RequireSSL,
UseDefaultCredentials = false,
DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network,
Credentials = creds
}
Ich hoffe, dies hilft, jemandem in Zukunft einige Kopfschmerzen zu ersparen.
Hi, ich hatte das gleiche Problem,
was ich getan habe, um es zu lösen. Aktivieren Sie die weniger sichere App ., nachdem Sie sich mit meinem Google Mail-Konto verbunden haben. Ich habe diesen Link eingegeben: https://www.google.com/settings/security/lesssecureapps
Dann schalte ich die sichere App ein und, und die hat funktioniert . Es wurde auch oben gesagt
Folgen Sie einfach dem Schritt in der Google-E-Mail und aktivieren Sie weniger sichere Apps.
Ich habe einen zuvor funktionierenden Code, der diesen Fehler jetzt auslöst. Kein Problem mit dem Passwort. Sie müssen die Nachricht auch nicht in base64 konvertieren. Es stellt sich heraus, dass ich Folgendes tun muss:
Arbeitscode
public static void SendEmail(string emailTo, string subject, string body)
{
var client = new SmtpClient("smtp.gmail.com", 587)
{
Credentials = new NetworkCredential("[email protected]", "secretpassword"),
EnableSsl = true
};
client.Send("[email protected]", emailTo, subject, body);
}
Deaktivieren der 2-Faktor-Authentifizierung
Setzen Sie "Weniger sichere Apps zulassen" auf ON (gleiche Seite, nach unten scrollen)
Ich habe das gleiche Problem gehabt. Dies geschieht, wenn Sie die 2-Schritt-Überprüfung (MFA) einschalten. Schalten Sie einfach die 2-Schritt-Überprüfung aus und Ihr Problem sollte gelöst sein.
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 einwandfrei funktionieren. Versuchen Sie es
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 meinem Blog verweisen.
Sie müssen von hier aus die Option "Weniger sichere Apps zulassen" aktivieren https://myaccount.google.com/lesssecureapps
Was für mich funktionierte, war die Aktivierung der Option für weniger sichere Apps (ich verwende VB.NET).
Public Shared Sub enviaDB(ByRef body As String, ByRef file_location As String)
Dim mail As New MailMessage()
Dim SmtpServer As New SmtpClient("smtp.gmail.com")
mail.From = New MailAddress("[email protected]")
mail.[To].Add("[email protected]")
mail.Subject = "subject"
mail.Body = body
Dim attachment As System.Net.Mail.Attachment
attachment = New System.Net.Mail.Attachment(file_location)
mail.Attachments.Add(attachment)
SmtpServer.Port = 587
SmtpServer.Credentials = New System.Net.NetworkCredential("user", "password")
SmtpServer.EnableSsl = True
SmtpServer.Send(mail)
End Sub
Melden Sie sich also bei Ihrem Konto an und gehen Sie zu google.com/settings/security/lesssecureapps
Ich hatte das gleiche Problem für eine Anwendung, die in Microsoft Azure implementiert wurde.
SmtpException: Der SMTP-Server erfordert eine sichere Verbindung oder die Client wurde nicht authentifiziert. Die Serverantwort war: 5.5.1 Authentifizierung erforderlich.
Zunächst habe ich alle unbekannten Geräte (einige IP-Adressen, die aus Irland stammen) auf der folgenden Seite (angemeldet als Google Mail-Nutzer) genehmigt: https://security.google.com/settings/u/1/security/Wertpapierkonto
Ich habe folgende Einstellungen für den Client verwendet:
var client = new SmtpClient("smtp.gmail.com");
client.Port = 587;
client.EnableSsl = true;
client.UseDefaultCredentials = false;
client.Credentials = new NetworkCredential("[email protected]", "my_password");
Es funktionierte erst, nachdem ich die folgende Eigenschaft auf dem SMTP-Client eingestellt hatte:
client.TargetName = "STARTTLS/smtp.gmail.com";
Ich habe alle hier gefundenen Vorschläge ausprobiert, von der Aktivierung weniger sicherer Apps bis zum Testen von Port 587 ... nichts hat funktioniert. Zum Schluss habe ich nur die Zeile UseDefaultCredentials = false
auskommentiert. Alles funktionierte, wenn ich diesen Boolean nicht berührte.
Ein Kommentar von Tomasz Madeyski hat mein Problem behoben ... Er sagt, dass ein Fehler in SetDefaultCredential existiert, er sagt:
"Das Problem ist, dass im UseDefaultCredentials-Setter der folgende Code vorhanden ist: this.transport.Credentials = value? (ICredentialsByHost) CredentialCache.DefaultNetworkCredentials: (ICredentialsByHost) null; wodurch die vom Berechtigungsset-Setter festgelegten Berechtigungsnachweise außer Kraft gesetzt werden.
wenn Sie smtpClient.UseDefaultCredentials = false
nach gesetzten Berechtigungsnachweisen eingeben ... Diese Zeile setzt diese Berechtigungsnachweise auf Null ...
Möglicherweise müssen Sie ein spezifisches APP-Kennwort aus gmail erstellen Ihre App oder Ihr Skript verwenden dann dieses neue Kennwort anstelle Ihres regulären Kennworts .. __ Ihr reguläres Kennwort funktioniert weiterhin einwandfrei.
Das tat es für mich ... Ich benutzte immer noch den gleichen E-Mail-Account, musste aber ein neues app-spezifisches Passwort generieren.
https://support.google.com/accounts/answer/185833?hl=de
Grundsätzlich können Sie dies hier tun: https://security.google.com/settings/security/apppasswords
NOVEMBER 2018, habe alles obige ohne Erfolg versucht.
Unten ist die Lösung, die endlich funktioniert hat. Leider verwendet es kein SSL, aber es funktioniert !!!
var fromAddress = new MailAddress([email protected], "From Name");
var toAddress = new MailAddress("[email protected]", "To Name");
const string subject = "Subject";
const string body = "Body";
var smtp = new SmtpClient
{
Host = "aspmx.l.google.com",
Port = 25,
EnableSsl = false
};
using (var message = new MailMessage(fromAddress, toAddress)
{
Subject = subject,
Body = body
})
{
smtp.Send(message);
}
Sie sollten weniger sicheren Apps für den Zugriff auf Ihr Google-Konto zulassen.
machen:
Ich habe mir wirklich viele Ideen angesehen, die einzige Lösung war diese (funktioniert mit verschiedenen E-Mail-Providern):
try
{
ViewProgressbar("Try to connect mail-server...", progressBar1.Value = 20);
string Host = dsProvider.Rows[y]["POP_hostOut"].ToString();
int port = int.Parse(dsProvider.Rows[y]["POP_portOut"].ToString()); //587
string[] email = von1.Split('@');
string userName = (dsProvider.Rows[y]["login"].ToString() == "email[0]@email[1]")? email[0]+"@"+email[1] : email[0];
string password = layer.getUserPassword(listSender.SelectedValue.ToString());
SmtpClient client = new SmtpClient(Host, port);
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
//A idea from MSDN but it not works. You got the "The server response was: 5.5.1 Authentication Required."
//System.Net.NetworkCredential myCreds = new System.Net.NetworkCredential(userName, password, Host);
//System.Net.CredentialCache cache = new System.Net.CredentialCache();
//cache.Add(Host, port, "NTLM", myCreds);
///cache.GetCredential(Host, port, "NTLM"); //NTLM
client.Credentials = new System.Net.NetworkCredential(userName, password);
client.Host = Host;
client.Port = port;
client.EnableSsl = true;
client.Send(message);
ViewProgressbar();
}
catch (SmtpException ex)...
Wenn Sie Google Mail verwenden.
1-Anmeldung an Ihrem Konto
2- Durchsuchen dieses link
3- Weniger sichere Apps zulassen: EIN
Genießen....
Ich bin ein Google-Apps für Geschäftskunden und verbringe die letzten paar Stunden damit, mich damit zu beschäftigen, selbst nachdem ich alle korrekten Einstellungen (SMTP, Port, enableSSL usw.) vorgenommen habe. Folgendes funktionierte für mich und die Websites, die beim Versuch, eine E-Mail zu senden, den Fehler 5.5.1 ausgelöst haben:
Danach funktionierten meine E-Mail-Formulare von der Website wieder. Viel Glück!
setzen Sie keinen Haltepunkt vor dem Erwarten von smtp.SendMailAsync (mail);
:)
wenn es mit einem Haltepunkt wartet, der diesen Fehler anzeigt, wenn ich den Haltepunkt entferne, hat es funktioniert