我可以使用 Microsoft Graph API
获取邮箱和附件的详细信息样品申请
GET https://outlook.office.com/api/v2.0/me/messages/AAMkAGI2THVSAAA=/attachments?$select=Name
示例响应
状态码: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"
}
]
}
我需要使用Microsoft Graph API下载附件的服务。
答案 0 :(得分:1)
根据您的描述,我假设您要使用MS Graph API下载附件。
根据我的测试,我们可以按照以下步骤下载附件。
第一步,我们应该使用以下API获取附件ID:
GET /me/messages/{id}/attachments
GET /users/{id | userPrincipalName}/messages/{id}/attachments
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);
有关简单代码的更多详细信息,我们可以参考this document。
如果我们使用API的Beta版,并且附件是在线文件,我们还可以使用sourceUrl
属性下载附件。
这里是a closed issue about how to download attachment。这可能对您有帮助。
答案 1 :(得分:0)
是的,您可以从Microsoft Graph API在本地下载文件。您需要将字节流转换为base64解码数据。这是代码
$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;
答案 2 :(得分:0)
使用C#.NET时:
await graphClient.Users["coyote@acme.com"].MailFolders.Inbox.Messages.Request()
.Expand("attachments").GetAsync();
或
await graphClient.Me.MailFolders.Inbox.Messages.Request()
.Expand("attachments").GetAsync();
致谢
答案 3 :(得分:0)
供其他使用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)