2016-08-22 2 views
0

У меня есть программа VB.NET, которая ежедневно отправляет 4 вложения в 5 внешних получателей. Каждый день эти вложения имеют одинаковый размер, от 149 КБ до 161 КБ.VB.NET-программа создает ложную ошибку ограничения размера электронной почты

Несколько дней, сообщение получает отскочил назад от нашего сервера обменом с этим сообщением:

Удаленный сервер возвращается «550 5.2.3 RESOLVER.RST.SendSizeLimit.Org; сообщение слишком велико для этой организации»

Размер сообщения должен быть приблизительно 160 * 4 = 640 КБ, но BounceBack говорит нам:

Это сообщение не было доставлено кому-либо, потому что это слишком большой. Предел составляет 24 МБ. Это сообщение составляет 35 МБ.

Мы не уверены, но, похоже, цифра 35 МБ умножает общий размер вложений на все 5 получателей.

Другие дни, которые он отправляет штрафом. Нет никакой картины, которую мы можем найти, когда она терпит неудачу - обычно 1-3 дня из 5 в неделю. Кроме того, если я отправляю те же вложения тем же получателям, использующим blat и командный файл, они всегда отправляются правильно.

Ранее мы запускали эту программу на другом сервере (теперь не функционировали), и это сообщение никогда не прерывалось. Кажется, что есть что-то особенное для этого сервера, который мешает тому, как отправляется электронное письмо, но мы не уверены, где искать. Может ли это быть программа .NET и blat, взаимодействующая каким-то образом? Я не верю, что старый сервер был установлен.

У меня лично нет доступа ко всем журналам обмена, но у меня был сотрудник, проверяющий их, и они сказали, что не могут найти ничего необычного.

Edited для кода:

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 получателям.

Это не сумма, это за каждого получателя.

Я получил отскок назад в обмен раньше, и я всегда отправлял лимит, установленный для организации. Возможно, на самом деле это предел более 24 МБ, хотя вы считаете, что это не так.

Перед тем, как идти вниз длинный болезненный процесс отладки, проверьте все размеры приема и отправки соединителя (вам нужна помощь от вас КОЛЛЕГА снова запустить команды)

Выполните этот ресурс для команд: https://flamingkeys.com/2011/04/how-to-standardise-exchange-2010-message-size-limits/

+0

Они проверили размеры разъема, и они равны 24 МБ. Как сообщение могло превысить пределы, если бы я не знал? Что это могло бы добавить и как бы я нашел это? – Sarah

+0

Это вопросы, на которые нельзя ответить, без каких-либо видящих создаваемых писем.Можете ли вы отправить себе местную копию писем, а также получателей. – Henry

+0

Не знаете, что вы имеете в виду, отправив местную копию? Если я отправлю их, они должны пройти через сервер Exchange. Как я уже упоминал в первоначальном сообщении, мы получаем сообщения по электронной почте несколько дней, и они выглядят так, как ожидалось, с правильными вложениями и заголовками размера. – Sarah