Microsoft Graph API技术问题:无法为邮件添加附件
解决Microsoft Graph API添加邮件附件报错问题
我明白你现在遇到的麻烦——能正常发送邮件但一加附件就报错,确实挺闹心的。结合你给出的代码片段,我几乎能确定问题出在附件的编码和结构定义上,咱们一步步来搞定它:
核心问题:Base64编码的换行符干扰
你用了chunk_split(base64_encode(...)),但Microsoft Graph API要求附件的contentBytes必须是无任何换行的纯Base64字符串,chunk_split会自动插入换行符,这会直接导致API解析失败。
修正后的完整代码示例
先调整Base64编码部分,然后补全正确的附件结构:
// 读取文件内容并直接Base64编码,不要添加换行 $fileContent = file_get_contents($path); $b64Doc = base64_encode($fileContent); // 构建完整的邮件请求Payload $payload = [ 'Message' => [ 'subject' => $subject, 'body' => [ 'contentType' => 'Html', 'content' => '<p>这是邮件正文内容</p>' // 替换为你的实际正文 ], 'toRecipients' => [ [ 'emailAddress' => [ 'address' => 'recipient@yourdomain.com' ] ] ], 'attachments' => [ [ '@odata.type' => '#microsoft.graph.fileAttachment', 'name' => 'document.pdf', // 替换为你的附件文件名(带扩展名) 'contentType' => 'application/pdf', // 替换为对应文件的MIME类型 'contentBytes' => $b64Doc ] ] ], 'saveToSentItems' => true // 可选:是否将邮件保存到已发送文件夹 ];
额外注意事项
- MIME类型要准确:比如.docx文件对应
application/vnd.openxmlformats-officedocument.wordprocessingml.document,图片对应image/jpeg,类型错误也会触发API报错。 - 检查附件大小:普通附件的大小上限是3MB,如果你的附件超过这个值,需要改用大文件上传会话的方式(通过
/attachments/createUploadSession端点)。 - 请求头设置正确:发送POST请求时,必须设置
Content-Type: application/json,确保Payload以JSON格式传递,不要用form-data格式。
如果调整后还是报错,可以把具体的错误信息贴出来,我再帮你进一步排查~
内容的提问来源于stack exchange,提问作者Thomas A
相关产品推荐
相关产品推荐

