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

部署在A2托管的Node.js应用nodemailer/mailgun传输功能失效问题

问题场景

部署在A2托管的Node.js应用使用nodemailer+mailgun处理邮件请求,本地运行完全正常,部署后无法正常发送邮件,不清楚如何查看服务端控制台输出验证运行状态。

相关代码(mail.js)
const nodemailer = require('nodemailer');
const mailGun = require('nodemailer-mailgun-transport');
require('dotenv').config();

const key = process.env.MAILGUN_API_KEY;

const auth = {
    auth: {
        api_key: `${key}`,
        domain: 'MY DOMAIN'

    }
};

const transporter = nodemailer.createTransport(mailGun(auth));

const sendMail = (email, firstName, lastName, phone, helpType, message, cb) => {
    const pcsEmail = {
        from: email,
        to: 'MY EMAIL',
        subject: 'A new message from your website',
        text: "Name: " + firstName + " " + lastName + "\n" + "Phone Number: " + phone + "\n" + "Type of Help: " + helpType + "\n" + "Message: " + message
    };

    const confirmEmail = {
        from: 'MY EMAIL',
        to: email,
        subject: 'Email confirmation',
        text: "Hello there " + firstName + "," + "\n" + "\n" + "Thank you for contacting Pisgah Climbing School. The following email was sent to Pisgah Climbing School:" + "\n" + "\n" + message + "\n" + "\n" + "A PCS representative will contact you soon!"
        };

        Promise.all([
            transporter.sendMail(pcsEmail),
            transporter.sendMail(confirmEmail),
        ])
            .then((res) => console.log(res))
            .catch((err) => console.log(err));

}; 

exports.sendMail = sendMail;
可能的故障原因
  • 环境变量未正确配置:托管平台未配置MAILGUN_API_KEY或配置值错误,导致Mailgun鉴权失败
  • 出站请求被拦截:A2托管封禁了Mailgun API所需的出站端口,或服务器IP未加入Mailgun白名单,请求被拦截
  • Node.js版本不匹配:托管平台Node.js版本低于本地版本,高版本专属语法在低环境下抛出错误阻塞流程
  • 依赖未正常安装:部署过程中nodemailer、nodemailer-mailgun-transport等依赖包安装失败,模块加载异常
  • Mailgun配置错误:代码中填写的Mailgun域名未完成验证,或API密钥权限不足
排查方法
  • 申请开通A2托管的服务器日志权限,Node.js运行时的console.log输出、错误堆栈都会记录在日志中,可直接查看邮件发送的返回结果或错误信息,和本地gitBash控制台的输出内容一致
  • 打印并校验托管环境下的process.env.MAILGUN_API_KEY值,确认和本地配置一致
  • 分别在本地和托管环境执行node -v命令,对比Node.js版本,确认托管环境版本支持代码中用到的所有语法特性
  • 在托管环境中手动调用sendMail方法测试,查看是否有报错返回

问题已解决:通过服务器日志结合托管平台技术支持协助排查,确认根因为代码中使用了仅最新版Node.js支持的replaceAll()方法,托管环境的Node.js版本不支持该语法,抛出错误后阻塞了所有服务端处理流程,本地运行正常是因为本地使用的是最新版Node.js。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:18:03