SmtpClient.Send sendet eine Nachricht UND ein Timeout

  • Ich aktualisiere älteren Code, der in SQL integriert werden soll. Ich arbeite für ein Unternehmen, das gelegentlich Massen-E-Mails versendet, die den Mailserver immens verlangsamen. Wir möchten die E-Mails in die Datenbank einreihen, wenn sie anfangen, sich aufzubauen. Während ich einige Änderungen am Code testete, bemerkte ich, dass ich die E-Mail erhalten würde und der Client immer noch Timeout hatte. Dies würde Probleme verursachen, da der Client die E-Mail dann in die Warteschlange stellte und ich sie später erhalten würde, wenn ein anderer Dienst versucht, die Datenbank zu löschen.

     SmtpClient emailClient = new SmtpClient(Settings.SmtpServer);
    emailClient.Timeout = 100;
    
    bool sent = false;
    try
    {
        using (Impersonate imp = DA.GetImpersonator())
        {
            emailClient.Send(message);
            sent = true;
        }
    }
    catch (SmtpException) { }
    finally
    {
        if (sent)
        {
            email.IsSent = true;
            DA.Save(email);
        }
    }
     

    Von 10 Testläufen, 9 abgelaufen, 1 erfolgreich; Ich habe 7 E-Mails erhalten.

    22 November 2011
    svick
1 answer
  • Wenn Sie sich die Spezifikation ansehen, verspricht das Timeout nur, dass die Methode innerhalb dieser Zeit zurückkehrt, und nicht, dass das Senden angehalten wurde.

    Wenn Sie dies benötigen Senden Sie mehrere E-Mails, verwenden Sie die SendAsync-Methode und abonnieren Sie die SendCompleted-Ereignis , um den Erfolg / Misserfolg von zu ermitteln Senden der E-Mail.

    22 November 2011
    Rich O'Kelly