AWS SES发送带附件邮件在Gmail/Windows端不显示问题排查
问题根源:MIME邮件格式错误,与SES配置/临时目录无关
你的问题既不是Amazon SES配置问题,也不是临时目录使用导致的,核心是手动构造的MIME邮件头格式不符合标准,导致Gmail和Windows邮件客户端无法正确解析附件。具体问题点如下:
- Content-Disposition格式错误:
filename参数属于Content-Disposition的属性,需放在该行内,且字段分号后必须加空格 - Content-Transfer-Encoding行冗余:该行末尾错误添加了
filename="folder.zip",该属性不属于编码字段 - Base64输出换行干扰:默认
base64命令会每76字符换行,这些换行符会破坏MIME编码块,导致客户端无法解码 - 变量拼接风险:直接用
echo拼接内容,若变量含空格、引号等特殊字符会直接破坏JSON或MIME格式
修复后的脚本
#!/bin/bash tmpSizeDir=$(mktemp -d)/ trap "rm -rf $tmpSizeDir" EXIT # 复制文件到临时目录(保留原有逻辑) # copying files into tmpSizeDir # 打包时加-j参数可忽略路径,直接将文件放入zip根目录 zip -j folder.zip "${tmpSizeDir}"/* # 用printf安全构造邮件内容,避免特殊字符破坏格式 printf '{"Data": "From: %s\nTo: %s\nSubject: %s\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"NextPart\"\n\n--NextPart\nContent-Type: text/plain\n\n%s\n\n--NextPart\nContent-Type: application/zip\nContent-Disposition: attachment; filename=\"folder.zip\"\nContent-Transfer-Encoding: base64\n\n%s\n--NextPart--"}' \ "$MAIL_ACCOUNT" \ "$recipient" \ "$MAIL_SUBJECT" \ "$MAIL_BODY" \ "$(base64 -w 0 folder.zip)" > message.json aws ses send-raw-email --raw-message file://message.json # 清理临时zip文件 rm -f folder.zip
关键修复说明
- 规范MIME头结构:调整
filename属性位置,修正字段分隔格式 - Base64无换行输出:添加
-w 0参数让编码输出为连续字符串,避免换行干扰解码 - 安全变量拼接:用
printf替代echo,避免特殊字符破坏内容格式 - 可选路径优化:zip命令加
-j参数,避免客户端看到临时目录的冗余路径
内容的提问来源于stack exchange,提问作者Bernadette
相关产品推荐
相关产品推荐

