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);
}
}
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
Vous devez vous connecter pour publier un commentaire.
Cette erreur peut se produire lorsque:
Il est plus commun de courir dans le numéro 2 de l'édition n ° 1.
Voici une liste de L'Échange Des Codes D'État et leurs significations.
OriginalL'auteur jeuton
Pour mieux cerner le problème définitivement, vous pouvez l'échanger par un autre client de messagerie comme aspNetEmail (vous pouvez obtenir un eval version de test), il n'est pas nécessaire, mais quelques lignes de code. Si le problème persiste, il est sur le serveur; si non, il est sur le client. Je soupçonne fortement que c'est un problème sur le serveur, cependant, que lorsque le client ferme la connexion et le message est envoyé, le serveur devrait vraiment pas être tenue de toutes les ressources, en raison de cette connexion. Vous pouvez vérifier cela en regardant votre journal SMTP et assurez-vous il n'y avait pas d'erreur SMTP lorsque la connexion a été fermée.
Si c'est effectivement un problème sur le serveur (le journal SMTP montre nettoyer la déconnexion et le problème est reproductible avec un autre client), alors je voudrais ouvrir une session sur le serveur (si vous pouvez obtenir l'accès), et de regarder l'espace disque comme jeuton suggère.
OriginalL'auteur J.T. Taylor
Dans exchange 2007, le c: (disque système) a besoin d'environ 4 GO d'espace disque libre. C'était notre problème. Incrémenter le lecteur et les mails iront de nouveau.
OriginalL'auteur João Pereira Oliveira