Power Automate中如何将Salesforce邮件模板变量替换为动态内容
解决Power Automate中HTML变量内动态内容无法解析的问题
核心原因
Power Automate不会二次解析已存储在变量中的表达式(比如@{items('Apply_to_each')?['CompanyOrAccount']}),直接插入这类内容会被当成纯文本字符串显示。必须在生成最终HTML内容的阶段就完成动态内容的替换。
可行方案
方案1:直接在发送邮件步骤中完成替换(推荐)
- 提取Salesforce邮件模板的原始HTML正文,将其中需要替换的Salesforce自动字段(比如
{!CampaignMember.CompanyOrAccount}、{!CampaignMember.FirstName})替换为自定义占位符(比如{{Company}}、{{FirstName}},避免和Power Automate表达式语法冲突)。 - 在「发送邮件」步骤的正文输入框中,使用嵌套的
replace表达式完成动态内容替换:
replace( replace( '<Salesforce模板原始HTML内容>', '{{Company}}', items('Apply_to_each')?['CompanyOrAccount'] ), '{{FirstName}}', items('Apply_to_each')?['FirstName'] )
- 确保邮件正文切换到HTML模式(点击输入框右上角的「HTML」按钮),这样解析后的HTML会正常渲染。
方案2:通过Compose/变量预生成替换后的HTML
如果需要复用处理后的HTML内容,可以用Compose或变量提前完成替换:
- 添加「Compose」步骤,输入原始Salesforce模板HTML(或直接引用获取模板的输出)。
- 添加另一个「Compose」步骤,使用
replace表达式替换占位符:
replace( replace( outputs('Compose_原始HTML'), '{!CampaignMember.CompanyOrAccount}', items('Apply_to_each')?['CompanyOrAccount'] ), '{!CampaignMember.FirstName}', items('Apply_to_each')?['FirstName'] )
- 将第二个Compose步骤的输出直接作为邮件正文内容,同样要确保开启HTML模式。
方案3:避免直接在HTML中写入Power Automate表达式
不要把@{items('Apply_to_each')?['CompanyOrAccount']}这类表达式直接写入HTML变量,Power Automate只会在首次解析步骤时处理表达式,存储为变量后不会再解析其中的表达式内容。必须通过replace函数将动态内容嵌入到HTML字符串中。
内容的提问来源于stack exchange,提问作者ceast3
相关产品推荐
相关产品推荐

