3 votes

SmtpClient.Send enverra un message ET un délai d'attente.

Je suis en train de mettre à jour un ancien code pour l'intégrer à SQL. Je travaille pour une entreprise qui envoie occasionnellement des courriels en masse, ce qui ralentit considérablement le serveur de messagerie. Nous voulons mettre les courriels en file d'attente dans la base de données s'ils commencent à s'accumuler. En testant certaines modifications du code, j'ai remarqué que je recevais l'e-mail et que le client était toujours en attente. Cela pose des problèmes car le client place alors l'e-mail dans la file d'attente et je le reçois plus tard lorsqu'un autre service tente de nettoyer la base de données.

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);
    }
}

Sur 10 essais, 9 ont échoué, 1 a réussi ; j'ai reçu 7 courriels.

4voto

rich.okelly Points 24144

En regardant la spécification, le délai d'attente promet seulement que la méthode reviendra dans ce délai, pas que l'envoi a été arrêté.

Si vous devez envoyer plusieurs courriels, envisagez d'utiliser la fonction Méthode SendAsync et s'abonner à la Événement SendCompleted pour déterminer le succès/échec de l'envoi de l'email.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X