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

Node.js调用AWS SES发邮件报Missing credentials in config错误

Missing credentials in config报错的核心触发原因是AWS SDK凭证配置字段名拼写错误:代码中配置项写的是accessSecretKey,但AWS JavaScript SDK(v2/v3版本均是)识别的秘密访问密钥字段名为secretAccessKey,SDK读取配置时找不到对应密钥字段,就会抛出凭证缺失的错误。
除此之外原有代码还存在全局配置可能不生效、async/await和Promise链式调用混用的问题,会进一步提升配置不生效的概率。


修正方案

1. 修正配置字段+实例初始化逻辑

不要依赖AWS.config.update全局配置,初始化SES服务实例时直接传入配置项,同时修正字段名错误,参考代码如下:

const AWS = require('aws-sdk');

exports.sendEmail = async () => {
  const SESConfig = {
    accessKeyId: "你的AWS访问密钥ID",
    secretAccessKey: "你的AWS秘密访问密钥", // 注意:原代码的accessSecretKey是错误字段名
    region: "us-east-1",
    apiVersion: "2010-12-01"
  }

  const sendParams = {
    Destination: {
      ToAddresses: ["xxx@xxx.xxx"]
    },
    Message: {
      Body: {
        Text: {
          Charset: "UTF-8",
          Data: "你的邮件正文内容"
        }
      },
      Subject: {
        Charset: "UTF-8",
        Data: "Test email"
      }
    },
    Source: "xxx@xxx.xxx" // 已验证的发件人邮箱
  };

  try {
    // 初始化实例时直接传入配置,避免全局配置异步加载不生效
    const sesClient = new AWS.SES(SESConfig);
    const result = await sesClient.sendEmail(sendParams).promise();
    console.log('邮件发送成功,MessageId:', result.MessageId);
    return result;
  } catch (err) {
    console.error('邮件发送失败:', err, err.stack);
    throw err;
  }
};

2. 其他排查项(修正字段后仍报错时按顺序检查)

  • 确认使用的AK/SK为有效状态:密钥没有被删除、禁用,且绑定的IAM身份策略已授予ses:SendEmail、ses:SendRawEmail权限,同时确认你的SES账号如果还在沙箱模式下,收件人也必须是已验证的邮箱(当前用同个已验证邮箱作为收发件人符合沙箱要求)。
  • 本地开发环境推荐不用硬编码凭证:在本地~/.aws/credentials文件配置好AK/SK和区域,然后设置系统环境变量AWS_SDK_LOAD_CONFIG=1,SDK会自动读取本地凭证文件,代码里不需要写任何密钥配置,避免硬编码泄漏风险。
  • 部署到AWS云资源(Lambda/EC2/ECS/EKS)时,不要硬编码AK/SK:直接给运行资源绑定对应SES权限的IAM角色,SDK会自动获取临时安全凭证,无需手动配置任何密钥字段。
  • 如果使用的是AWS SDK v3版本,需要安装@aws-sdk/client-ses依赖包,初始化方式和v2有差异,但凭证字段名依然是secretAccessKey,不存在accessSecretKey这个配置字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 23:33:29