Mailkit.Net hängt an smtpClient.ConnectAsync(), wirft keine Ausnahme bis zum Task-Timeout

Karel Křesťan

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

jstedfast

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

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

Reflexions API wirft keine solche Methode Ausnahme während Java Migration 9

Servlet.service () zum Servlet [dispatcher] in Zusammenhang mit dem Pfad [/ ***] wirft Ausnahme

Kamel, Trost jndi Konfiguration mit Feder jndi Vorlage wirft keine Ausnahme, wenn Trost nicht erreichbar ist

Es kann keine Verbindung zum Eureka-Server hergestellt werden. Ausnahme: java.net.ConnectException: Verbindung abgelehnt: Verbindung herstellen

Kamel fängt keine Ausnahme

Warum wirft Mockito doThrow in diesem Fall keine Ausnahme? Keine Wechselwirkungen mit Mock

UncaughtExceptionHandler fängt keine Ausnahme ab

leiningen neue wirft ausnahme

@ try / @ catch fängt keine Ausnahme ab

Try / Catch fängt keine Ausnahme ab

Versuchen Sie bis keine Ausnahme?

Python Requests Mock fängt keine Timeout-Ausnahme ab

UrlHelper Klasse wirft null Ausnahme in Asp.net Mvc

Azure Logic Apps - Bis zum Count & Timeout ausführen

WebClient bleibt bis zum Timeout hängen

Loopj AsyncHttpClient JsonHttpResponseHandler erhält keine Timeout-Ausnahme

Was würde dazu führen, dass XMLHttpRequest bis zum Standard-Timeout des Browsers fehlerfrei hängen bleibt?

Regex, um alles bis zum Muster mit einer Ausnahme abzugleichen

Oracle fängt keine Ausnahme ab

Die Web API Controller-Methode wird bis zum Ende ausgeführt. Keine HTTP-Antwort. Hängt

System.Net.Mail.SmtpClient - Der Client hat keine Berechtigung zum Senden als dieser Absender

E/A-Fehler: Keine Route zum Host; verschachtelte Ausnahme ist java.net.NoRouteToHostException: Keine Route zum Host

Warum erhalte ich keine Abfrage-Timeout-Ausnahme?

Warum erhalte ich keine Ausnahmen, wenn MailKit SmtpClient.Send() fehlschlägt?

eine Schleifeniteration bis zum Timeout stoppen und dann fortsetzen

Warum hängt mein Testcontainer-Test bis zum Timeout bei "Warten auf verfügbare Datenbankverbindung um"?

Task.IsFaulted fängt keine Ausnahme in meinem .Net-Kern ab

MailKit.Net.Smtp.SmtpClient SMTP-Server unterstützt keine Authentifizierung

Warum gibt np.argmax(None) 0 zurück und wirft keine Ausnahme aus?