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

How to properly respond to an email using the Outlook REST API

我正在使用 Outlook REST API. When responding, I create reply or replyall message following these instructions

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

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

当您在邮件中使用 /createreply/createreplyall/createforward 时,API 会在 Drafts 文件夹中生成草稿邮件,并且它将原始邮件中的许多属性复制到此草稿中。例如,它可能会复制主题并在其前面加上 "RE:" 之类的东西。

对于正文,它会生成一条水平线和一条信息摘要(我们都熟悉的"From"、"Sent"、"To"等)。然后它在下面添加原始消息的正文。

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

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

纯文本

如果草案的正文 reply/forward 是纯文本(即 { "Body": {"ContentType": "Text", "Content": "..." }}),那么它就相当简单了。像这样生成正文:

var newBody = 'This is my response to your message.' + draftReply.Body.Content;

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

HTML

如果草案的正文 reply/forward 是 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
  }
};