如何在Netlify React应用的自定义域名下创建邮箱并兼顾Postfix使用?
让自定义域名同时适配Netlify和Postfix的方案
一、DNS记录配置(核心)
域名要同时兼顾网站和邮件解析,关键是配置不同类型的DNS记录,两者互不干扰:
- A/AAAA记录(网站解析):保留Netlify提供的A/AAAA记录,把主域名(如
yourdomain.com)和www子域名指向Netlify的服务器IP,保证网站正常访问。 - MX记录(邮件接收):添加MX记录,优先级设为10(数值越小优先级越高),指向运行Postfix的服务器域名或直接IP。注意MX记录的目标不能是CNAME,必须是A/AAAA记录对应的主机。
- SPF记录(邮件发送验证):添加TXT类型的SPF记录,允许你的Postfix服务器和Netlify(如果有需求)发送邮件,格式示例:
v=spf1 ip4:你的Postfix服务器IP include:netlify.com ~all,能降低邮件被标记为垃圾邮件的概率。 - DKIM记录(可选但推荐):在Postfix中配置DKIM生成公钥,然后添加对应的TXT类型DKIM记录,提升邮件可信度。
- PTR反向解析:联系服务器提供商,给Postfix服务器的IP设置反向解析到你的域名,这对邮件投递成功率至关重要。
二、Postfix配置要点
确保Postfix只处理邮件请求,和Netlify的网站服务不冲突:
- 端口监听:Postfix默认监听25(SMTP)、587(提交)、465(SMTPS)端口,这些和Netlify用的80/443端口不重叠,直接开放服务器防火墙的这些端口即可。
- 域名标识:在
/etc/postfix/main.cf中设置myhostname = yourdomain.com、mydomain = yourdomain.com,让Postfix正确识别你的自定义域名。 - 防止开放中继:配置Postfix只允许你的Node.js服务器(或指定IP)通过587端口发邮件,在
main.cf中添加:
同时把Node.js服务器的IP加入smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destinationmynetworks参数中。
三、Node.js + Nodemailer配置示例
用Nodemailer连接Postfix服务器发送通知,代码示例如下:
const nodemailer = require('nodemailer'); // 创建邮件传输器,连接Postfix服务器 let transporter = nodemailer.createTransport({ host: 'yourdomain.com', // 也可以填Postfix服务器的直接IP port: 587, secure: false, // 587端口用STARTTLS,所以设为false auth: { user: 'notifications@yourdomain.com', // 你创建的自定义域名邮箱账号 pass: '你的邮箱密码' } }); // 发送通知邮件的函数 async function sendAlert() { try { let info = await transporter.sendMail({ from: '"系统通知" <notifications@yourdomain.com>', to: 'user@example.com', subject: '新的系统通知', text: '这是来自Postfix服务器的测试通知邮件', html: '<b>这是来自Postfix服务器的测试通知邮件</b>' }); console.log('邮件发送成功: %s', info.messageId); } catch (error) { console.error('邮件发送失败:', error); } } sendAlert();
四、避坑注意事项
- 不要把
mail.yourdomain.com这类邮件子域名设为CNAME指向Netlify,要单独配置A记录指向Postfix服务器。 - 检查Netlify的域名配置,确保它没有覆盖MX、SPF等邮件相关的DNS记录(Netlify默认不会修改这些,但最好确认)。
- 测试双向邮件:用外部邮箱(比如Gmail)发邮件到你的自定义域名邮箱,检查Postfix是否能正常接收;用Nodemailer发邮件到外部邮箱,同时查看Postfix日志(
/var/log/mail.log)排查问题。
内容的提问来源于stack exchange,提问作者李白 puer
相关产品推荐
相关产品推荐

