如何在Macro Scheduler(.scp)宏中将图片编码为Base64字符串?
解决Macro Scheduler中图片转Base64并内嵌邮件的问题
你遇到的核心问题是直接将图片路径传入Base64函数无法获取正确的编码结果——因为Macro Scheduler的Base64处理函数需要的是文件的二进制数据,而不是文件路径。下面是完整的解决方案步骤和代码示例:
步骤1:读取图片的二进制数据
首先必须用ReadFile命令读取图片文件的原始二进制内容,一定要加上BIN参数,否则会把图片当成文本文件读取,导致后续编码完全错误。
步骤2:将二进制数据转为Base64字符串
用Base64Encode命令把读取到的二进制数据转换成符合要求的Base64编码字符串。
步骤3:嵌入到HTML邮件内容中
把生成的Base64字符串放到HTML的<img>标签的src属性里,格式为data:image/[图片格式];base64,[Base64字符串](注意替换[图片格式]为实际的png/jpg等)。
完整代码示例
// 定义图片的绝对路径,替换成你的图片路径 Let>IMAGE_PATH=C:\path\to\your\image.png // 读取图片二进制数据 ReadFile>%IMAGE_PATH%,BIN,imageBinaryData // 转换为Base64编码 Base64Encode>imageBinaryData,imageBase64 // 构建带内嵌图片的HTML邮件内容 Let>emailHTML=<!DOCTYPE html> Let>emailHTML=%emailHTML%<html> Let>emailHTML=%emailHTML% <body> Let>emailHTML=%emailHTML% <h3>这是一封带内嵌图片的邮件</h3> Let>emailHTML=%emailHTML% <p>下方是内嵌的图片:</p> Let>emailHTML=%emailHTML% <img src="data:image/png;base64,%imageBase64%" alt="内嵌图片" width="300"> Let>emailHTML=%emailHTML% </body> Let>emailHTML=%emailHTML%</html> // 发送HTML格式邮件(根据你的邮件配置调整参数) SendMail>recipient@example.com,sender@example.com,带内嵌图片的测试邮件,,,%emailHTML%,,HTML
关键注意事项
- 必须加
BIN参数:ReadFile命令的BIN参数是读取二进制文件的核心,漏掉它会导致读取的内容被错误解析为文本,Base64编码必然失效。 - 图片格式要匹配:
data:image/png;base64中的png要和你的图片实际格式一致(比如jpg就改成data:image/jpeg;base64)。 - 使用绝对路径:尽量用图片的绝对路径,避免因Macro Scheduler工作目录问题导致找不到文件。
内容的提问来源于stack exchange,提问作者KKar
相关产品推荐
相关产品推荐

