Office365 Office 365 Rest API SendMail错误,具体取决于文件附件扩展名

Office365 Office 365 Rest API SendMail错误,具体取决于文件附件扩展名,office365,outlook-restapi,Office365,Outlook Restapi,我正在尝试发送一封带有附件的即时电子邮件,如下所述: 使用这个JSON主体,我从服务器接收到202响应,并成功地接收到一封附有文件的电子邮件 Post to https://outlook.office.com/api/v2.0/me/sendmail: { Message: { Subject: "...", Body: { ContentType: "HTML", Content: "..." }, ToRecipients:

我正在尝试发送一封带有附件的即时电子邮件,如下所述:

使用这个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内部服务器错误,响应如下:

{
    "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个内部服务器错误。但实际发送的电子邮件将包含所有附件

感谢您的报道!在与我们的开发人员交谈之后,我将此作为API的一个bug提交。一旦我有了一个解决方案,我会更新这个答案,但我现在没有时间来分享

更新:此问题已修复。现在,当您发送附加消息时,您将获得一个接受的
202
。修复程序在一段时间前就已经失效了,我在实际测试和更新这篇文章时一直很松懈(


我正在调查此事,希望能尽快得到更多信息。我和你有同样的经验。我会与我们的开发人员联系,看看是否能弄清楚这里发生了什么。@JasonJohnston谢谢你调查此事!这应该是一个评论,而不是一个答案。如果答案是“这是一个bug”如果没有很好的解决方法,那么对我来说,这似乎更像是一个答案而不是一个评论!有没有公共bug追踪器我可以跟踪?谢谢David。不幸的是,没有,团队没有使用公共bug追踪器。谢谢你抽出时间来讨论这个问题!