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

Nodemailer本地开发正常,部署到RHEL VPS后无法发送邮件求助

排查方向整理

1. 验证环境变量加载情况

  • 本地开发时.env文件能正常读取,但pm2运行时可能因工作目录或启动方式问题,导致环境变量未加载。
  • 查看pm2启动日志:执行pm2 logs,检查启动时输出的token值是否为正确密码,若显示undefined,说明环境变量未加载。
  • 解决方式:启动pm2时指定.env路径,或在pm2配置文件(如ecosystem.config.js)中配置env参数,确保变量正确注入。

2. 查看邮件发送的错误日志

  • 代码中已捕获错误并打印console.log(error),但pm2的日志可能未实时展示。执行pm2 logs <你的应用名称>,找到表单提交时的错误信息,这是定位问题的核心(比如认证失败、连接超时、SSL证书异常等)。

3. 检查RHEL的安全机制

  • SELinux限制:RHEL默认开启SELinux,可能阻止Node.js发起出站SMTP连接。临时关闭测试:sudo setenforce 0,若邮件发送恢复,需配置SELinux允许Node.js访问网络:
    sudo semanage permissive -a node_t
    
  • 防火墙配置:虽然开放了465端口,但firewalld可能限制出站流量。临时关闭测试:sudo systemctl stop firewalld,若正常,再重新配置防火墙规则允许465端口出站。

4. 测试与外部SMTP服务器的连通性

  • 在RHEL服务器上直接测试SMTP端口连通性:
    • 用nc命令:nc -zv <你的SMTP主机> 465
    • 用telnet:telnet <你的SMTP主机> 465
  • 若连接失败,说明VPS提供商封锁了465端口,或SMTP服务器将VPS IP列入黑名单,需联系服务商或更换SMTP服务器。

5. 调整Nodemailer配置

  • 代码中tls: { rejectUnauthorized: false }可能绕过了SSL证书验证,在服务器环境中可能引发信任问题。尝试注释该配置,测试邮件是否能发送。
  • 确认SMTP主机、端口、账号密码完全正确,部分邮件服务商(如Gmail、Outlook)需开启「应用专用密码」或启用SMTP服务。

6. 检查pm2运行的用户权限

  • 若pm2用root用户启动,可能和本地普通用户的网络权限不同。尝试用本地开发时的用户启动pm2:
    su - <你的用户名> -c "pm2 start app.js"
    
    测试邮件发送是否正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 03:01:00