You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash脚本中为Amazon SES邮件添加临时目录附件?

如何将临时目录中的文件作为附件通过Amazon SES发送

Amazon SES的send-email命令不支持直接添加附件,要发送带附件的邮件,你需要使用send-raw-email命令,并构造符合MIME规范的原始邮件内容。以下是修改后的完整流程:


步骤1:打包临时目录中的文件

SES无法直接发送目录,先把临时目录里的两个文件打包成ZIP压缩包:

# 创建临时目录
tmpSizeDir=$(mktemp -d)/
trap "rm -rf $tmpSizeDir" EXIT
cp -vf "${DIRECTORY}${FILE_NAME}.csv" $tmpSizeDir
cp -vf "${DIRECTORY}${FILE_NAME}.PDF" $tmpSizeDir

# 打包目录内文件为ZIP包(避免包含临时目录本身的层级)
cd "$tmpSizeDir" && zip -r "${FILE_NAME}_attachments.zip" ./*

步骤2:构造MIME格式的原始邮件

生成包含主题、正文和附件的MIME邮件内容,保存为临时文件:

# 定义MIME边界(确保这个字符串在邮件内容中唯一)
MIME_BOUNDARY="----SESAttachmentBoundary$(date +%Y%m%d%H%M%S)"

# 生成原始邮件内容
cat > "${tmpSizeDir}raw_email.txt" << EOF
From: $MAIL_SENDER
To: $(cat tmpDestinationDir | tr '\n' ',')
Subject: $subject
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="$MIME_BOUNDARY"

--$MIME_BOUNDARY
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit

$body

--$MIME_BOUNDARY
Content-Type: application/zip
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="${FILE_NAME}_attachments.zip"

$(base64 -w 0 "${tmpSizeDir}${FILE_NAME}_attachments.zip")

--$MIME_BOUNDARY--
EOF

步骤3:使用SES发送原始邮件

用send-raw-email命令发送构造好的原始邮件:

aws ses send-raw-email --from $MAIL_SENDER --raw-message fileb://"${tmpSizeDir}raw_email.txt"

关键说明:

  • send-raw-email允许你完全控制邮件的MIME结构,这是添加附件的唯一方式。
  • MIME边界必须唯一,这里用时间戳确保不会和邮件内容冲突。
  • 附件需要用Base64编码,符合MIME规范要求。
  • 收件人列表需要从tmpDestinationDir文件中读取并格式化为逗号分隔的字符串,适配MIME的To头格式。

内容的提问来源于stack exchange,提问作者Bernadette

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 04:01:25