Système.Net.Mail.SmtpException: l'Insuffisance du système de stockage. La réponse du serveur est: 4.3.1 ressources système Insuffisantes

J'ai récemment conçu un programme en C# qui va tirer des informations à partir de bases de données SQL, écrire une page HTML avec les résultats, et email automatique. J'ai tout fonctionne [sporadiquement], le problème que je vais avoir, c'est que j'ai l'impression de s'écraser notre serveur exchange de l'entreprise. Après les premiers succès exécute le programme, je vais commencer à le faire de cette exception:

De la Base de l'exception: System.Net.Mail.SmtpException: l'Insuffisance du système de stockage. La réponse du serveur est: 4.3.1 ressources système Insuffisantes

Je me demande si je devrais l'appeler une sorte de Disposer () comme méthode dans mon courrier? Ou si pour toute autre raison apparente que je voudrais être à l'origine du système de messagerie cesser de répondre? Cela affecte tous les clients de notre société, pas seulement mon code.

C'est Exchange 2010, et mon code est compilé contre .NET 3.5. Mes pièces jointes sont généralement 27ko. Si je me connecte sur le serveur exchange, il semble que les messages, il suffit de coller dans une file d'attente indéfiniment. L'effacement de la file d'attente (supprimer sans envoyer de rapport de non-remise) et de redémarrer le serveur va obtenir ce que ça va encore.

La diffusion des portions ressembler à ceci (nom d'utilisateur, mot de passe, et changé d'adresse):

public void doFinalEmail()
{
List<string> distList = new List<string>();
string distListPath = Environment.CurrentDirectory + "\\DistList.txt";
string aLine;
logThat("Attempting email distribution of the generated report.");
if (File.Exists(distListPath))
{
FileInfo distFile = new FileInfo(distListPath);
StreamReader distReader = distFile.OpenText();
while (!String.IsNullOrEmpty(aLine = distReader.ReadLine()))
{
distList.Add(aLine);
}
}
else
{
logThat("[[ERROR]]: Distribution List DOES NOT EXIST! Path: " + distListPath);
}
MailMessage msg = new MailMessage();
MailAddress fromAddress = new MailAddress("emailaddresshere");
msg.From = fromAddress;
logThat("Recipients: ");
foreach (string 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);
string 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
{
string username = "user"; //domain user
string 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)
{
string whatHappened = String.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);
}
}
Vous avez peut-être droit -- SmtpClient est IDisposable. Sont donc MailMessage & pièce Jointe.
De vérifier la quantité d'espace disponible sur votre disque dur
Je vais ajouter que je pense que nous avons vu que le même message d'erreur lorsqu'il n'est pas d'en disposer correctement SmtpClient.
Espace sur le disque dur semble bon sur le serveur d'envoi, le serveur exchange, et le client (moi), je suis aussi bien à court de ma boîte aux lettres taille limite. Austin, je ne vois aucun moyen d'appeler un dispose sur mon SmtpClient, MAIS je m'aperçois que je n'ai pas de délai défini. Je me demande si c'auto dispose après le délai d'attente?
Vous ne pouvez pas mettre votre SmtpClient exemple dans un bloc using? Ou tout simplement appeler mClient.Dispose() ?

OriginalL'auteur raney | 2013-02-04