简体   繁体   English

如何使用 Microsoft Graph API 下载附件?

[英]How to download attachments using Microsoft Graph API?

I've able to get mailbox and attachment detail using Microsoft Graph API我可以使用Microsoft Graph API获取邮箱和附件详细信息

Sample request样品请求

GET https://outlook.office.com/api/v2.0/me/messages/AAMkAGI2THVSAAA=/attachments?$select=Name

Sample response样本响应

Status code: 200状态码:200

{
    "@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"
        }
    ]
}

I need a service for download attachments using Microsoft Graph API.我需要使用 Microsoft Graph API 下载附件的服务。

According to your description, I assume you want to download the attachments using MS Graph API.根据您的描述,我假设您想使用 MS Graph API 下载附件。

Based on my test, we can using the following steps to download the attachments.根据我的测试,我们可以使用以下步骤下载附件。

Step1, we should get the attachments ID using the following APIs: Step1,我们应该使用以下API获取附件ID:

GET /me/messages/{id}/attachments

GET /users/{id | userPrincipalName}/messages/{id}/attachments

Step2, we can using the following code to download the attachment. Step2,我们可以使用下面的代码下载附件。

Chilkat.StringBuilder sbSavePath = new Chilkat.StringBuilder();
Debug.WriteLine("name: " + json.StringOf("value[i].name"));
Debug.WriteLine("contentType: " + json.StringOf("value[i].contentType"));
int sizeInBytes = json.IntOf("value[i].size");
Debug.WriteLine("size: " + Convert.ToString(sizeInBytes));

//  Extract the data and save to a file.
sbSavePath.SetString("qa_output/");
sbSavePath.Append(json.StringOf("value[i].name"));

attachData.Clear();
attachData.AppendEncoded(json.StringOf("value[i].contentBytes"),"base64");
attachData.WriteFile(sbSavePath.GetAsString());

//  Get the last-modified date/time and set the output file's last-mod date/time..
lastMod.SetFromTimestamp(json.StringOf("value[i].lastModifiedDateTime"));
fac.SetLastModified(sbSavePath.GetAsString(),lastMod);

For more detail about the simple code, we can refer to this document .关于简单代码的更多细节,我们可以参考这个文档

If we use the beta version of the APIs, and the attachment is a online file, we can also use the sourceUrl property to download the attachment.如果我们使用 API 的测试版,并且附件是在线文件,我们也可以使用sourceUrl属性下载附件。

Here is a closed issue about how to download attachment .这是一个关于如何下载附件的封闭问题 It may be helpful for you.它可能对你有帮助。

Yes, you can download the file locally from Microsoft Graph API.是的,您可以从 Microsoft Graph API 本地下载该文件。 You need to convert the byte stream to base64 decoded data.您需要将字节流转换为 base64 解码数据。 Here is the code这是代码

$curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => "https://graph.microsoft.com/v1.0/me/messages/your_message_id/attachments",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => array(
    "Prefer: IdType=\"ImmutableId\"",
    "Authorization: Bearer your_access_token"
  ),
));

$response = json_decode(curl_exec($curl),true);
curl_close($curl);

$fileName = $response['value'][0]['name'];
$contents = base64_decode($response['value'][0]['contentBytes']);

header("Content-type: ".$response['value'][0]['contentType']);
header("Content-Disposition: attachment; filename=" . $fileName);
print $contents;
die;

When using C#.NET:使用 C#.NET 时:

await graphClient.Users["coyote@acme.com"].MailFolders.Inbox.Messages.Request()
                .Expand("attachments").GetAsync();

or或者

await graphClient.Me.MailFolders.Inbox.Messages.Request()
                .Expand("attachments").GetAsync();

Regards问候

for reference of other users that are using python, hope this will help you save some time供其他使用python的用户参考,希望这可以帮助您节省一些时间

import io
import response

url = f"https://graph.microsoft.com/v1.0/me/messages/{email_id}/attachments/{attachment_id}/$value"

payload={}
headers = {
  'Content-Type': 'application/json',
  'SdkVersion': 'postman-graph/v1.0',
  'Authorization': f'Bearer {access_token}'
}

response = requests.request("GET", url, headers=headers, data=payload, allow_redirects=False)

toread = io.BytesIO()
toread.write(response.content)
toread.seek(0)

df = pd.read_excel(toread)
print(df)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Microsoft Graph:通过 Rest API 下载文件 - Microsoft Graph: Download file via Rest API 如何使用JAVA Rest API从Rally工作项下载附件? - How can I download attachments from a Rally workitem using JAVA Rest API? 如何使用 Microsoft Graph API 访问其他组织的用户列表? - How to access user lists for other organisations using the Microsoft Graph API? 为什么Microsoft Graph API在URI中使用$ ref? - Why is the Microsoft Graph API using $ref in the URI? 如何使用Microsoft Graph API通过自定义列值查找SharePoint文档 - How to find SharePoint documents by custom column value using Microsoft Graph API 如何使用 PowerShell Azure 函数和 Graph API 创建 Microsoft Teams 团队? - How to create a Microsoft Teams team using a PowerShell Azure function and the Graph API? 如何使用Microsoft Graph正确创建组? - How to properly create groups using Microsoft Graph? 使用 proptags 在 Microsoft Graph API 中设置扩展属性 - Setting Extended Properties in Microsoft Graph API using proptags 使用Outlook或Graph Rest API撤消对Microsoft / Outlook帐户的访问 - Revoke access of microsoft/outlook account using outlook or graph rest API 在 PowerShell 中使用 Microsoft Graph API 获取规划器任务 - Using Microsoft Graph API in PowerShell to Get Planner Tasks
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM