AWS JS SDK v2调用sendCustomVerificationEmail提示不是函数问题咨询
问题解决方案
- 原因1:AWS SDK v2版本过低
sendCustomVerificationEmail是较高版本的AWS SDK v2才支持的API,如果你本地安装的aws-sdk版本低于2.700.0,就会出现方法不存在的报错。
解决方法:执行命令更新到最新的v2版本:
npm uninstall aws-sdk && npm install aws-sdk@latest
安装完成后检查package.json中aws-sdk的版本号为2.x.x即可。
原因2:错误使用AWS SDK v3
如果你安装的是AWS SDK v3(版本号为3.x.x),其API调用方式和v2完全不同,你当前的v2写法自然无法识别对应方法。
解决方法:要么切换回v2版本使用现有代码,要么调整代码适配v3的调用逻辑。优化建议:实例化SES时指定API版本
为了避免API兼容问题,实例化SES时可以显式指定稳定的API版本,降低适配风险。
修改后可正常运行的完整代码示例
const express = require("express"); const aws = require("aws-sdk"); require("dotenv").config(); const app = express(); aws.config.update({ accessKeyId: process.env.AWS_ACCESS_KEY_ID, secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, region: process.env.region }); // 实例化SES时指定API版本 const ses = new aws.SES({ apiVersion: '2010-12-01' }); // 邮箱验证接口 app.get("/verify/:email", (req, res) => { const params = { EmailAddress: req.params.email, TemplateName: "SampleTemplate" // 确认模板已在对应区域的SES控制台创建完成 }; ses.sendCustomVerificationEmail(params, (err, data) => { if (err) { return res.status(500).send(err); } res.send(data); }); }); // 启动服务 const server = app.listen(8000, () => { const port = server.address().port; console.log("AWS SES example app listening on port", port); });
额外注意:你创建的自定义验证模板必须和代码中配置的AWS区域一致,且发件邮箱/域名已经完成SES的身份验证,否则后续调用会返回权限/资源不存在类报错。
内容的提问来源于stack exchange,提问作者Neenus
相关产品推荐
相关产品推荐

