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