ここで概説されているように、添付ファイル付きの電子メールをオンザフライで送信しようとしています: https://msdn.microsoft.com/office/office365/APi/mail-rest-operations#SendMessageOnTheFly
この JSON 本文を使用して、サーバーから 202 応答を受信し、ファイルが添付された電子メールを正常に受信しました。
Post to https://outlook.office.com/api/v2.0/me/sendmail:
{
Message: {
Subject: "...",
Body: {
ContentType: "HTML",
Content: "..."
},
ToRecipients: [
{
EmailAddress: {
Address: "..."
}
}
],
Attachments: [
{
"@odata.type": "#Microsoft.OutlookServices.FileAttachment",
Name: "test.txt",
ContentBytes: "bWFjIGFuZCBjaGVlc2UgdG9kYXk="
}
]
},
SaveToSentItems: true
}
ただし、名前を「test.msg」に変更すると、次の応答で 500 Internal Server Error が表示されます。
{
"error": {
"code": "ErrorInternalServerError",
"message": "Object reference not set to an instance of an object."
}
}
「test.eml」を使用すると、500 内部サーバー エラーも表示されますが、応答は異なります。
{
"error": {
"code": "ErrorInternalServerError",
"message": "Unable to cast object of type 'Microsoft.Exchange.Services.Core.Types.ItemAttachmentType' to type 'Microsoft.Exchange.Services.Core.Types.FileAttachmentType'."
}
}
不思議なことに、どちらの場合も、添付ファイル付きのメールをまだ受け取っています。現在、私のアプリケーションは、(失敗したステータス コードに基づいて) メールの送信中にエラーが発生したことをユーザーに通知していますが、メールは実際に送信されたので、これはイライラします。
メッセージとイベントには別のオブジェクト タイプ (#Microsoft.OutlookServices.ItemAttachment) があることは認識していますが、Outlook のサーバーに既に存在し、ID によってリンクされているアイテムを意味することを理解しています (イベントの会議出席依頼を添付するなど)。はすでに作成されています); さらに、そのタイプには、入力するフィールドとして ContentBytes がありません。その場で送信する場合、バイナリ ファイル データは同じように扱われると思います (これらの .msg および .eml ファイルはユーザーのコンピューターからアップロードされており、必ずしも Outlook に既に存在するとは限りません)。
ここで何が起こっているのか分かりますか?
更新下書きメッセージの作成 をテストし、別の投稿に添付ファイルをメッセージに追加してから、. 繰り返しますが、同じエラー メッセージです。結果を作成して送信すると、成功のステータス コードが返されます。添付ファイルを作成すると、同様に拡張子が .msg または .eml の場合、500 内部サーバー エラーが発生します。ただし、実際に送信される電子メールにはすべての添付ファイルが含まれます。