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

无法通过网站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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 07:36:23