无法通过网站SMTP服务器向用户邮箱发送邮件求助
问题:自建SMTP服务器无法向Gmail发送邮件
我的目标是通过example.com上的SMTP服务器向someuser@gmail.com发送邮件。
已完成操作
使用Node.js的smtp-server模块搭建了SMTP服务器,已成功接收来自someuser@gmail.com的邮件,服务器代码如下:
const SMTPServer = require("smtp-server").SMTPServer; const parser = require("mailparser").simpleParser const server = new SMTPServer({ onData(stream, session, callback) { parser(stream, {}, (err, parsed) => { if (err){ console.log("Error:" , err); return callback(new Error("Error occured")); } console.log(parsed) stream.on("end", callback) return callback(); // Accept the connection }) }, disabledCommands: ['AUTH'], }); server.listen(25 ,() => { console.log("Email Server is on."); });
尝试的操作
用nodemailer编写发送代码,尝试从本地通过自建SMTP服务器向someuser@gmail.com发邮件,代码如下:
var nodemailer = require('nodemailer'); const transporter = nodemailer.createTransport({ port: 25, host: 'mail.example.com', tls: { rejectUnauthorized: false }, secure: false, }); var message = { from: 'noreply@example.com', to: 'someuser@gmail.com', subject: 'Confirm Email', text: 'Please confirm your email', html: '<p>Please confirm your email</p>' }; transporter.sendMail(message, (error, info) => { if (error) { return console.log(error); } console.log('Message sent: %s', info.messageId); });
当前结果
运行发送代码后,自建SMTP服务器有响应,但邮件始终无法送达Gmail账号。
解决方案
自建SMTP服务器无法投递到Gmail这类主流邮箱,核心原因是服务器缺少邮件可信验证机制,主流邮箱会直接拦截未验证的邮件。以下是必须完成的配置:
1. 配置DNS可信记录
- SPF记录:添加TXT类型DNS记录,值为
v=spf1 mx a -all,允许你的域名MX和A记录对应的服务器发送邮件 - DKIM记录:生成DKIM密钥对,在DNS中添加TXT记录存入公钥;同时在SMTP服务器代码中用
dkim-signer这类库,在onData阶段对邮件进行签名 - DMARC记录:添加TXT类型DNS记录,值为
v=DMARC1; p=quarantine; sp=quarantine; rua=mailto:dmarc@example.com,告知邮箱服务商如何处理未通过验证的邮件
2. 修复SMTP服务器的投递能力
你当前的smtp-server只是接收服务器,不具备主动向目标邮箱投递邮件的功能——它只能接收并解析邮件,无法把邮件发送到Gmail的SMTP服务器。解决方法:
- 替换或扩展现有服务:改用Postfix这类具备完整投递能力的邮件服务,或者在Node.js代码中,当需要转发邮件时,用
nodemailer作为客户端,将邮件发送到目标邮箱的MX服务器 - 解封端口:确保服务器的25端口未被防火墙或云服务商封禁(多数云服务商默认禁用25端口,需手动申请解封)
3. 调整发送端配置
- 移除
rejectUnauthorized: false:该配置会跳过TLS证书验证,大幅增加邮件被拦截的风险,需为服务器配置有效SSL证书(可使用Let's Encrypt免费证书) - 确保发件地址合规:
noreply@example.com必须属于你的域名,且SPF记录允许该地址发信
4. 检查服务器IP信誉
- 确认服务器IP不在垃圾邮件黑名单中(可通过IP信誉查询工具验证)
- 若使用云服务器,避免使用被标记过的IP段,必要时联系服务商更换IP
内容的提问来源于stack exchange,提问作者anon999_void
相关产品推荐
相关产品推荐

