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

使用Nodemailer SES Transport SDK时遇Unexpected token '.'错误求助

Nodemailer集成AWS SES SDK报错分析与修复方案

错误原因分析

  • Node.js版本过低:SyntaxError: Unexpected token '.'最常见诱因是代码使用了低版本Node.js不支持的新语法(如可选链?.、空值合并??)。AWS SES SDK v3及以上版本依赖这些特性,若你的Node.js版本低于14.x,必然触发该错误。
  • 依赖版本不兼容:Nodemailer与SES SDK版本不匹配,比如用了高版本SES SDK但搭配的Nodemailer SES传输适配器版本老旧,导致语法冲突。
  • 代码语法误用:手动编写的集成代码中,不小心使用了当前环境不支持的新语法。

修复方案

1. 升级Node.js版本

先检查当前Node.js版本:

node -v

若版本低于14.x,升级至14.x及以上的LTS版本(推荐16.x或18.x),确保兼容SES SDK v3的语法要求。

2. 调整依赖版本(不升级Node.js的备选方案)

降级SES SDK到v2版本(不依赖新语法),同时搭配适配的Nodemailer传输包:

  • 修改package.json依赖:
    {
      "dependencies": {
        "nodemailer": "^6.9.0",
        "nodemailer-ses-transport": "^1.5.1",
        "aws-sdk": "^2.1300.0"
      }
    }
    
  • 重新安装依赖:
    npm install
    

3. 修正集成代码

场景一:使用SES SDK v2 + nodemailer-ses-transport

const nodemailer = require('nodemailer');
const sesTransport = require('nodemailer-ses-transport');
const AWS = require('aws-sdk');

// 配置AWS SES
AWS.config.update({
  accessKeyId: '你的AWS Access Key',
  secretAccessKey: '你的AWS Secret Key',
  region: '你的SES区域(如us-east-1)'
});

// 创建SES传输器
const transporter = nodemailer.createTransport(sesTransport({
  ses: new AWS.SES({
    apiVersion: '2010-12-01'
  })
}));

// 批量发送邮件示例
async function sendBatchEmails(emails) {
  const promises = emails.map(email => transporter.sendMail({
    from: '已在SES验证的发件邮箱',
    to: email.to,
    subject: email.subject,
    text: email.content
  }));
  await Promise.all(promises);
}

场景二:使用SES SDK v3(需Node.js >=14.x)

const nodemailer = require('nodemailer');
const { SESClient } = require('@aws-sdk/client-ses');
const { awsSesNodemailer } = require('nodemailer-ses-v2-transport');

// 创建SES客户端
const sesClient = new SESClient({
  credentials: {
    accessKeyId: '你的AWS Access Key',
    secretAccessKey: '你的AWS Secret Key'
  },
  region: '你的SES区域(如us-east-1)'
});

// 创建传输器
const transporter = nodemailer.createTransport(awsSesNodemailer({
  ses: sesClient
}));

// 批量发送邮件(控制并发适配SES每秒15封限制)
async function sendBatchEmails(emails) {
  const batchSize = 15;
  for (let i = 0; i < emails.length; i += batchSize) {
    const batch = emails.slice(i, i + batchSize);
    const promises = batch.map(email => transporter.sendMail({
      from: '已在SES验证的发件邮箱',
      to: email.to,
      subject: email.subject,
      text: email.content
    }));
    await Promise.all(promises);
    // 跨批次延迟,避免触发速率限制
    if (i + batchSize < emails.length) {
      await new Promise(resolve => setTimeout(resolve, 1000));
    }
  }
}

4. 验证环境配置

  • 确认AWS账号已开通SES服务,发件邮箱/域名完成验证
  • 检查AWS权限,确保所用Access Key拥有ses:SendEmail和ses:SendRawEmail权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 02:55:24