如何使用Outlook REST API正确回复电子邮件

时间:2017-01-30 14:10:10

标签: outlook office365api outlook-restapi office365-restapi

我正在使用Outlook REST API。在回复时,我会在these instructions之后创建replyreplyall条消息。

在我的客户端应用中,某些属性会更新,例如Body,并且可以发送消息。我希望我的最终用户在响应时能够访问上一条消息(就像许多邮件客户端一样)。因此,我添加了<hr tabindex="-1" style="display:inline-block; width: 98 %">标记,然后插入上一封邮件Body.Content

我的问题在于UniqueBody属性不可写。 Outlook无法识别此新创建的项目中的上一个电子邮件部分。换句话说,UniqueBodyBody包含相同的内容,响应和原始消息。如何正确地设置这些属性?

1 个答案:

答案 0 :(得分:3)

当您对邮件使用/createreply/createreplyall/createforward时,API会在Drafts文件夹中生成草稿邮件,并复制许多属性从原来的消息到这个草案。例如,它可以复制主题并在其前面加上“RE:”,这类事情。

对于正文,它会生成一条水平线和一个信息摘要(我们都熟悉的“发件人”,“已发送”,“收件人”等)。然后它会在下面添加原始消息的正文。

创建后,草稿回复/转发的Body属性将立即包含所有这些元素。您要添加的消息(实际回复内容)应该在所有这些内容之前立即发送。如果您遵循该规则,服务器通常可以确定哪个部分是“唯一”正文并相应地设置UniqueBody

这里的关键是你不应该从原始邮件中取出正文并将其添加到新文本。取而代之的是草稿信息中的正文。这样,您就可以获得服务器期望的确切格式的水平规则和信息摘要。

纯文字

如果草稿回复/转发的正文是纯文本(即{ "Body": {"ContentType": "Text", "Content": "..." }}),那么它相当简单。像:

一样生成身体
var newBody = 'This is my response to your message.' + draftReply.Body.Content;

var patchPayload = {
  'Body': { 
    'ContentType': 'Text',
    'Content': newBody
  }
};

<强> HTML

如果草稿回复/转发的正文是HTML,那只会稍微复杂一些。虽然您可以加载HTML并基本上在<body>标记之后添加新内容,但您可以通过将回复创建为单独的HTML文档来简化操作。

var newBody = `<html><body><div>This is my response to your message.</div></body></html>` + draftReply.Body.Content;

var patchPayload = {
  'Body': { 
    'ContentType': 'HTML',
    'Content': newBody
  }
};