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

如何通过PowerShell发送带附件的AWS SES RawEmail?

通过AWS SES发送带CSV附件的RawEmail(PowerShell)

问题分析

你直接将CSV文件路径传给Send-SES2Email的-Raw_Data参数,导致收到空邮件。原因是-Raw_Data要求传入完整的MIME格式邮件内容,而非单独的文件路径或原始文件内容。CSV本身不是合法的MIME邮件结构,SES无法解析为带附件的邮件,因此显示为空。

解决步骤

要发送带附件的邮件,必须手动构建包含邮件头、正文、附件的MIME多部分邮件,再将其传入-Raw_Data。

1. 读取并编码CSV文件

先把CSV文件内容转为Base64编码(符合MIME附件的传输要求):

$csvFilePath = ".\Inventory.csv"
# 读取文件字节并转为带换行的Base64字符串
$csvBytes = [System.IO.File]::ReadAllBytes($csvFilePath)
$csvBase64 = [System.Convert]::ToBase64String($csvBytes, [System.Base64FormattingOptions]::InsertLineBreaks)

2. 生成唯一MIME边界符

边界符用于分隔邮件的正文和附件部分,必须唯一:

$mimeBoundary = "----=`$([System.Guid]::NewGuid().ToString())"

3. 构建完整MIME邮件内容

按照MIME标准拼接邮件头、正文和附件:

$mimeEmail = @"
From: jsmith@schwarma.com
To: jsmith@schwarma.com
Subject: 库存清单附件
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="$mimeBoundary"

--$mimeBoundary
Content-Type: text/plain; charset="UTF-8"

这是库存清单的CSV附件,请查收。

--$mimeBoundary
Content-Type: text/csv; name="Inventory.csv"
Content-Disposition: attachment; filename="Inventory.csv"
Content-Transfer-Encoding: base64

$csvBase64
--$mimeBoundary--
"@

4. 发送MIME格式邮件

将MIME内容转为字节数组后传入Send-SES2Email:

$rawEmailBytes = [System.Text.Encoding]::UTF8.GetBytes($mimeEmail)
Send-SES2Email -FromEmailAddress jsmith@schwarma.com -Destination_ToAddress jsmith@schwarma.com -Raw_Data $rawEmailBytes

关键注意事项

  • 如果Send-SES2Email的-Raw_Data仅支持文件路径,可先将$mimeEmail写入临时文件,再传入临时文件路径。
  • 边界符不能出现在邮件正文或附件内容中,用GUID生成可避免冲突。
  • 附件的Content-Type需匹配文件类型(CSV对应text/csv),Content-Disposition明确标记为附件并指定文件名。
  • 用Base64编码附件内容,防止特殊字符或二进制数据导致邮件解析异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 06:06:45