System.Net.Mail.SmtpException:没有足够的系统存储空间。 服务器响应

2019-07-19 06:04发布

我最近在设计C#程序,将拉动信息从SQL数据库,以将结果写一个HTML页面,并自动通过电子邮件发送出去。 我已经得到了一切工作[零星],我遇到的问题是,我似乎崩溃我们公司的Exchange服务器。 该计划的前几个成功运行后,我会开始得到此异常:

基本异常:System.Net.Mail.SmtpException:没有足够的系统存储空间。 服务器响应为:4.3.1系统资源不足

我想知道如果我要调用某种Dispose()方法的 - 在我的邮件类似的方法? 或者,如果有任何其他明显原因,我将导致邮件系统停止响应? 这会影响到所有的客户在我们公司,不只是我的代码。

这是Exchange 2010中,和我的代码是针对.NET 3.5编译。 我的附件通常是27KB。 如果我登录到Exchange服务器,似乎消息只是坚持在队列无限期。 清除出队列(去除不发送NDR),并重新启动服务器会得到它去。

邮件的部分看起来像这样(用户名,密码和地址变更):

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);
     }
 }

Answer 1:

此错误时会发生:

  1. Exchange服务器的磁盘空间不足。
  2. 收件人邮箱的磁盘空间。

这是比较常见碰到问题#2比问题#1。

下面是一个列表交易所状态代码和它们的含义。



Answer 2:

要明确地缩小问题的范围,你可以在不同的邮件客户端一样aspNetEmail交换(你可以得到一个eval版本进行测试),它不会采取而是几行代码。 如果问题仍然存在,它是在服务器上; 如果不是,它是在客户端上。 我强烈怀疑这是在服务器上的问题,但是,当客户端关闭连接,并发送邮件时,服务器其实它不应该持有任何资源作为连接的结果。 你可以通过查看您的SMTP日志,使验证这一点肯定没有SMTP错误时,连接被关闭。

如果这确实是服务器上的问题(在SMTP日志显示干净断线问题是复制与替代的客户端),那么我会登录到服务器(如果可以访问),并作为jeuton建议观看磁盘空间。



Answer 3:

Exchange 2007中的C:(系统盘),具体的可用磁盘空间4GB。 这是我们的问题。 增量驱动器和邮件将再次流动。



文章来源: System.Net.Mail.SmtpException: Insufficient system storage. The server response was: 4.3.1 Insufficient system resources