Exchange Web服务API:发送带附件的邮件时出错

时间:2013-05-29 14:39:21

标签: vb.net exchangewebservices email-attachments ews-managed-api

我正在尝试使用EWS托管API 2.0发送带有PDF附件的邮件。我发送的电子邮件不是我自己的帐户,而是我作为权限发送的。

我可以在没有附件的情况下发送电子邮件,但是一旦我尝试发送附件,请求就会失败。

该文件肯定存在。

我已经实现了TraceListener并且看到在调用SendAndSaveCopy时发送了创建附件请求但我没有从服务器收到正确的响应(我知道服务器正在收到我的请求虽然因为错误显然来自服务器)。在创建附件失败后,我没有看到发送电子邮件的请求。

我在尝试SendAndSaveCopy时收到的错误是The request failed. The underlying connection was closed: An unexpected error occurred on a send.内部异常为Unable to write data to the transport connection: An existing connection was forcibly closed by the remote host.

我已经搜索了这个,根据我发现的一些建议,我已经确认这不仅仅是订阅的超时(在完全相同的上下文中我支持SendAndSaveCopy就好了没有附件,而且事实上我可以在失败后发送错误邮件就好了)。其他人引用了文件大小的问题,但我的文件大小非常小(151 KB)。

我的Exchange管理员正在检查服务器端是否有可能影响此设置但尚未找到任何内容的设置。

有人能告诉我他们是否遇到过(并找到解决方案)这个特殊问题?甚至有关我可以指示我的Exchange管理员查看的特定设置的任何提示?

我的代码附在下面(为了便于阅读,我删除了我的大量错误信息打印):

Public Function SendEmailResponse(ByVal strSender As String, ByVal strRecipient As String, ByVal strSubject As String, ByVal strBody As String, _
                        ByVal ews2010 As ExchangeService, Optional ByVal strCCAddresses As List(Of String) = Nothing, _
                        Optional ByVal strFilesToAttach As List(Of String) = Nothing, _
                        Optional ByVal blnReceipt As Boolean = False) As Boolean
    Try
        Dim msgReply As New EmailMessage(ews2010)
        msgReply.Subject = strSubject
        msgReply.Body = New MessageBody(BodyType.Text, strBody)
        Dim fromAddress As New EmailAddress(strSender)
        msgReply.From = fromAddress
        msgReply.ToRecipients.Add(strRecipient)
        msgReply.IsReadReceiptRequested = blnReceipt
        If strCCAddresses IsNot Nothing Then
            For Each strCC As String In strCCAddresses
                msgReply.CcRecipients.Add(strCC)
            Next
        End If
        msgReply.Save()  '''This works just fine

        If strFilesToAttach IsNot Nothing Then
            For Each flAttach In strFilesToAttach
                msgReply.Attachments.AddFileAttachment(flAttach)
            Next
        End If
        msgReply.SendAndSaveCopy() '''CRASHES HERE IF AND ONLY IF I've attached files in the above loop
        SendEmailResponse = True
    Catch ex As Exception
        SendEmailResponse = False
    End Try
End Function

2 个答案:

答案 0 :(得分:0)

From the OP

  

我的Exchange管理员已经以某种方式将问题跟踪到负载均衡器。如果我直接连接到Exchange服务器,问题就会消失;但是自动发现连接到负载均衡器。他现在正在跟进。希望我很快就会有一个完整的解决方案,但我想我会继续发布以防万一这会给任何人任何想法,或者它可以帮助其他人。

答案 1 :(得分:0)

我们已经在这几个月了,我认为我们没有达到“正确”的解决方案。我们将其跟踪到F5上虚拟IP地址上启用的Application Security Manager。它正在扫描交通并认为附件不安全。