VB.NET程序生成错误的电子邮件大小限制错误

时间:2016-08-22 13:26:36

标签: vb.net exchange-server system.net.mail

我有一个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

1 个答案:

答案 0 :(得分:0)

  

我们不确定,但似乎35 MB的数字正在倍增   所有5位收件人的附件总大小。

它不是总计,而是每个收件人。

我之前收到了退回的回复,我总是发送超过为组织设定的限额。也许它确实超过了24MB的限制,即使你认为它不是。

在进行长时间的痛苦调试过程之前,请检查所有接收和发送连接器大小(您需要再次获得同事的帮助才能运行命令)

请按照以下资源获取命令: https://flamingkeys.com/2011/04/how-to-standardise-exchange-2010-message-size-limits/