如何在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
相关产品推荐
相关产品推荐

