我有一个VB.NET程序,每天向5个外部收件人发送4个附件。每天这些附件大小相同,范围从149KB到161KB。
有些日子,邮件会从我们的Exchange服务器退回,并显示以下消息:
远程服务器返回'550 5.2.3 RESOLVER.RST.SendSizeLimit.Org; 消息对于这个组织来说太大了
消息的大小应该是大约160 * 4 = 640KB,但是反弹告诉我们:
此消息未传递给任何人,因为它太大了。该 限制是24 MB。此消息为35 MB。
我们不确定,但似乎35 MB的数字乘以所有5位收件人的附件总数。
其他日子它发送罚款。我们无法找到何时失败的模式 - 通常是每周5天中的1-3天。此外,如果我使用blat和批处理文件将相同的附件发送给相同的收件人,它们总是正确发送。
我们以前在另一台服务器(现已不存在)上运行此程序,但此消息从未失败过。看起来这台服务器特有的东西干扰了电子邮件的发送方式,但我们不确定在哪里查看。可能是.NET程序和blat以某种方式进行交互?我不相信旧服务器安装了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
答案 0 :(得分:0)
我们不确定,但似乎35 MB的数字正在倍增 所有5位收件人的附件总大小。
它不是总计,而是每个收件人。
我之前收到了退回的回复,我总是发送超过为组织设定的限额。也许它确实超过了24MB的限制,即使你认为它不是。
在进行长时间的痛苦调试过程之前,请检查所有接收和发送连接器大小(您需要再次获得同事的帮助才能运行命令)
请按照以下资源获取命令: https://flamingkeys.com/2011/04/how-to-standardise-exchange-2010-message-size-limits/