我正在使用Outlook REST API。在回复时,我会在these instructions之后创建reply
或replyall
条消息。
在我的客户端应用中,某些属性会更新,例如Body
,并且可以发送消息。我希望我的最终用户在响应时能够访问上一条消息(就像许多邮件客户端一样)。因此,我添加了<hr tabindex="-1" style="display:inline-block; width: 98 %">
标记,然后插入上一封邮件Body.Content
。
我的问题在于UniqueBody
属性不可写。 Outlook无法识别此新创建的项目中的上一个电子邮件部分。换句话说,UniqueBody
和Body
包含相同的内容,响应和原始消息。如何正确地设置这些属性?
答案 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
}
};