Azure Logic Apps:如何从存储Blob URL获取原样格式的邮件内容
解决Azure Logic Apps存储带图片邮件至Blob后仅显示纯HTML的问题
核心问题原因
邮件中的内嵌图片通常以cid:格式引用(比如<img src="cid:logo.png">),直接存储原始HTML到Blob时,cid路径无法在Blob的HTTP访问环境中解析,导致图片无法加载,看起来像纯HTML内容。
具体解决方案
方案1:处理内嵌图片为Base64编码(网页形式显示完整邮件)
- 获取邮件完整HTML与附件信息
- 使用Office 365 Outlook的
Get Email (V2)操作,获取邮件的Body HTML内容,同时拿到所有附件集合。
- 使用Office 365 Outlook的
- 初始化变量存储处理后的HTML
- 添加
Initialize variable操作,变量类型选String,初始值设为邮件的Body HTML字段。
- 添加
- 遍历替换内嵌图片的cid引用
- 添加
Apply to each操作,遍历邮件的Attachments集合:- 加
Condition判断,检查当前附件的IsInline属性是否为true(确认是内嵌图片)。 - 条件满足时,执行
Set variable操作,把变量中所有cid:[当前附件Name]的字符串,替换为data:[当前附件ContentType];base64,[当前附件ContentBytes]。
- 加
- 添加
- 存储处理后的HTML到Blob
- 执行
Create Blob操作:- Blob内容选择刚才处理好的变量。
- 内容类型必须设为
text/html。 - Blob名称建议带上时间戳,比如
email-@{utcNow('yyyyMMddHHmmss')}.html。
- 执行
方案2:存储完整邮件MIME内容(邮件客户端打开原样)
如果需要保存完全原始的邮件格式(包括邮件头、所有附件和内嵌资源),可以直接存储邮件的MIME Content字段:
- 在
Get Email (V2)操作中,开启“显示高级选项”,找到MIME Content字段。 - 执行
Create Blob操作:- Blob内容设为
MIME Content。 - 内容类型设为
message/rfc822。 - 下载Blob文件后,用Outlook等邮件客户端打开即可看到完整原样邮件。
- Blob内容设为
注意事项
- 不要直接使用邮件的
Body纯文本字段,必须选择Body HTML才能保留格式。 - 替换cid时要确保附件的
Name和HTML中的cid名称完全匹配(注意大小写)。
内容的提问来源于stack exchange,提问作者Chand Jogani
相关产品推荐
相关产品推荐

