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

AWS Lambda部署后SNS触发运行报ValidationException错误求助

报错原因

这个报错是AWS SES接口抛出的参数校验错误,触发原因是调用邮件发送接口时传入的收件人列表为空,对应代码里有三个核心问题:

  • SNS事件的Message字段默认是JSON序列化字符串,你没有做解析直接当作对象访问属性,导致clientEmail取值为undefined
  • mailOptions配置中的to字段错误加了单引号,把变量变成了固定字符串clientEmail,同时缺少闭合单引号存在语法问题
  • 没有对入参、邮箱地址做非空校验,空的收件人地址传给SES后直接触发参数校验失败
修复方案

替换为如下修改后的代码即可:

const pug = require('pug');
const {newTransporter} = require('./handlers/emailTransporter');

exports.handler = async (event, context) => {
    // 解析SNS消息字符串为对象
    const message = JSON.parse(event.Records[0].Sns.Message);
    
    // 校验SNS消息结构合法性
    if (!message?.mail?.commonHeaders) {
        console.error('SNS消息结构异常:', JSON.stringify(message));
        return;
    }

    const mailAddressObj = {
        // replyTo为数组格式,取第一个元素
        'userEmail' : message.mail.commonHeaders.replyTo?.[0],
        'clientEmail' : message.mail.commonHeaders.to?.[0],
    }
    const {userEmail, clientEmail} = mailAddressObj;

    // 校验收件人地址非空
    if (!clientEmail) {
        console.error('收件人地址为空:', JSON.stringify(mailAddressObj));
        return;
    }

    const html = pug.compileFile('./views/bounceNotificationEmail.pug');
    const mailOptions = {
        from: 'sendingEmail@email.com',
        // 直接使用变量,不要加单引号
        to: clientEmail,
        subject: `Subject Header`,
        html: html({
            client_email: clientEmail
        }),
      };

    try {
        let transporter = await newTransporter();
        let info = await transporter.sendMail(mailOptions);
        console.log("邮件发送成功,messageId: %s", info.messageId);
        return info;
    }
    catch (e) {
        console.error('发送邮件失败: ', e);
        // 按需打开注释配置重试
        // throw e;
    }
};
额外注意事项
  • 如果你的AWS SES还处于沙箱环境,需要先在SES控制台验证发件人和收件人邮箱地址才能正常发送
  • 确认Lambda执行角色已配置ses:SendEmail、ses:SendRawEmail权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 20:06:02