配置SMTP服务器,软件安装一般半小时就能完成,真正卡住人的是各类隐性问题,DNS记录配置错误、云厂商封禁端口、邮件投递全部进入垃圾箱。踩过坑之后会积累经验,但初次搭建没有指引,可能连续折腾几天。
自建Postfix:装完之后DNS才是大坑
Ubuntu、Debian系统安装Postfix,一条sudo apt install postfix命令即可。安装向导弹出选项,选择Internet Site,系统邮件名称填写你的域名,例如shturl.cc/chpI。这一步操作简单,跟随向导完成。安装后主配置文件路径/etc/postfix/main.cf,修改几项核心参数,myhostname填写mail.shturl.cc/chpI,mydomain填写shturl.cc/chpI,myorigin引用$mydomain,mydestination包含主机名、域名、localhost。

到这里邮件服务软件已经启动,但距离正常使用还有差距。能否正常投递到收件箱,DNS配置起到决定性作用。A记录将mail.shturl.cc/chpI指向服务器IP,MX记录指向mail.shturl.cc/chpI,两项属于基础配置。PTR反向解析记录很容易忽略,Gmail、Outlook都会核验发件IP反向解析,没有配置PTR,邮件大概率拒收或是扔进垃圾箱。PTR记录不能在域名DNS后台自行添加,联系VPS服务商或者云厂商协助设置,IP反向解析绑定mail.shturl.cc/chpI。
身份认证与加密同样不能省略。SMTP-AUTH依靠SASL完成客户端身份校验,TLS加密认证流程。Postfix配置SMTP-AUTH,Dovecot SASL是常用方案,smtpd_sasl_path参数路径相对于Postfix队列目录,填写错误服务无法启动。TLS证书可以使用Let’s Encrypt免费签发,测试阶段临时使用自签证书,正式上线更换可信证书,不然客户端弹出安全警告。
端口区分用途,25端口用于服务器之间邮件通信,587端口用于客户端提交邮件。很多云厂商默认封禁25端口出站流量,国内厂商管控严格。VPS无法连接外部邮件服务器,优先排查25端口是否封禁,这种情况联系商家申请解封或者更换支持25端口出站的机器。
Exchange中继:连接器的配置逻辑不太一样
邮件系统使用Exchange或者Microsoft 365,SMTP配置思路和Postfix完全不同。Exchange管理邮件路由依靠连接器,配置入口在Exchange Admin Center邮件流板块。
中继场景,创建独立接收连接器,绑定25端口,RemoteIPRanges限制仅允许应用服务器IP访问,默认0.0.0.0-255.255.255.255必须删除。保留默认范围等于开放中继,所有垃圾邮件都可以通过你的服务器转发,IP很快被拉黑。
2023年11月之后,Exchange Online调整SMTP中继校验规则。旧规则会核验发件人域名,该条件取消,但MAIL FROM内域名,必须是组织内已经验证通过的接受域。应用发送邮件,From地址使用未在Exchange验证的域名,中继请求直接拒绝。配置时发件域名选用Exchange内已验证域名,减少反复排查工作量。
代码层面:Python用smtplib就够了
自建Postfix或是云邮件服务,Python发送邮件一般使用smtplib。连接SSL 465端口调用SMTP_SSL,连接STARTTLS 587端口,使用SMTP之后执行starttls()。腾讯云示例代码,连接465端口,登录后直接调用sendmail。
阿里云邮件推送SMTP地址smtpdm.aliyun.com。Python3.6以上版本,80端口和465端口都支持,465采用SSL加密,80明文,一般在内网或者同区域环境使用。身份认证用户名填写发信地址,SMTP密码在阿里云控制台单独设置,和账号登录密码相互独立。
代码层面有一处风险,不要硬编码SMTP密码写入代码。阿里云文档同样提醒,密码存入环境变量或者密钥管理服务,程序运行时读取。密码提交至Git仓库,等同于泄露邮件发送权限。
云邮件推送:省掉运维但得配DNS
不想自行维护邮件服务器,阿里云邮件推送DirectMail这类服务更省心。开通之后添加发信域名,优先选用子域名,dm.example.com或者mail.example.com,不要直接使用主域名,避免干扰主域名其他邮件业务。
域名添加完成,配置六条DNS记录:TXT域名所有权验证记录、SPF、DKIM、DMARC、MX、CNAME跟踪记录。每条记录各司其职,TXT验证域名归属,SPF声明允许代域名发信的服务器,DKIM通过数字签名确认邮件内容没有被篡改,DMARC规定收件方如何处理SPF、DKIM校验失败邮件。域名在阿里云注册,可以开启自动配置一键添加记录;非阿里云域名,手动在域名控制台逐条添加,DNS生效一般1至10分钟。
SPF记录有细节需要留意,单个域名只能存在一条SPF记录。多个出口IP,全部合并写入同一条SPF,不能分开多条。多条SPF记录存在时,部分收件服务器判定SPF校验失败,邮件进入垃圾箱。
发出去不等于送达,SPF和DKIM是底线
自建邮件服务器或者云邮件推送,SPF、DKIM配置完成前,九成邮件都会进入垃圾箱。SPF的TXT记录示例v=spf1 mx ip4:1.2.3.4 -all,mx代表MX记录内服务器具备发信权限,ip4指定独立IP,-all严格拒绝其余来源。初次上线建议使用~all软拒绝,观察一周,确认没有遗漏发信源,再修改为-all。
DKIM需要部署OpenDKIM或者Rspamd生成密钥对,公钥以TXT记录添加到域名DNS。邮件发送,服务器使用私钥对邮件头签名,收件服务器读取DNS内公钥完成验签。验签通过,证明邮件内容传输过程没有篡改,域名没有被冒用。DKIM配置步骤偏繁琐,却是提升邮件送达率最有效的手段,无法跳过。
配置SMTP服务器,安装软件、开放端口只完成三成工作。剩下大量工作量集中在DNS记录、身份认证、送达率优化。不存在一键配置方案,每一项都要手动调试、测试。配置完成,邮件稳定投递至收件箱,之前所有调试付出都会有回报。