System.Net.Mail.SmtpException: Stockage système insuffisant. La réponse du serveur était: 4.3.1 Ressources système insuffisantes

J’ai récemment conçu un programme en C # qui va extraire des informations des bases de données SQL, écrire une page HTML avec les résultats et l’envoyer automatiquement par courrier électronique. Tout fonctionne [de façon sporadique], le problème que j’ai, c’est qu’il semble que je sois en train de planter le serveur Exchange de notre société. Après les premières exécutions réussies du programme, je commencerai à obtenir cette exception:

Exception de base: System.Net.Mail.SmtpException: stockage système insuffisant. La réponse du serveur était: 4.3.1 Ressources système insuffisantes

Je me demande si je devrais appeler une sorte de méthode semblable à Dispose () dans mon mailing. Ou s’il y a une autre raison apparente pour laquelle je ferais cesser de répondre au système de messagerie? Cela concerne tous les clients de notre entreprise, pas seulement mon code.

C’est Exchange 2010 et mon code est compilé avec .NET 3.5. Mes pièces jointes sont généralement 27kb. Si je me connecte au serveur Exchange, il semble que les messages restnt dans la queue indéfiniment. Effacer la queue (supprimer sans envoyer de rapport de non-remise) et redémarrer le serveur le redémarrera.

Les portions de publipostage ressemblent à ceci (nom d’utilisateur, mot de passe et adresse modifiés):

public void doFinalEmail() { List distList = new List(); ssortingng distListPath = Environment.CurrentDirectory + "\\DistList.txt"; ssortingng aLine; logThat("Attempting email dissortingbution of the generated report."); if (File.Exists(distListPath)) { FileInfo distFile = new FileInfo(distListPath); StreamReader distReader = distFile.OpenText(); while (!Ssortingng.IsNullOrEmpty(aLine = distReader.ReadLine())) { distList.Add(aLine); } } else { logThat("[[ERROR]]: Dissortingbution List DOES NOT EXIST! Path: " + distListPath); } MailMessage msg = new MailMessage(); MailAddress fromAddress = new MailAddress("emailaddresshere"); msg.From = fromAddress; logThat("Recipients: "); foreach (ssortingng anAddr in distList) { msg.To.Add(anAddr); logThat("\t" + anAddr); } if (File.Exists(Program.fullExportPath)) { logThat("Attachment: " + Program.fullExportPath); Attachment mailAttachment = new Attachment(Program.fullExportPath); msg.Attachments.Add(mailAttachment); ssortingng subj = "Company: " + Program.yestFileName; msg.Subject = subj; msg.IsBodyHtml = true; msg.BodyEncoding = System.Text.Encoding.UTF8; sendMail(msg); } else { logThat("[[ERROR]]: ATTACHMENT DOES NOT EXIST! Path: " + Program.fullExportPath); } } public void sendMail(MailMessage msg) { try { ssortingng username = "user"; //domain user ssortingng password = "pass"; // password SmtpClient mClient = new SmtpClient(); mClient.Host = "192.168.254.11"; mClient.Credentials = new NetworkCredential(username, password); mClient.DeliveryMethod = SmtpDeliveryMethod.Network; mClient.Send(msg); } catch (Exception oops) { ssortingng whatHappened = Ssortingng.Format("Company: \r\nFailure in {0}! \r\n\r\nError message: {1} \r\nError data: {2} \r\n\r\nStack trace: {3} \r\n\r\nBase exception: {4} \r\nOccuring in method: {5} with a type of {6}\r\n", oops.Source, oops.Message, oops.Data, oops.StackTrace, oops.GetBaseException(), oops.TargetSite, oops.GetType()); logThat(whatHappened); Environment.Exit(1); } } 

Cette erreur peut survenir lorsque:

  1. Le serveur d’échange n’a plus d’espace disque.
  2. La boîte aux lettres du destinataire manque d’espace disque.

Il est plus courant de rencontrer le problème n ° 2 que le problème n ° 1.

Voici une liste des codes d’état d’échange et leur signification.

Pour réduire définitivement le problème, vous pouvez permuter un client de messagerie différent comme aspNetEmail (vous pouvez obtenir une version eval à tester), cela ne prend que quelques lignes de code. Si le problème persiste, il se trouve sur le serveur. sinon, c’est sur le client. Je soupçonne fortement que cela pose un problème sur le serveur. Toutefois, lorsque le client ferme la connexion et que le message est envoyé, le serveur ne doit pas conserver de ressources à la suite de cette connexion. Vous pouvez le vérifier en consultant vos journaux SMTP et en vous assurant qu’il n’y avait pas d’erreur SMTP lors de la fermeture de la connexion.

Si cela pose effectivement un problème sur le serveur (le journal SMTP indique une déconnexion propre et que le problème peut être reproduit avec un autre client), je me connecterai au serveur (si vous pouvez obtenir un access) et surveille l’espace disque suggéré par .

Dans Exchange 2007, le c: (lecteur système) nécessite environ 4 Go d’espace disque disponible. C’était notre problème. Incrémenter le lecteur et les mails vont à nouveau circuler.