У меня есть программа 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
Не показывая свой код, мы не можем много сделать (не забудьте снять код с любых паролей и личных данных, прежде чем публиковать его). –