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

Node.js AWS Lambda(v16)根据异步邮件发送结果返回HTTP响应方案

AWS Lambda(Node.js v16) 异步邮件发送响应处理方案

1. 封装Promise版本的sendEmail函数

将nodemailer的回调式sendMail包装为Promise,适配async/await语法:

const nodemailer = require('nodemailer');

function sendEmail(fromAddr, toAddr, code) {
  return new Promise((resolve, reject) => {
    // 配置邮件传输器(替换为你的实际配置)
    const transporter = nodemailer.createTransport({
      service: 'your-email-service',
      auth: {
        user: 'your-account',
        pass: 'your-auth-token'
      }
    });

    const mailOptions = {
      from: fromAddr,
      to: toAddr,
      subject: '验证邮件',
      text: `你的验证码:${code}`
    };

    // 用Promise处理回调结果
    transporter.sendMail(mailOptions, (error, info) => {
      if (error) {
        reject(error); // 发送失败,传递错误信息
      } else {
        resolve(true); // 发送成功,返回标识
      }
    });
  });
}

2. Lambda Handler的异步逻辑处理

在Lambda入口函数中,通过try/catch捕获邮件发送的成功/失败状态,返回对应HTTP响应:

exports.handler = async (event) => {
  try {
    // 可从event中提取实际业务参数,这里用示例值
    const from = "sender@example.com";
    const to = "recipient@example.com";
    const code = "123456";

    // 等待邮件发送完成
    await sendEmail(from, to, code);

    // 发送成功,返回200响应
    return {
      statusCode: 200,
      body: JSON.stringify({
        success: true,
        message: "邮件发送成功"
      })
    };
  } catch (error) {
    // 发送失败,返回错误响应(可根据业务调整statusCode)
    return {
      statusCode: 500,
      body: JSON.stringify({
        success: false,
        message: "邮件发送失败",
        error: error.message
      })
    };
  }
};

核心要点

  • 回调转Promise是实现async/await的关键,确保sendEmail能被await等待
  • Lambda handler必须声明为async,才能使用await语法
  • try/catch块捕获所有发送过程中的异常,避免Lambda因未处理异常崩溃,同时返回明确的错误响应
  • 可根据实际场景调整响应状态码,比如参数校验失败返回400,服务端异常返回500

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 01:35:26