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

如何使用Golang AWS SES-v2发送带PDF附件的邮件?

使用AWS SES-v2发送带PDF附件的邮件

在AWS SES-v2的SendEmail API中,仅通过Content.Raw类型支持发送带附件的邮件——你之前使用的Content.Simple(纯文本/HTML邮件)没有提供附件字段,无法直接添加附件。不过除了直接构造Raw内容,还有两种具体实现思路:

1. 构造MIME格式的Raw邮件(官方推荐)

这是最标准的实现方式,你需要手动构建符合MIME规范的多部分邮件内容,包含正文、PDF附件等模块,再将其传入Content.Raw.Data。

示例代码:

import (
    "context"
    "encoding/base64"
    "mime/multipart"
    "net/textproto"
    "os"
    "strings"

    "github.com/aws/aws-sdk-go-v2/aws"
    "github.com/aws/aws-sdk-go-v2/service/sesv2"
    "github.com/aws/aws-sdk-go-v2/service/sesv2/types"
)

func sendEmailWithPDFAttachment(ctx context.Context, client *sesv2.Client) error {
    // 读取本地PDF文件
    pdfBytes, err := os.ReadFile("invoice.pdf")
    if err != nil {
        return err
    }

    // 构建MIME多部分邮件
    var mailContent strings.Builder
    multipartWriter := multipart.NewWriter(&mailContent)
    defer multipartWriter.Close()

    // 添加HTML正文
    htmlHeader := textproto.MIMEHeader{
        "Content-Type": []string{"text/html; charset=utf-8"},
    }
    htmlPart, err := multipartWriter.CreatePart(htmlHeader)
    if err != nil {
        return err
    }
    htmlBody := "<p>这是邮件正文,附件为PDF文件</p>"
    _, _ = htmlPart.Write([]byte(htmlBody))

    // 添加PDF附件
    pdfHeader := textproto.MIMEHeader{
        "Content-Type":        []string{"application/pdf"},
        "Content-Disposition": []string{`attachment; filename="invoice.pdf"`},
        "Content-Transfer-Encoding": []string{"base64"},
    }
    pdfPart, err := multipartWriter.CreatePart(pdfHeader)
    if err != nil {
        return err
    }
    base64Encoder := base64.NewEncoder(base64.StdEncoding, pdfPart)
    defer base64Encoder.Close()
    _, _ = base64Encoder.Write(pdfBytes)

    // 构造SendEmail请求参数
    sendInput := &sesv2.SendEmailInput{
        Destination: &types.Destination{
            ToAddresses: []string{"receiver@example.com"},
        },
        Content: &types.EmailContent{
            Raw: &types.RawMessage{
                Data: mailContent.Bytes(),
            },
        },
        FromEmailAddress: aws.String("sender@yourdomain.com"),
    }

    // 调用SES-v2发送邮件
    _, err = client.SendEmail(ctx, sendInput)
    return err
}

2. 模板邮件+Raw内容(特殊场景)

如果需要使用SES的模板功能(动态替换内容)并添加附件,仍需将模板渲染后的正文与附件打包成MIME格式的Raw内容——本质上还是基于Content.Raw的实现,没有脱离Raw的范畴。

关键说明

SES-v2的Content.Simple类型仅支持纯文本/HTML正文,没有设计附件字段,因此无法直接通过该类型实现带附件的邮件发送。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 17:53:15