Ich verwende die SmtpClient
Bibliothek, um E-Mails wie folgt zu senden:
SmtpClient client = new SmtpClient();
client.Host = "hostname";
client.Port = 465;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.EnableSsl = true;
client.Credentials = new NetworkCredential("User", "Pass);
client.Send("from@hostname", "to@hostname", "Subject", "Body");
Der Code funktioniert in meiner Testumgebung einwandfrei, aber wenn ich Produktions-SMTP-Server verwende, schlägt der Code mit einem SmtpException
"Fehler beim Senden von E-Mails" fehl . mit einem inneren IOException
"Daten können nicht von der Transportverbindung gelesen werden: net_io_connectionclosed".
Ich habe bestätigt, dass Firewalls kein Problem darstellen. Der Port öffnet sich einwandfrei zwischen dem Client und dem Server. Ich bin nicht sicher, was diesen Fehler sonst noch auslösen könnte.
Ändern Sie den Port von 465 auf 587 und es wird funktionieren.
quelle
Für alle, die über diesen Beitrag stolpern und nach einer Lösung suchen und SMTP sendgrid über Azure eingerichtet haben.
Der Benutzername ist nicht der Benutzername, den Sie beim Erstellen des sendgrid-Objekts in Azure eingerichtet haben. Um Ihren Benutzernamen zu finden;
Hoffe das hilft!
quelle
Möglicherweise müssen Sie auch die Einstellung "Weniger sichere Apps" in Ihrem Google Mail-Konto ändern. EnableSsl, verwenden Sie Port 587 und aktivieren Sie "weniger sichere Apps". Wenn Sie den Teil mit den weniger sicheren Apps googeln, gibt es Google-Hilfeseiten, die Sie direkt mit der Seite für Ihr Konto verknüpfen. Das war mein Problem, aber dank aller obigen Antworten funktioniert jetzt alles.
quelle
Ich habe alle oben genannten Antworten ausprobiert, erhalte jedoch immer noch diesen Fehler mit dem Office 365-Konto. Der Code scheint mit dem Google-Konto und smtp.gmail.com gut zu funktionieren, wenn weniger sichere Apps zugelassen werden.
Irgendwelche anderen Vorschläge, die ich versuchen könnte?
Hier ist der Code, den ich verwende
UPDATE UND WIE ICH ES GELÖST HABE:
Problem durch Ändern des SMTP-Clients in Mailkit behoben. Der System.Net.Mail Smtp-Client wird aus Sicherheitsgründen jetzt nicht mehr von Microsoft empfohlen. Sie sollten stattdessen MailKit verwenden. Die Verwendung von Mailkit gab mir klarere Fehlermeldungen, dass ich verstehen konnte, die Hauptursache des Problems zu finden (Lizenzproblem). Sie können Mailkit erhalten, indem Sie es als Nuget- Paket herunterladen .
Weitere Informationen finden Sie in der Dokumentation zum Smtp-Client: https://docs.microsoft.com/es-es/dotnet/api/system.net.mail.smtpclient?redirectedfrom=MSDN&view=netframework-4.7.2
So habe ich SmtpClient mit MailKit implementiert
quelle
Unterstützt Ihre SMTP-Bibliothek eine verschlüsselte Verbindung? Der Mailserver erwartet möglicherweise eine sichere TLS-Verbindung und schließt die Verbindung, wenn kein TLS-Handshake vorliegt
quelle
SmtpClient
Bibliothek, sie unterstützt die Verschlüsselung, der Server erfordert eine Verschlüsselung, und ich habe festgelegtclient.EnableSssl = true;
. Obwohl ich denke, dass ich das mit Wireshark noch ein bisschen weiter verfolgen werde.Wenn Sie einen SMTP-Server auf derselben Box verwenden und Ihr SMTP an eine IP-Adresse anstelle von "Beliebig zugewiesen" gebunden ist, kann dies fehlschlagen, da versucht wird, eine IP-Adresse (wie 127.0.0.1) zu verwenden, die SMTP derzeit nicht funktioniert auf.
quelle
Um das zu erhöhen, was Jocull in einem Kommentar erwähnt hat, habe ich alles getan, was in diesem Thread erwähnt wurde, und gestrichen ... weil meine in einer Schleife war, die immer wieder ausgeführt werden sollte; Nach dem ersten Durchlaufen der Schleife schlug dies manchmal fehl. Hat immer beim ersten Mal durch die Schleife gearbeitet.
Um es klar auszudrücken: Die Schleife umfasst die Erstellung von SmtpClient und anschließend das Senden mit den richtigen Daten. Der SmtpClient wurde in einem try / catch-Block erstellt, um Fehler abzufangen und sicherzustellen, dass das Objekt vor dem Ende der Schleife zerstört wurde.
In meinem Fall bestand die Lösung darin, sicherzustellen, dass SmtpClient nach jedem Mal in der Schleife entsorgt wurde (entweder über die Anweisung using () oder durch manuelle Entsorgung). Selbst wenn das SmtpClient-Objekt implizit in der Schleife zerstört wird, scheint .NET Dinge herumliegen zu lassen, um mit dem nächsten Versuch in Konflikt zu geraten.
quelle
Ändern Sie Ihre Portnummer von 465 auf 587
quelle
entfernen
schien es für mich zu lösen.
quelle
Falls alle oben genannten Lösungen für Sie nicht funktionieren, versuchen Sie, die folgende Datei auf Ihrem Server zu aktualisieren (mit "veröffentlichen" meine ich, und ein Build davor wäre hilfreich).
Nach dem Update wird dieser Fehler angezeigt. wie ich mit dieser Lösung gelöst habe.
quelle
In meinem Fall hat der Kunde vergessen, in seinen SMTP-Einstellungen eine neue IP-Adresse hinzuzufügen. Öffnen Sie IIS 6.0 auf dem Server, auf dem das SMTP eingerichtet ist, klicken Sie mit der rechten Maustaste auf den virtuellen SMTP-Server, wählen Sie Eigenschaften, Registerkarte Zugriff, klicken Sie auf Verbindungen, fügen Sie die IP-Adresse des neuen Servers hinzu. Klicken Sie dann auf Relais und fügen Sie die IP-Adresse des neuen Servers hinzu. Dies löste mein Problem.
quelle
Versuchen Sie Folgendes: Hier ist der Code, mit dem ich E-Mails an mehrere Benutzer sende.
quelle
SmtpClient
ist auch Einweg, so sollte es in einenusing
Block eingewickelt werdenVerwenden Sie für Outlook die folgende Einstellung, die mir keinen Fehler gibt
SMTP-Servername smtp-mail.outlook.com
SMTP-Port 587
quelle
Dieser Fehler ist sehr allgemein. Er kann viele Gründe haben, z. B. Der Mailserver ist falsch. Einige Hosting-Unternehmen verwenden das Format mail.domainname. Wenn Sie nur den Domainnamen verwenden, funktioniert dies nicht. Anmeldeinformationen überprüfen Hostname Benutzername Passwort bei Bedarf Bei der Hosting-Firma nachfragen.
quelle
In meinem Fall wurde die Webserver-IP auf dem Mailserver blockiert. Sie muss von Ihrem Hosting-Unternehmen entsperrt und auf die Whitelist gesetzt werden. Verwenden Sie auch Port Port 587.
quelle
Wenn Ihr Mailserver Google Mail (smtp.google.com) ist, wird dieser Fehler angezeigt, wenn Sie das Nachrichtenlimit erreichen. Mit Google Mail können bis zu 2000 Nachrichten pro 24 Stunden über SMTP gesendet werden.
quelle
Ich bin darauf gestoßen, als ich smtp.office365.com verwendet habe und Port 587 mit SSL verwendet habe. Ich konnte mich über portal.office.com bei dem Konto anmelden und bestätigen, dass das Konto über eine Lizenz verfügt. Aber als ich den Code zum Senden von E-Mails ausgelöst habe, wurde immer wieder der Fehler net_io_connectionclosed angezeigt.
Ich habe einige Zeit gebraucht, um es herauszufinden, aber der Exchange-Administrator hat den Schuldigen gefunden. Wir verwenden O365, aber der Exchange-Server befand sich in einer Hybridumgebung. Obwohl das Konto, das wir verwenden wollten, mit Azure AD synchronisiert wurde und eine gültige O365-Lizenz hatte, befand sich das Postfach aus irgendeinem Grund immer noch auf dem hybriden Exchange-Server - nicht auf Exchange online. Nachdem der Exchange-Administrator den Befehl "Move-Mailbox" verwendet hat, um das Postfach vom hybriden Exchange-Server auf O365 zu verschieben, können wir den Code zum Senden von E-Mails mit o365 verwenden.
quelle
Vorbereiten: 1. HostA ist ein virtueller SMTP-Server mit Standardport 25 2. HostB ist eine Workstation, auf der ich E-Mails mit SmtpClient sende und ein instabiles Netzwerk simuliere, das ich ungeschickt verwende
Fall 1 angegeben, wenn HostB 2008R2 ist, wenn ich eine E-Mail sende. Dann tritt dieses Problem auf.
Fall 2 angegeben, wenn HostB eine Version von 2012 oder höher ist, wenn ich eine E-Mail sende. Dann wurde die Mail verschickt.
Schlussfolgerung: Diese Grundursache hängt mit Windows Server 2008R2 zusammen.
quelle