[英]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.