Outlook API,已移至 "Sent Items" 的邮件仍被标记为“[草稿]”
Outlook API, Message Moved to "Sent Items" still beign marked as "[Draft]"
我正在使用 office.js 开发 Outlook 加载项,用户可以在其中使用后端服务发送安全电子邮件。
在撰写模式下,当用户发送电子邮件时,当然会使用加载项,然后加载项会使用 Outlook API /message 将邮件移动到 "Sent Items" 文件夹/{id}/move 并且一切正常,除了有问题的邮件仍然被 Outlook 标记为 "Draft" 这真的很烦人并且通过告诉他 [=27] 来混淆刚刚发送电子邮件的用户=]
我搜索了 API 以查看是否有办法将电子邮件标记为 "SENT" 以防止 Outlook 显示此红色提示,但到目前为止没有成功!
所以,我的问题是:是否有任何方法可以通过将电子邮件标记为由 Outlook 发送来克服这种误导性信息?
提前致谢。
最终,我能够完美地解决这个挑战。
基于:
- @BrianClink 的评论
- 这个答案(使用 Graph API 但 Outlook REST API):
我按照approach/steps将一个mailItem标记为"SENT"(并没有显示为'draft')并把它放在"SentItems" 文件夹如下:
- 首先,使用
Office.context.mailbox.item.currentMail.saveAsync
将 mailItem 保存为 "draft",然后检索其 ID
- 克隆此草稿 mailItem 属性,例如:'Sender'、'Subject'、'Body'、'ToRecipients'..等等,这样你就可以得到它的精确副本。
- 使用新克隆的 mailItem,将 '[SingleValueExtendedProperties]' 属性 添加为以下值:
[
{
PropertyId: 'Integer 0x0E07',
Value: '1'
}
];
- 将新项目序列化为 JSON 和 POST 到 "sentitems" 文件夹如下:
xhr.open('POST', restHost + '/v2.0/me/MailFolders/sentitems/messages/');
xhr.send(clonedEmailJson);
- 成功后,xhr.status=201 [已创建],使用 [DELETE] 请求删除邮件项目草稿
您最终会在 "sentItems" 文件夹中创建一个新邮件项目,该项目显示为 Outlook 发送的邮件:)
这对我来说是一个非常有用的解决方案,因为我的用户正在使用我的加载项发送安全电子邮件(使用第 3 方 API)而不是 Outlook,所以,我希望他们有相同的 UX/feeling 就像他们使用 Outlook 时一样。
注:
虽然这个解决方案对我来说非常有效,但它是有代价的!
在慢速互联网连接或电子邮件包含大附件的情况下,这个过程可能会非常慢,因为插件会首先将草稿保存到远程 Exchange 服务器,获取它的 ID,然后复制它并再次发送到服务器,然后删除草稿。
我正在使用 office.js 开发 Outlook 加载项,用户可以在其中使用后端服务发送安全电子邮件。
在撰写模式下,当用户发送电子邮件时,当然会使用加载项,然后加载项会使用 Outlook API /message 将邮件移动到 "Sent Items" 文件夹/{id}/move 并且一切正常,除了有问题的邮件仍然被 Outlook 标记为 "Draft" 这真的很烦人并且通过告诉他 [=27] 来混淆刚刚发送电子邮件的用户=]
我搜索了 API 以查看是否有办法将电子邮件标记为 "SENT" 以防止 Outlook 显示此红色提示,但到目前为止没有成功!
所以,我的问题是:是否有任何方法可以通过将电子邮件标记为由 Outlook 发送来克服这种误导性信息?
提前致谢。
最终,我能够完美地解决这个挑战。
基于:
- @BrianClink 的评论
- 这个答案(使用 Graph API 但 Outlook REST API):
我按照approach/steps将一个mailItem标记为"SENT"(并没有显示为'draft')并把它放在"SentItems" 文件夹如下:
- 首先,使用
Office.context.mailbox.item.currentMail.saveAsync
将 mailItem 保存为 "draft",然后检索其 ID - 克隆此草稿 mailItem 属性,例如:'Sender'、'Subject'、'Body'、'ToRecipients'..等等,这样你就可以得到它的精确副本。
- 使用新克隆的 mailItem,将 '[SingleValueExtendedProperties]' 属性 添加为以下值:
[
{
PropertyId: 'Integer 0x0E07',
Value: '1'
}
];
- 将新项目序列化为 JSON 和 POST 到 "sentitems" 文件夹如下:
xhr.open('POST', restHost + '/v2.0/me/MailFolders/sentitems/messages/');
xhr.send(clonedEmailJson);
- 成功后,xhr.status=201 [已创建],使用 [DELETE] 请求删除邮件项目草稿
您最终会在 "sentItems" 文件夹中创建一个新邮件项目,该项目显示为 Outlook 发送的邮件:)
这对我来说是一个非常有用的解决方案,因为我的用户正在使用我的加载项发送安全电子邮件(使用第 3 方 API)而不是 Outlook,所以,我希望他们有相同的 UX/feeling 就像他们使用 Outlook 时一样。
注:
虽然这个解决方案对我来说非常有效,但它是有代价的! 在慢速互联网连接或电子邮件包含大附件的情况下,这个过程可能会非常慢,因为插件会首先将草稿保存到远程 Exchange 服务器,获取它的 ID,然后复制它并再次发送到服务器,然后删除草稿。