我正在尝试使用 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