本地开发表单提交正常,部署到BlueHost后无法发邮件求助
问题排查与解决方案
1. 适配BlueHost的SMTP配置
BlueHost虚拟主机对外部SMTP服务有严格限制,必须改用官方提供的邮件服务器:
- 替换Nodemailer的Transport配置为BlueHost专属信息:
const transporter = nodemailer.createTransport({ host: 'mail.yourdomain.com', // 替换为你的域名对应邮件服务器 port: 465, secure: true, auth: { user: 'your-bluehost-email@yourdomain.com', // 你的BlueHost邮箱账号 pass: 'your-email-password' // 邮箱独立密码,不是cPanel登录密码 } }); - 禁止使用外部SMTP(如Gmail、QQ邮箱),BlueHost会封禁这类端口请求。
2. 服务器端端口与CORS配置
- 确认
server.cjs监听的端口与BlueHost cPanel中Node.js应用分配的端口完全一致(BlueHost不会开放80/443端口,通常是30000+的自定义端口)。 - 修正CORS的origin配置,必须指定你的网站域名(如
https://yourdomain.com),不能用通配符或本地地址:cors({ origin: 'https://yourdomain.com', credentials: true })
3. 前端请求地址修正
- 替换前端表单提交的API地址为生产环境地址(如
https://yourdomain.com/api/send-email),删除开发环境的localhost地址。 - 确保前端请求使用HTTPS协议,BlueHost强制HTTPS,HTTP请求会被拦截导致提交失败。
4. 日志与权限排查
- 在
server.cjs的Nodemailer发送逻辑中添加错误日志输出:transporter.sendMail(mailOptions, (error, info) => { if (error) { console.error('邮件发送失败:', error); // 打印错误到服务器日志 return res.status(500).send('发送失败'); } res.status(200).send('发送成功'); }); - 通过BlueHost cPanel的「Node.js应用」面板查看日志,根据具体错误信息定位问题(如认证失败、端口封禁、发送超限)。
- 检查文件权限:确保
server.cjs及依赖包权限为644,文件夹权限为755,避免因权限不足导致服务异常。
5. 邮箱账号验证
- 确认你的BlueHost邮箱已完成激活,未被标记为垃圾邮件发送者。
- 检查BlueHost邮箱的发送限制(默认每小时最多500封),避免因超限导致发送失败。
内容的提问来源于stack exchange,提问作者NewCoder96
相关产品推荐
相关产品推荐

