Vor kurzem bin ich auf ein Problem in einer unserer älteren Anwendungen gestoßen. Plötzlich hat die Anwendung aufgehört, E-Mails zur Registrierung / zum Zurücksetzen des Passworts an ihre Benutzer zu senden. Nach einigem Debuggen habe ich festgestellt, dass die Ursache ein seltsames Verhalten der Mailkit SmtpClient-Klasse ist. Problem tritt in folgendem Code auf:
public async Task Execute(EmailMessage email)
{
var mimeMessage = CreateMimeMessageFromEmailMessage(email);
using var smtpClient = new SmtpClient();
await smtpClient.ConnectAsync(Options.SmtpServer, Options.Port, MailKit.Security.SecureSocketOptions.None);
await smtpClient.AuthenticateAsync(Options.Username, Options.Password);
await smtpClient.SendAsync(mimeMessage);
await smtpClient.DisconnectAsync(true);
}
Ein Fehler tritt jedes Mal in der ConnectAsync()-Methode auf, aber es wird keine Ausnahme ausgelöst, einfach für einige Zeit in dieser Methode eingefroren (etwa eine Minute), dann wird nur Task abgebrochen, ohne dass etwas Mailkit-spezifisch ist.
Zuerst dachte ich, dass Adresse zu Server, Port oder Sicherheitsoptionen falsch sein könnten, aber wir verwenden die gleichen Einstellungen (und den gleichen Code!) in einigen unserer anderen Anwendungen und sie scheinen gut zu funktionieren. Es sollte auch nicht an etwas in meiner PC- / Netzwerkkonfiguration liegen, da andere Entwickler bei der Arbeit an diesem Programm ebenfalls auf denselben Fehler stoßen. Ich habe auch versucht, Optionen für verschiedene E-Mails zu verwenden, aber der Fehler bleibt bestehen.
Irgendeine Idee, wie man eine Ursache für diesen Fehler findet, wie man das Problem debuggt, wenn keine Ausnahme ausgelöst wird usw.?
Ihren Kommentaren zufolge schlägt die folgende Zeile fehl, wenn der verwendete Port 465 ist:
await smtpClient.ConnectAsync(Options.SmtpServer, Options.Port, MailKit.Security.SecureSocketOptions.None);
Das ist dein Problem. Sie versuchen , Port 465 zu verwenden , während auch mit SecureSocketOptions.None
.
Sie müssen SecureSocketOptions.SslOnConnect
mit Port 465 verwenden.
Port 465 ist der SSL-Port, aber Sie weisen MailKit an, eine Verbindung herzustellen und ihn so zu behandeln, als ob es sich mit einem Nur-Text-Port verbinden würde. Das wird offensichtlich nicht funktionieren.
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen