Power Automate转义数组所有字符,导致无法用作邮件附件求助
解决Power Automate发送多邮件附件的字符转义问题
问题根源
你碰到的是Power Automate把附件数组错误当成字符串处理的问题——直接传数组时,系统自动给所有双引号加了转义符,导致Graph API无法正确解析附件结构,手动拼字符串和用json()函数反而会加重这个问题。
分步解决办法
1. 用数组变量构建附件(别手动拼字符串)
别自己写JSON字符串,直接用Power Automate的数组变量来组装:
- 先新建一个数组变量(比如命名为
var_Attachments) - 对每个要加的附件,用「Append to array variable」动作,每个项的结构要写成这样:
重点:必须加{ "Name": "@{items('Apply_to_each')?['Name']}", "ContentBytes": "@{body('Get_file_content')?['$content']}", "@odata.type": "#microsoft.graph.fileAttachment" }@odata.type这个字段,这是Graph API识别附件类型的关键,没加的话大概率解析失败。
2. 发送邮件时直接引用数组
- 如果用内置的「Send an email (V2)」动作,直接在「附件」选项里选你建好的数组变量就行,不用额外处理。
- 如果是调用Microsoft Graph的「Send mail」动作,在
emailMessage/Attachments参数里直接传数组变量,别用json()函数包裹——Power Automate会自动帮你正确序列化数组,不会出现转义符。
3. 避坑要点
ContentBytes一定要取文件内容的$content属性,不是$content-type,比如用body('Get_file_content')['$content']来获取。- 所有动态内容都用Power Automate的变量或动态选择器插入,别手动写带双引号的字符串,一写就会触发自动转义。
- 如果之前试过手动拼字符串或者用了
string()函数,先把这些逻辑删掉,重新用数组变量来做。
简单流程示例
- 加个触发动作(比如手动触发)
- 获取要作为附件的文件列表(比如从SharePoint拉文件)
- 初始化数组变量
var_Attachments - 循环每个文件:
- 执行「Get file content」动作拿文件内容
- 用「Append to array variable」把附件对象加到数组里
- 调用发送邮件动作,在附件字段选
var_Attachments
内容的提问来源于stack exchange,提问作者Christian Hilz
相关产品推荐
相关产品推荐

