如何在Hetzner上设置SMTP服务器,使其能够发送电子邮件且不发送垃圾邮件?
本指南将逐步讲解如何在 Hetzner 云服务器上部署 SMTP,用于发送电子邮件以及将电子邮件接收映射到另一台服务器。此外,本指南还涵盖重要的 DNS 设置(SPF、DKIM、DMARC、PTR)、身份验证(SASL/TLS)、退信和取消订阅管理,以及避免被列入黑名单的实用建议。.
拟议架构和初步考虑
拟建架构:
- 发送服务器(Hetzner Cloud):安装 Postfix + OpenDKIM + OpenDMARC + TLS — 负责发送电子邮件(SMTP 中继)。.
- 传入服务器(例如您的 VPS 或主机):MX 记录指向此服务器;负责传递和接收传入消息(POP/IMAP/Dovecot 或您的电子邮件服务)。.
- 退信和退订邮箱:退信会发送到专用地址,该邮箱由接收服务器处理。.
- 用户/应用程序:使用 SMTP 认证 (或基于 IP 的授权)在 Hetzner 服务器上进行身份验证,才能被允许进行中继。.
准备发送服务器的步骤(Hetzner)
安装基本软件包(Debian/Ubuntu)
Ubuntu/Debian 示例:
sudo apt update
sudo apt install -y postfix dovecot-core dovecot-imapd opendkim opendkim-tools opendmarc certbot postfix-policyd-spf-python rspamd设置主机名和 PTR
需要在转发服务器上设置主机名,并在 Hetzner 面板中注册反向 DNS。.
sudo hostnamectl set-hostname mail.example.comPostfix 配置技巧: 数量 我的主机名 将其设置为 mail.example.com,然后在 Hetzner 面板的反向 IP 中输入 mail.example.com 的值。.
使用 Let's Encrypt 配置 TLS
颁发证书并在 Postfix 设置中引用它:
sudo certbot certonly --standalone -d mail.example.com在 main.cf 将下列值相加:
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.example.com/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mail.example.com/privkey.pem
smtpd_use_tls = yes
smtp_tls_security_level = may
smtpd_tls_security_level = mayPostfix 基本配置(main.cf 节选)
一些重要的设置 main.cf:
myhostname = mail.example.com
myorigin = /etc/mailname
mydestination = localhost
relay_domains =
mynetworks = 127.0.0.0/8
smtp_tls_security_level = may
smtpd_tls_security_level = may
smtpd_tls_auth_only = yes
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
smtpd_helo_required = yes解释: 拒绝未授权目标 防止您的服务器被用作开放式中继;只有授权用户或已知机器才能进行中继。.
启用 Dovecot 的 SASL(用于验证发送用户身份)
在文件中 /etc/dovecot/conf.d/10-master.conf 部分 服务认证 设置方法如下:
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0660
user = postfix
group = postfix
}
}您可以使用本地密码、SQL 数据库或 LDAP 进行身份验证。然后重启服务:
sudo systemctl restart dovecot postfixDKIM、SPF 和 DMARC — DNS 配置
使用 OpenDKIM 生成 DKIM 密钥
在发送服务器上创建 DKIM 密钥的示例:
sudo mkdir /etc/opendkim/keys/example.com
sudo opendkim-genkey -b 2048 -d example.com -s mail -D /etc/opendkim/keys/example.com文件 邮件.txt 已生成;要添加到 DNS 中的 TXT 记录内容:选择器 = 电子邮件 → mail._domainkey.example.com.
示例设置 /etc/opendkim.conf (摘抄):
Domain example.com
KeyFile /etc/opendkim/keys/example.com/mail.private
Selector mail
AutoRestart yes
Socket local:/var/spool/postfix/opendkim/opendkim.sock并且 /etc/postfix/main.cf 添加:
milter_default_action = accept
smtpd_milters = unix:/var/spool/postfix/opendkim/opendkim.sock
non_smtpd_milters = $smtpd_miltersSPF记录
在示例域的 DNS 中:
example.com. IN TXT "v=spf1 ip4:YOUR_HETZNER_IP include:spf.protection.example ?all"或者更确切地说:
"v=spf1 ip4:YOUR_HETZNER_IP -all"推荐: 在开始时 ~全部 或者 ?全部 使用这种方法可以避免初始错误导致完全拒绝,然后再更加严格地审查。.
DMARC记录
DNS 中 DMARC 的示例:
_dmarc.example.com. IN TXT "v=DMARC1; p=quarantine; rua=mailto:[email protected]; ruf=mailto:[email protected]; pct=100; adkim=s; aspf=s"笔记: 首先,你可以 p=无 让我们看看报告吧。 p=隔离 或者 p=拒绝 激活。.
在其他服务器上接收电子邮件并处理退信
如何设置 MX 接收
DNS 中 MX 记录的示例:
example.com. IN MX 10 mail-receive.example.org注意:MX 必须指向接收服务器;您的发件人使用 Hetzner 发送电子邮件——因此必须为发送域设置 SPF/DKIM 记录。.
返回路径配置和退信管理
以下几点很重要:
- 返回路径应该专门用于处理退货;最好指向一个专用的子域名,例如: bounce.example.com 指出。.
- 您可以使用VERP处理任何电子邮件:
envelope-from="[email protected]"为了更精确地确定回报。.
处理退信——推荐流程:
- 一个地址
[email protected]创建该记录并将其 MX 记录指向处理该记录的服务器。. - 那台服务器 fetchmail / 获取邮件 或者直接获取 IMAP 邮箱并使用退信处理脚本执行操作。.
- 要解析退信,您可以使用诸如以下工具: 侧翼 或者 邮件::投递::退信解析器 使用。.
使用 flanker 进行反弹处理的示例(Python)
首次安装:
pip install flanker简单脚本示例(从标准输入读取数据并进行处理):
from flanker import mime
from flanker.utils import bounces
import sys
raw = sys.stdin.read()
msg = mime.from_string(raw)
bounce = bounces.parse(raw)
# classify and store bounce info in database or suppression list按类别 硬弹 (5xx 错误) 柔软弹跳 (4xx)您可以应用删除或重试策略。.
避免垃圾邮件——最佳实践
技术设置
- PTR 辅音
我的主机名A 是一条记录。. - 防晒系数, DKIM, DMARC 启用 DKIM 签名。.
- HELO/SMTP 横幅与主机名匹配。.
- TLS 已启用
smtpd_tls_auth_only = yes防止未加密传输。. - 避免使用历史记录不良的IP地址,并使用正确的反向DNS。.
内容政策和列表
- 总是来自 双重确认加入 用于邮件列表。.
- 每封电子邮件都应该包含一个简单易懂的退订链接;该链接应位于邮件头中。
退订列表使用:
List-Unsubscribe: <mailto:[email protected]>, <https://example.com/unsubscribe?email=...>- IP预热:从第一天开始发送少量数据,然后逐渐增加。.
- 删除或标记退信率或投诉率高的地址。.
- 遵守 CAN-SPAM 和 GDPR 等针对欧洲用户的法律法规。.
控制发送速率、队列,并防止负面信誉
Postfix 并发和目标延迟限制设置:
postconf -e "smtp_destination_concurrency_limit = 20"
postconf -e "smtp_destination_rate_delay = 1s"对于比策略守护进程更复杂的策略,例如 转发, 政策 或者 rspamd 使用。.
使用 Postfix 命令进行队列管理:
postqueue -p
postsuper -d ALLDeferred用于检查交付能力的测试和工具
- 要测试 SMTP 斯瓦克斯 使用:
swaks --to [email protected] --from [email protected] --server mail.example.com --auth LOGIN --auth-user smtpuser --auth-password smtppass --tls- 检查标头 mail-tester.com 和 MXToolbox 检查黑名单和 SPF/DKIM/DMARC。.
- 使用以下命令监控日志:
tail -f /var/log/mail.log通过数值分析DMARC报告 rua 和 鲁夫 帮助您查找配送问题。.
完整流程示例:从应用程序 A 使用 Hetzner 作为中继发送数据
- 申请 A 至
mail.example.com:587与用户连接smtp_user输入密码后,即可进行身份验证。. - 验证完成后,Hetzner 服务器输出电子邮件并对其进行 DKIM 签名;SPF 和 PTR 也已设置。.
- 如果返回,则跳转至
[email protected]已发送;MX 跳转指向执行解析的服务器。. - 该应用程序读取抑制列表并禁用硬反弹地址。.
更多安全和操作提示
- 请确保服务器的出站端口 25 已打开(Hetzner 有时会有网络限制)。.
- 为防止滥用,身份验证应是强制性的;绝不能将服务器作为开放式中继。.
- 将日志发送到监控系统(ELK/Graylog)以分析发送峰值或错误响应。.
- 如果发送量很大,请使用专用 IP 地址并逐步预热该 IP 地址。.
推荐的开源自动化工具(免费)
- Postfix(SMTP)
- 鸽舍(SASL/IMAP)
- OpenDKIM / OpenDMARC
- 用于过滤和评分的 Rspamd
- 使用 fetchmail / getmail 获取退信
- 用于退信处理的 flanker 或 Mail::Delivery::BounceParser
- postfwd / policyd 用于定价和政策
公司服务链接(85+ 个服务地点)
如果您正在寻找具有广泛网络接入和多样化位置的基础设施,您可以使用合适的服务来选择离您的受众最近的数据中心,以减少延迟并提高交付能力。.
- 多于 85个地点 数据中心选择的世界。.
- 高性能云服务器,配备专用 IP 地址,用于电子邮件营销和 SMTP 服务。.
- 反DDoS服务器、各种VPS以及网络和安全设置支持。.
最后一点
如果您准备开始使用,可以了解云服务器方案、专用 IP 地址、DNS 和安全管理服务,或者联系技术团队获取定制配置、DKIM/DMARC 实施和退信管理方面的帮助。我们的支持团队随时为您提供技术指导和协助。.








