title: System.Net.Mail.SmtpException: Insufficient system storage. The server response was: 4.3.1 Insufficient system resources
body: <p>I've recently designed a program in C# that will pull information from SQL databases, write an HTML page with the results, and auto-email it out. I've got everything working [sporadically], the problem I'm having is that I seem to be crashing our company's exchange server. After the first few successful runs of the program, I'll start getting this exception:</p>
  
  <blockquote>
    <p>Base exception: System.Net.Mail.SmtpException: Insufficient system storage. The server response was: 4.3.1 Insufficient system resources</p>
  </blockquote>
  
  <p>I'm wondering if I should be calling some sort of Dispose()-like method in my mailing? Or if there is any other apparent reason that I would be causing the mail system to stop responding? This affects all clients in our company, not just my code.</p>
  
  <p>This is Exchange 2010, and my code is compiled against .NET 3.5. My attachments are typically 27kb. If I log into the exchange server, it seems that messages just stick in a queue indefinitely. Clearing out the queue (remove without sending NDR) and rebooting the server will get it going again.</p>
  
  <p>The mailing portions look like this (username, password, and address changed):</p>
  
  <pre><code>public void doFinalEmail()
  {
       List&lt;string&gt; distList = new List&lt;string&gt;();
       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);
       }
   }
  </code></pre>