如何在Node.js服务中使用Nodemailer通过DreamHost发送邮件
问题根因与修复方案
你遇到的两个错误分别由两个配置错误导致,按以下步骤修改即可修复:
1. 修复认证失败(535错误)
你在配置auth参数时,手动对账号密码执行了encodeURIComponent编码,Nodemailer内部会自动处理SMTP认证的编码逻辑,手动编码会导致实际提交给SMTP服务器的账号密码和真实值不符,直接触发认证失败。
直接删除encodeURIComponent包裹即可,修改后的传输器配置如下:
var transport = createTransport({ host: "smtp.dreamhost.com", port: 465, auth: { user: process.env.PROD_MAIL_USER, pass: process.env.PROD_MAIL_PASS, }, secure: true, });
2. 修复域名解析失败(ENOTFOUND错误)
ssl://前缀是PHP类库的特殊配置要求,Nodemailer的host字段仅需要填写纯域名,secure: true配置已经默认开启SSL加密,无需额外添加协议前缀。加了前缀后会被Nodemailer当成域名的一部分去做DNS解析,自然会报地址找不到的错误。
可选验证项
如果修改后还有问题,可以依次排查以下点:
- 确认环境变量
PROD_MAIL_USER的值是完整的邮箱地址(格式为xxx@你的域名.com,不是仅前缀部分) - 确认你使用的DreamHost邮箱已开通超过15分钟,后台状态为正常激活
- 确认邮箱密码的环境变量配置时没有多余的包裹引号,避免实际取值带额外符号
- 确认DreamHost后台没有对该邮箱开启SMTP登录限制
内容的提问来源于stack exchange,提问作者ztrat4dkyle
相关产品推荐
相关产品推荐

