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

如何使用AWS SDK for JavaScript (v3)通过Amazon SES发送欢迎邮件

迁移AWS SES代码从SDK v2到v3实现欢迎邮件发送

1. 安装v3依赖包

AWS SDK v3采用模块化设计,无需安装整个SDK,只需安装SES相关的客户端包:

npm install @aws-sdk/client-ses
# 若需自定义凭证提供逻辑可选,默认会自动读取环境变量/IAM角色等凭证源
npm install @aws-sdk/credential-provider-node

2. 重构代码

以下是替换v2代码后的完整实现,包含客户端配置、邮件发送逻辑,保留原函数的数据库交互入口:

import { Db } from 'mongodb';
import { SESClient, SendEmailCommand, SendEmailCommandInput } from '@aws-sdk/client-ses';

export async function sendWelcomeMessages({ db }: { db: Db }): Promise<void> {
  // 实例化SES客户端(v3废弃全局配置模式)
  const sesClient = new SESClient({
    region: process.env.AWS_REGION,
    // 若环境变量已配置AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY,无需显式传入
    // credentials: {
    //   accessKeyId: process.env.AWS_ACCESS_KEY_ID!,
    //   secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!
    // }
  });

  // 示例:从数据库获取未发送欢迎邮件的新用户(替换为你的实际业务逻辑)
  const newUsers = await db.collection('users').find({ welcomeEmailSent: false }).toArray();

  for (const user of newUsers) {
    // 构造邮件发送参数
    const params: SendEmailCommandInput = {
      Source: '你的发件邮箱 <your-sender@example.com>', // 需在SES控制台完成邮箱验证
      Destination: {
        ToAddresses: [user.email]
      },
      Message: {
        Subject: {
          Data: '欢迎加入我们的平台!',
          Charset: 'UTF-8'
        },
        Body: {
          Html: {
            Data: `<h1>你好,${user.name}!</h1><p>感谢注册我们的服务,期待你的使用。</p>`,
            Charset: 'UTF-8'
          },
          Text: {
            Data: `你好,${user.name}!感谢注册我们的服务,期待你的使用。`,
            Charset: 'UTF-8'
          }
        }
      }
    };

    // 执行邮件发送
    try {
      const response = await sesClient.send(new SendEmailCommand(params));
      console.log(`邮件已发送至${user.email},消息ID:${response.MessageId}`);
      // 更新数据库标记邮件已发送
      await db.collection('users').updateOne({ _id: user._id }, { $set: { welcomeEmailSent: true } });
    } catch (err) {
      console.error(`发送邮件至${user.email}失败:`, err);
    }
  }
}

关键变化说明

  • 模块化导入:仅导入所需的SESClient和SendEmailCommand,减少打包体积
  • 客户端实例化:废弃v2的全局AWS.config.update,改为在创建SESClient时传入配置,实现配置隔离
  • 命令调用模式:v3采用命令式调用,需构造对应业务的SendEmailCommand,再通过客户端send方法执行
  • 凭证自动处理:默认情况下SDK会自动从环境变量、IAM角色、本地共享凭证文件等位置读取凭证,推荐在AWS服务(如Lambda、ECS)上运行时使用IAM角色,避免硬编码凭证

内容的提问来源于stack exchange,提问作者János

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 04:43:17