图谱API有4MB的请求限制,因此如果我想发送一封10MB附件的电子邮件,我就无法使用FileAttachment
类型。据我了解,建议的方法是使用ReferenceAttachment
,其中包含指向已上传到OneDrive
的文件的链接(它接受大型有效负载)。但是,当我这样做时,我可以看到已发送邮件中的ReferenceAttachment
(并且可以完整下载)但目的地(Gmail或Outlook)上没有附件。
我使用此网址调用beta
API:
https://graph.microsoft.com/beta/users/USERNAME/microsoft.graph.sendMail
发布的内容是:
{
"saveToSentItems": true,
"message": {
"attachments": [
{
"sourceUrl": "https://100255-my.sharepoint.com/personal/USERNAME/Documents/sent-attachments/largefile.txt_6T7sHv5E",
"permission": "view",
"providerType": "oneDriveConsumer",
"name": "largefile.txt",
"contentType": "text/plain",
"@odata.type": "#microsoft.graph.referenceAttachment"
}
],
"subject": "Test E-Mail",
"toRecipients": [
{
"emailAddress": {
"address": "me@gmail.com"
}
}
]
}
}
如何确保电子邮件收件人获取附件?
修改
当我使用providerType: onDriveBusiness
时,我会更进一步。我收到一封无法理解的二进制附件(winmail.dat
或noname
)与主电子邮件,然后是一封辅助电子邮件,其中有一个链接要求我向Microsoft开设一个帐户,以便我可以查看共享文件。第二封电子邮件的主题是:
USERNAME wants to share the file largefile.txt_6T7sHv5E with you
请注意,这是gmail发生的事情。当我在连接到Exchange的Windows上使用Outlook客户端时,我不会收到附件或第二封电子邮件。育!
真是个傻瓜!对于电子邮件收件人来说,我的业务(搜索和救援)无法接受此API,并且存在明显障碍!我可以将完整的电子邮件重建为没有难以理解的二进制附件并且不在Microsoft上创建帐户吗?
答案 0 :(得分:0)
免责声明:我已经开始写答案,并且在最后一步意识到它不能解决问题时。决定将其留作参考。至少可以得出这样的结论:/messages/{messageID}/send
端点也是越野车。
阅读图形API documentation使我建议实现您所需要的下一步:
使用对有效负载向POST
发送的https://graph.microsoft.com/beta/me/messages
请求创建消息草稿:
{
"subject": "TestMessage",
"toRecipients": [
{
"emailAddress":{
"address":"egor-mailbox@ya.ru"
}
}
],
"body": {
"contentType": "html",
"content": "<b>Hello!</b>"
}
},
作为响应,您将获得id
设置为AQMkADAwATMwMAItMTJkYi03YjFjLTAwAi0wMAoARgAAA_hRKmxc6QpJks9QJkO5R50HAP6mz4np5UJHkvaxWZjGproAAAIBDwAAAP6mz4np5UJHkvaxWZjGproAAAAUZT2jAAAA
之类的整个消息结构。让我们将其称为{messageID}
。 注意:如您所见,我已经通过了html类型的正文。之所以需要这样做,是因为(至少在GraphAPI Explorer中)图形api返回错误,以防您尝试向具有非html正文内容类型的消息添加引用附件。
此后,您可以使用对POST
的{{1}}请求创建附件
https://graph.microsoft.com/beta/me/messages/{messageID}/attachments
在步骤{
"@odata.type": "#microsoft.graph.referenceAttachment",
"name": "AttachmentName",
"sourceUrl": "https://1drv.ms/u/s!ASDLKASDLASHDLASKDLJAXCXZ_DASD",
"providerType": "oneDriveConsumer",
"isFolder": false
}
之后,您将在邮箱2
文件夹中看到已创建的消息。要发送它,请使用Drafts
(=(原来它也不起作用)
答案 1 :(得分:-1)
有人碰巧知道OneDrive以外的“ providerType”有哪些选项吗?似乎找不到文档。想知道它是否支持Azure Blob存储。