Power Automate调用Graph API发邮件报无法读取JSON请求负载错误
错误触发原因
- 核心原因是请求体JSON格式非法:直接将带HTML标签的邮件正文硬拼接进JSON结构时,HTML代码中包含的双引号(常用于标签属性定义,比如
<td style="color:red">里的引号)、换行符、反斜杠等特殊字符没有做JSON合规转义,会直接打断JSON字符串的语法结构,导致Graph API无法正常解析payload。
注意:这个报错和HTML内容本身无关,哪怕正文是普通纯文本,只要包含未转义的JSON特殊字符,一样会触发相同错误 - 次要原因是请求头配置缺失或错误:调用接口时未正确添加
Content-Type: application/json请求头,或错将Content-Type设置为text/html、multipart/form-data等其他类型,接口会按照错误的格式规则解析请求,直接报payload读取失败。 - Power Automate本身的拼接逻辑陷阱:如果直接将存储HTML内容的动态变量插入手写的JSON字符串中,平台不会自动做JSON转义处理,运行时拼接出的内容会天然存在语法断裂问题。
可行解决方案
- 先修正请求头配置:在「Invoke an HTTP request」操作的Headers配置区,明确添加键值对
Content-Type:application/json,不要遗漏,也不要填写其他类型值。 - 不要手动硬拼完整JSON字符串,使用平台内置函数自动转义HTML特殊字符:将你编写好的HTML邮件正文存入字符串变量后,调用
escapeJson()函数处理该变量,自动将所有会破坏JSON结构的特殊字符转义为JSON兼容格式,比如双引号转义为\"、换行符转义为\n、反斜杠转义为\\,从根源上避免JSON结构损坏。 - 参考正确的请求体构造方式,示例代码如下:
{ "message": { "subject": "填写你的邮件主题", "body": { "contentType": "HTML", "content": "@{escapeJson(variables('你的HTML邮件正文变量名'))}" }, "toRecipients": [ { "emailAddress": { "address": "填写收件人邮箱地址" } } ] }, "saveToSentItems": true }
- 更稳妥的低出错率构造方式:可以先使用「Compose」操作拼装好message对象的所有字段(主题、正文、收件人等),再将Compose的输出直接作为HTTP请求的body传入,平台会自动完成JSON序列化,完全不需要手动处理转义问题。
- 排错技巧:如果调用仍然失败,可查看Flow失败运行记录里的实际请求原始payload,将内容复制到JSON校验工具中检查,即可快速定位具体的语法断裂位置。
内容的提问来源于stack exchange,提问作者Chakravarthy
相关产品推荐
相关产品推荐

