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

Node.js Serverless Lambda环境下AWS SES发邮件遇端点请求超时

解决Lambda中使用AWS SES发送邮件时的端点超时问题

可能的原因及对应解决方案

1. Lambda网络配置限制(最常见原因)

如果你的Lambda函数部署在私有VPC中,默认无法直接访问AWS SES这类公共服务端点。本地运行正常是因为本地网络可直接访问互联网,而Lambda在VPC私有子网内没有出站访问权限。

解决方法:

  • 给Lambda所在私有子网配置NAT网关,让Lambda通过NAT网关访问互联网(进而访问SES公共端点)。
  • 或者在VPC中创建SES的VPC端点(仅支持部分区域),直接在VPC内访问SES服务,无需走互联网。

2. Lambda超时时间设置过短

Lambda默认超时时间为3秒,SES发送邮件的请求可能需要更长处理时间,直接触发超时。

解决方法:

  • 进入Lambda控制台,找到目标函数,在「配置」→「常规配置」中,将超时时间调整为10秒或更长(比如15秒)。

3. Promise使用错误导致异步阻塞

你的sendMails函数中,Promise写法存在问题:混用async executor与回调函数,会导致异步流程无法正确触发,可能引发阻塞。

修改后的sendMails函数(改用AWS SDK原生Promise版本):

async function sendMails(data) {
    const params = {
        Destination: {
            ToAddresses: [data.to],
        },
        Message: {
            Body: {
                Html: {
                    Charset: 'UTF-8',
                    Data: data.text,
                },
            },
            Subject: { Charset: 'UTF-8', Data: data.subject },
        },
        Source: '*******', // 确保此处为已验证的SES发件地址
    };
    const SES1 = new AWS.SES({ region: "us-east-1" });
    try {
        await SES1.sendEmail(params).promise();
        return [{ message: "Mail Send Successfully", StatusCode: 1 }];
    } catch (err) {
        return [{ message: err.message, StatusCode: 0 }];
    }
}

4. 区域配置不一致

全局AWS配置区域为us-east-2,但SES实例使用us-east-1,虽不直接导致超时,但可能引发潜在服务访问问题。建议统一区域,或确保SES所在区域的端点可正常访问。

5. IAM角色权限缺失

确保Lambda执行角色拥有ses:SendEmail或ses:SendRawEmail权限,示例权限策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "ses:SendEmail",
            "Resource": "*"
        }
    ]
}

验证步骤

  1. 优先调整Lambda超时时间,测试是否仍超时。
  2. 检查Lambda是否在私有VPC中,若在则配置NAT网关或VPC端点。
  3. 修改sendMails函数的Promise写法,避免回调与await混用。
  4. 确认IAM角色权限正确,且SES发件地址已完成验证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 21:32:59