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

AWS SES sendRawEmail调用卡顿超时问题求助(Node.js)

解决AWS SES sendRawEmail调用超时问题

看起来你遇到的是AWS SES sendRawEmail 调用超时的典型问题——之前能成功发送,后来突然卡顿超时,大概率不是代码基础逻辑的问题,而是环境或配置层面的坑。我整理了几个高概率的排查方向和解决方案,你可以逐一试试:

1. 检查AWS SDK版本与运行时兼容性

你代码里直接用require('aws-sdk'),如果是在Lambda环境运行,默认的SDK版本可能比较老旧,和当前Node.js运行时(比如Node.js 18+)存在兼容性问题,导致请求卡住。

  • 解决方案:
    • 升级项目中的AWS SDK到最新稳定版,执行命令:
      npm install aws-sdk@latest --save
      
    • 如果是Lambda函数,建议把SDK打包进部署包,不要依赖Lambda默认的旧版本,重新部署后再测试。

2. 排查Lambda的VPC网络配置

如果你的Lambda函数配置了VPC,那SES的API请求可能无法正常走出VPC,直接导致超时:

  • SES是AWS托管的公网服务,Lambda在VPC内默认无法直接访问SES的公网端点,除非你的VPC配置了NAT网关(私有子网场景)或互联网网关(公有子网),且安全组允许出站HTTPS请求。
  • 解决方案:
    • 若不需要Lambda在VPC内访问其他资源,直接移除Lambda的VPC配置,让它回到默认公共网络环境,就能正常调用SES了。
    • 若必须保留VPC,需确保VPC有可用的NAT/互联网网关,同时安全组出站规则允许443端口的HTTPS请求到SES服务端点。

3. 检查SES的发送限制与账户状态

SES有严格的发送配额和速率限制,一旦发送量超限或账户触发合规预警,可能会导致请求被限流甚至挂起:

  • 登录AWS控制台进入SES服务,查看发送统计和账户状态:
    • 确认是否达到24小时发送配额上限
    • 检查是否有退信/投诉率过高的情况,这会直接限制你的发送权限
  • 如果是配额问题,可以申请提高发送限额;如果是合规问题,先处理退信和投诉,再联系AWS支持解除限制。

4. 优化sendRawEmail的请求格式

你手动拼接的原始邮件格式可能存在隐性语法错误,一开始侥幸通过,但后续SES的校验逻辑变严格后,就会导致请求卡住:

  • 原始邮件必须严格遵循RFC 5322标准,比如From字段的格式、换行必须用\r\n而非\n,否则SES可能在解析时无限等待。
  • 建议用成熟的邮件库生成原始内容,比如nodemailer配合nodemailer-ses-transport,避免手动拼接的格式问题:
    const nodemailer = require('nodemailer');
    const sesTransport = require('nodemailer-ses-transport');
    
    const transporter = nodemailer.createTransport(sesTransport({
        accessKeyId: 'YOUR_ACCESS_KEY',
        secretAccessKey: 'YOUR_SECRET_KEY',
        region: 'YOUR_REGION'
    }));
    
    transporter.sendMail({
        from: "'Service Monitor' <your-from-email@example.com>",
        to: 'recipient@example.com',
        subject: 'Status Update',
        text: JSON.stringify(statusJSON)
    }, (error, info) => {
        if (error) {
            console.error('Send error:', error);
        } else {
            console.log('Email sent:', info);
        }
    });
    

5. 给SES客户端显式设置请求超时

你已经增加了Lambda的超时时间,但可能没给AWS SDK的请求单独设置超时,导致请求无限等待:

  • 初始化SES客户端时,显式设置请求超时,比Lambda的60秒短,提前触发错误便于排查:
    var ses = new aws.SES({
        region: 'YOUR_REGION',
        httpOptions: {
            timeout: 30000 // 30秒超时
        }
    });
    

内容的提问来源于stack exchange,提问作者Abhijeet Kale

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:57:50