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

使用AWS SDK实现AWS SES订阅管理:退订链接未填充问题求助

AWS SES {{amazonSESUnsubscribeUrl}} 未自动填充问题排查与解决

核心问题:API版本与参数位置错误

你当前使用的是SES v1的SendEmailCommand(来自@aws-sdk/client-ses),但{{amazonSESUnsubscribeUrl}}自动替换功能仅支持SES v2 API(@aws-sdk/client-sesv2),且你错误地将ListManagementOptions放在了Message对象内部,同时自定义的邮件头干扰了自动生成逻辑。

具体修复步骤

1. 切换到SES v2 SDK

安装SES v2客户端依赖:

npm install @aws-sdk/client-sesv2

2. 重构代码,修正参数结构

替换原有代码为SES v2实现,注意ListManagementOptions需作为顶层参数传入,移除错误的邮件头配置:

import { SESv2Client, SendEmailCommand } from "@aws-sdk/client-sesv2";
const sesClient = new SESv2Client({ region: "us-east-1" });

export const handler = async (event, context) => {
  const params = {
    FromEmailAddress: 'support@validsource.com', // 已验证的发件地址
    Destination: {
      ToAddresses: ['valid-address@gmail.com']
    },
    Content: {
      Simple: {
        Subject: {
          Data: 'Test HTML Email from AWS SES'
        },
        Body: {
          Html: {
            Data: '<h1>Welcome</h1><p>This is a test HTML email sent using AWS SES from a Lambda function. Click <a href="{{amazonSESUnsubscribeUrl}}">here</a> to unsubscribe.</p>'
          }
        }
      }
    },
    // 正确放置ListManagementOptions到顶层
    ListManagementOptions: {
      ContactListName: 'MarketingEmails',
      TopicName: 'Topic'
    }
  };

  try {
    const data = await sesClient.send(new SendEmailCommand(params));
    console.log("Email sent!", data);
    return data;
  } catch (err) {
    console.error("Failed to send email.", err);
    return err;
  }
};

3. 关键验证点

  • 收件人必须在目标联系列表中:SES仅对已存在于指定联系列表的收件人填充取消订阅链接,若收件人不在列表中,链接会显示为空。可通过aws sesv2 create-contact命令或SES控制台添加收件人。
  • 移除自定义取消订阅头:SES v2会自动生成标准的List-Unsubscribe和List-Unsubscribe-Post头,自定义头会覆盖自动生成逻辑,需删除原代码中Headers数组的相关配置。
  • 确认Lambda权限:确保Lambda执行角色拥有sesv2:SendEmail权限,策略示例:
{
  "Effect": "Allow",
  "Action": ["sesv2:SendEmail"],
  "Resource": "*"
}

4. 额外检查步骤

  • 确认联系列表存在:执行aws sesv2 get-contact-list --contact-list-name MarketingEmails验证列表有效性。
  • 确认收件人已在列表中:执行aws sesv2 get-contact --contact-list-name MarketingEmails --email-address valid-address@gmail.com验证收件人状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 13:54:55