2016-08-22 52 views
0

我有一個VB.NET程序每天向5個外部收件人發送4個附件。這些附件每天都有相同的大小,從149KB到161KB不等。VB.NET程序生成錯誤的電子郵件大小限制錯誤

有些日子,消息會從我們這個消息交換服務器退回:

返回「遠程服務器550 5.2.3 RESOLVER.RST.SendSizeLimit.Org; 消息太大,這個組織

消息的大小應該是大約160 * 4 = 640KB,但反衝告訴我們:

此消息,因爲它沒有被交付給任何人太大了。 限制是24 MB。該消息是35 MB。

我們不確定,但它似乎是35 MB的數字乘以所有5個收件人的附件的總大小。

其他日子它發送罰款。我們沒有發現什麼時候失敗的模式 - 通常是每週5次1-3天。另外,如果我使用blat和批處理文件將相同的附件發送給相同的收件人,則它們始終會正確發送。

我們以前在另一臺服務器上運行此程序(現已停用),並且此消息永遠不會失敗。似乎有一些特定於此服務器的內容會干擾電子郵件的發送方式,但我們不確定在哪裏尋找。它可能是.NET程序和Blat相互作用嗎?我不相信舊服務器已經安裝了。

我個人不能訪問所有交換日誌,但我有一個同事檢查他們,他們說他們找不到任何不尋常的東西。

編輯代碼:

Public Sub SendEmail() 
     Dim objMail As New SmtpClient(ConfigurationManager.AppSettings("MailServer").ToString, 25) 
     Dim objMess As MailMessage 
     Dim strBody As String 
     Dim JHPath As String : JHPath = ConfigurationManager.AppSettings("JHFiles").ToString 

     Try 
      'create a new message object 
      objMess = New Net.Mail.MailMessage() 
      objMail.Timeout = 90000 '90 seconds 
      'add sender to the message object 
      objMess.From = New MailAddress(ConfigurationManager.AppSettings("MailFromAddr"), "<redacted>") 

      'add recipients 
      For Each addr As String In ConfigurationManager.AppSettings("MailToAddr").Split(";") 
       objMess.To.Add(addr) 
      Next 

      'the body text of the email 
      strBody = "" 
      'add subject to the message object 
      objMess.Subject = "<redacted> " & labelsDate.ToString("MM/dd/yyyy") & " - " & <redacted> 
      'add body to the message object 
      objMess.Body = strBody 

      Dim filAge As Integer 
      'attach the 4 files necessary for the <redacted> - only today's 
      For Each fil As String In IO.Directory.GetFiles(JHPath) 
       filAge = (Today() - IO.File.GetLastWriteTime(fil)).Days 
       If filAge < 1 And Not (fil Like "*Thumbs.db") Then 'add today's files only, in case archiving did not happen 
        objMess.Attachments.Add(New Attachment(fil)) 
       End If 
      Next 


      'send the email 
      Console.WriteLine(Now() & " -- Sending email..... " & vbCrLf) 
      writer.WriteLine(Now() & vbTab & "Sending email..... " & vbCrLf) 

      'try sending the message 
      Try 
       objMail.Send(objMess) 
       writer.WriteLine(Now() & vbTab & "Email sent and cleaned up. " & vbCrLf) 
      Catch ex As Exception 
       Dim mess As String : mess = Now() & " -- Failure sending email to <redacted>!" 
       Console.WriteLine(mess) 
       writer.WriteLine(mess) 
      Finally 
       'get rid of the message object, cleanup 
       objMess.Dispose() 
      End Try 


     Catch ex As Exception 
      Console.WriteLine(Now() & " -- Other Error Emailing to <redacted>: " & ex.Message) 
      writer.WriteLine(Now() & vbTab & "Exception while Emailing <redacted>: " & ex.Message & vbCrLf) 
      SendEmails("Error emailing <redacted>." & ex.Message & vbCrLf & ex.StackTrace) 
     End Try 
    End Sub 
+1

沒有顯示你的代碼,我們可以做的事情並不多(記住,在你發佈任何密碼和個人信息之前,將代碼去掉)。 –

回答

0

我們不知道,但它似乎是35 MB數字是由所有5個收件人乘以附件的 總規模。

這是不總計,它是每個收件人。

之前我收到了反彈回來,我總是發送超過爲組織設置的限制。也許它確實超過了24MB的限制,即使你認爲它不是。

之前你走很長的痛苦的調試過程中,檢查所有的接收和發送連接器尺寸(你需要你的幫助再次同事來運行這些命令)

按照此資源的命令: https://flamingkeys.com/2011/04/how-to-standardise-exchange-2010-message-size-limits/

+0

他們檢查了連接器的尺寸,他們是24MB。沒有我知道的情況下,消息如何超過極限?它會添加什麼,我將如何找到它? – Sarah

+0

這些問題都是無法回答的問題,沒有任何人看到生成的電子郵件。你可以給自己發送電子郵件的本地副本以及收件人嗎? – Henry

+0

不確定發送本地副本是什麼意思?如果我發送它們,他們必須通過Exchange服務器。正如我在第一篇文章中提到的那樣,我們確實會在幾天內收到電子郵件,並且他們看起來像預期的那樣,正確的大小附件和標題看起來不錯。 – Sarah