web-dev-qa-db-fra.com

smtpclient "échec d'envoi de courrier"

voici mon code

for(int i = 0; i < number ; i++)
{
MailAddress to = new MailAddress(iMail.to);
MailAddress from = new MailAddress(iMail.from, iMail.displayName);
string body = iMail.body;
string subject = iMail.sub;
oMail = new MailMessage(from, to);
oMail.Subject = subject;
oMail.Body = body;
oMail.IsBodyHtml = true;
oMail.Priority = MailPriority.Normal;
oMail.Sender = from;
s = new SmtpClient(smtpServer);
if (s != null)
{
 s.Send(oMail);
}
oMail.Dispose();
s = null;
}

cette boucle envoie plus de 60 000 e-mails. mais mon problème, je reçois "échec d'envoi de courrier" dans certains des e-mails, parfois 5000 et parfois moins que le reste d'entre eux est livré. et j'ai vérifié que toutes ces erreurs sur les e-mails ont une adresse e-mail valide. Je ne sais pas quel est le problème. j'ai vraiment besoin d'aide pour cela.

Modifier: c'est ma trace d'exception

Erreur - Échec de l'envoi du courrier .; Inner Ex - System.IO.IOException: impossible de lire les données de la connexion de transport: net_io_connectionclosed. à System.Net.Mail.SmtpRselfReaderFactory.ProcessRead (Byte [] buffer, Int32 offset, Int32 read, Boolean readLine) à System.Net.Mail.SmtpRplyReaderFactory.ReadLines (SmtpRhnessReader caller, Boolean oneLine) à System.Rail.Smt.SReader .ReadLine (appelant SmtpRhnessReader) sur System.Net.Mail.CheckCommand.Send (connecteur SmtpConnection, chaîne et réponse) sur System.Net.Mail.MailCommand.Send (connexion SmtpConnection, commande Byte [], chaîne depuis) ​​sur System.Net. Mail.SmtpTransport.SendMail (expéditeur MailAddress, destinataires MailAddressCollection, String deliveryNotify, SmtpFailedRecipientException & exception)

14
Nnp

apparemment, ce problème a été résolu simplement en augmentant la taille de la file d'attente sur mon serveur smtp tiers. mais la réponse de Nip semble être assez utile aussi

3
Nnp

Eh bien, "l'échec de l'envoi d'e-mails" devrait, espérons-le, avoir un peu plus de détails. Mais il y a quelques choses qui pourraient causer cela.

  1. Restrictions sur l'adresse "De". Si vous utilisez des adresses différentes de, certaines pourraient être bloquées par votre service SMTP pour ne pas pouvoir envoyer.
  2. La prévention des inondations sur votre service SMTP pourrait empêcher les e-mails de sortir.

Peu importe s'il s'agit d'une de ces erreurs ou d'une autre, vous voudrez regarder l'exception et l'exception interne pour obtenir un peu plus de détails.

9
Mitchel Sellers

J'ai rencontré le même problème lors de l'envoi d'e-mails à volume élevé. Définir la propriété deliveryMethod sur PickupDirectoryFromIis l'a corrigé pour moi. Ne créez pas non plus de nouveau SmtpClient à chaque fois.

3
Romhein

quelle erreur obtenez-vous est-ce une SmtpFailedrecipientException? Si tel est le cas, vous pouvez consulter la liste des innerexceptions et afficher le StatusCode pour obtenir plus d'informations. le lien ci-dessous contient de bonnes informations

MSDN

Modifier pour les nouvelles informations

C'est un problème pour trouver votre serveur SMTP d'après ce que je peux voir, même si vous dites que cela ne se produit que sur certains e-mails. Utilisez-vous plus d'un serveur smtp et si oui, vous pouvez peut-être ramener le problème à un en particulier, sinon il se peut que la vitesse/quantité d'e-mails que vous envoyez cause un problème à votre serveur smtp.

1
Pharabus

Pour nous, tout allait bien, les e-mails sont très petits et peu d'entre eux sont envoyés et, soudain, cela a donné cette erreur. Il est apparu qu'un technicien avait installé ASTARO, ce qui empêchait l'envoi de courriels. et nous obtenions cette erreur alors oui, l'erreur est un peu cryptique mais j'espère que cela pourrait aider les autres.

1
Marc Roussel

Voir votre boucle d'envoi de courriels et l'erreur que vous avez fournie n'est qu'une solution.
Déclarez l'objet courrier hors de la boucle et affectez fromaddress hors de la boucle que vous utilisez pour envoyer des messages. Le champ fromaddress est assigné encore et encore dans la boucle qui est votre problème.

1
OM Krishna

Cinq ans plus tard (j'espère que ce développeur n'attend toujours pas un correctif à cela ..)

J'ai eu le même problème, causé par la même erreur: je déclarais le SmtpClient à l'intérieur de la boucle.

La solution est simple - déclarez-le une fois, en dehors de la boucle ...

MailAddress mail = null;
SmtpClient client = new SmtpClient();
client.Port = 25;
client.EnableSsl = false;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = true;
client.Host = smtpAddress;       //  Enter your company's email server here!

for(int i = 0; i < number ; i++)
{
    mail = new MailMessage(iMail.from, iMail.to);
    mail.Subject = iMail.sub;
    mail.Body = iMail.body;
    mail.IsBodyHtml = true;
    mail.Priority = MailPriority.Normal;
    mail.Sender = from;
    client.Send(mail);
}
mail.Dispose();
client.Dispose();
1
Mike Gledhill

Cette erreur peut apparaître lorsque le serveur Web ne peut pas accéder au serveur de messagerie. Assurez-vous que le serveur Web peut atteindre le serveur de messagerie, par exemple en le cinglant.

0
Daniel Hedenström