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

