使用REST API下载Outlook附件吗?

问题描述 投票:0回答:1

我正在处理与Outlook Mail API相关的项目。 我想下载电子邮件中的附件。 文档说明我可以“获取”附件,并且它们在json响应中返回不同的参数,但我想知道我必须将哪个转换为附件,才能将实际的附件保存到文件系统中。

http://msdn.microsoft.com/office/office365/api/mail-rest-operations#Getattachments

谢谢。

python api email outlook hotmail
1个回答
4
投票

根据文档, https://outlook.office.com/api/v2.0/me/messages/{message_id}/attachments message_id} / attachments返回附件集合,其中包含各个附件的标识符:

{
    "@odata.context": "https://outlook.office.com/api/v2.0/$metadata#Me/Messages('AAMkAGI2THVSAAA%3D')/Attachments(Name)",
    "value": [
        {
            "@odata.type": "#Microsoft.OutlookServices.FileAttachment",
            "@odata.id": "https://outlook.office.com/api/v2.0/Users('ddfcd489-628b-40d7-b48b-57002df800e5@1717622f-1d94-4d0c-9d74-709fad664b77')/Messages('AAMkAGI2THVSAAA=')/Attachments('AAMkAGI2j4kShdM=')",
            "Id": "AAMkAGI2j4kShdM=",
            "Name": "minutes.docx"
        }
    ] }

现在,您可以遍历此列表并使用此API获取单个附件-https: https://outlook.office.com/api/v2.0/me/messages/{message_id}/attachments/{attachment_id} attachments https://outlook.office.com/api/v2.0/me/messages/{message_id}/attachments/{attachment_id} attachment_id https://outlook.office.com/api/v2.0/me/messages/{message_id}/attachments/{attachment_id} ,其中attachment_id是标识符从上述API返回。

响应将是:

{
    "@odata.context": "https://outlook.office.com/api/v2.0/$metadata#Me/Messages('AAMkAGI2THVSAAA%3D')/Attachments/$entity",
    "@odata.type": "#Microsoft.OutlookServices.FileAttachment",
    "@odata.id": "https://outlook.office.com/api/v2.0/Users('ddfcd489-628b-40d7-b48b-57002df800e5@1717622f-1d94-4d0c-9d74-709fad664b77')/Messages('AAMkAGI2THVSAAA=')/Attachments('AAMkAGI2j4kShdM=')",
    "Id": "AAMkAGI2j4kShdM=",
    "LastModifiedDateTime": "2014-10-20T00:41:52Z",
    "Name": "minutes.docx",
    "ContentType": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
    "Size": 11585,
    "IsInline": false,
    "ContentId": null,
    "ContentLocation": null,
    "ContentBytes": "UEsDBBQABgAIAAAAIQDCAAA4KQAAAAA=" }

现在,您可以使用ContentBytes和contentType在本地保存此附件。 此外,附件可以是ItemAttachmentsFileAttachments 。 在Google上搜索更多内容肯定会带您一些示例代码,其中显示了如何下载它们。 但这应该给您一个想法。

您可以检查以下内容:

public static void GetAttachmentsFromEmail(ExchangeService service, ItemId itemId)
        {
            // Bind to an existing message item and retrieve the attachments collection.
            // This method results in an GetItem call to EWS.
            EmailMessage message = EmailMessage.Bind(service, itemId, new PropertySet(ItemSchema.Attachments));

            // Iterate through the attachments collection and load each attachment.
            foreach (Attachment attachment in message.Attachments)
            {
                if (attachment is FileAttachment)
                {
                    FileAttachment fileAttachment = attachment as FileAttachment;

                    // Load the attachment into a file.
                    // This call results in a GetAttachment call to EWS.
                    fileAttachment.Load("C:\\temp\\" + fileAttachment.Name);

                    Console.WriteLine("File attachment name: " + fileAttachment.Name);
                }
                else // Attachment is an item attachment.
                {
                    ItemAttachment itemAttachment = attachment as ItemAttachment;

                    // Load attachment into memory and write out the subject.
                    // This does not save the file like it does with a file attachment.
                    // This call results in a GetAttachment call to EWS.
                    itemAttachment.Load();

                    Console.WriteLine("Item attachment name: " + itemAttachment.Name);
                }
            }
        }
© www.soinside.com 2019 - 2024. All rights reserved.