2010-04-18 5 views
5

J'utilise ce morceau de code pour envoyer un mail:Envoi beaucoup de mails à l'aide SmtpClient (C#) prend très longtemps après un certain temps

SmtpClient client = new SmtpClient(); 
client.Host = smtpServer; 
client.Send(mailMessage); 

Si je déclenche ce code dix fois/seconde, puis après une centaine de mails, l'envoi d'un mail prend 10 secondes ... Pourrait-il y avoir une file d'attente ici?

  • Cela ne devrait-il pas être asynchrone?
+5

Je serais ravi de penser que c'était une conception FONCTION! Selon toute probabilité, c'est votre serveur de messagerie qui vous ralentit pour empêcher les attaques de spam. – PaulG

Répondre

2

Utilisez SmtpClient.SendAsync plutôt que SmtpClient.Send.

2

Il pourrait y avoir plusieurs problèmes:

Êtes-vous correctement de vos Mise au rebut des objets MailMessage? Si vous regardez, l'objet implémente IDisposable et doit donc être éliminé. (Je devinerais en raison des attachements potentiels.) Je commencerais ici.

Avez-vous parlé à l'administrateur du serveur? Il pourrait y avoir une sorte de mécanisme d'étranglement qui détecte que vous envoyez autant de courriels en succession rapide.

Si vous souhaitez envoyer des e-mails de manière asynchrone et que vous vous souciez du résultat de la tentative d'envoi, assurez-vous de vous inscrire à l'événement SendCompleted. Vous souhaiterez également stocker le message lui-même ou une représentation pour savoir quel message a été traité dans l'événement SendCompleted. Gardez à l'esprit que l'ordre des choses commence dans peut ne pas être l'ordre dans lequel ils se terminent.

1

Serait-ce le serveur de messagerie limiter vos demandes? J'envoie du courrier en utilisant le serveur local IIS smtp, et "envoyer" le mail prend très peu de temps pour .NET même quand j'ai des milliers de messages envoyés en quelques minutes (gestionnaire d'exception a mal tourné: P), mais ils peuvent être traités très lentement l'IIS, et peut prendre des heures parfois être effacé dans la file d'attente de courrier IIS

Questions connexes