电子邮件的可送达性是发送事务性消息(订单确认、一次性密码、密码重设、发票或新闻通讯)的企业面临的持久挑战之一。根本原因几乎总是相同的:直接从陌生服务器 IP 地址发送的电子邮件在到达收件箱之前就被垃圾邮件过滤器标记。SMTP 中继是专业的解决方案。本指南解释了它的工作原理、如何在常见平台上配置它,以及使发件人声誉长期保持健康的最佳实践。

什么是 SMTP 中继及其工作原理

SMTP 中继(也称为智能主机)位于您的应用程序或服务器与收件人的邮件服务提供商之间。与其让您的服务器尝试直接将电子邮件发送到 Gmail 或 Outlook 服务器(直接发送),不如将消息交给中继,中继随后使用已预热的具有已建立声誉的 IP 地址池代表您发送。

流程很简单:您的应用程序 → SMTP 中继(端口 587)→ 收件人的邮件服务器

为什么使用中继而不是直接发送?有几个原因会产生显著的实际差异:

选择正确的 SMTP 中继提供商

市场提供多个中继提供商,每个都针对不同的用例进行了优化。应指导您选择的三个因素是每月发送量、电子邮件类型(事务性与营销)和预算。

供应商 免费套餐 最佳用于 优势
SendGrid 100 封/天 事务性、SaaS 功能齐全的 API、详细分析
Mailgun 100 封/天(试用) 开发人员、API 优先应用 Webhooks、粒度日志
Amazon SES 62,000/月(来自 EC2) 大量、成本敏感 极低的成本、可扩展
Brevo(Sendinblue) 300 封/天 中小企业、新闻通讯 + 事务性 易用的 UI、营销和中继结合
商业电子邮件托管 SMTP 包含在计划中 @yourdomain 商业电子邮件 SPF/DKIM/DMARC 预配置

对于通过自己的 @domain 地址发送业务电子邮件(发票、订单确认、客户跟进)的中小企业而言,已预先配置 SMTP、SPF、DKIM 和 DMARC 的专业电子邮件托管计划是最具成本效益和最低摩擦的选择。

首先设置 SPF、DKIM 和 DMARC

任何中继提供商都无法弥补缺少的电子邮件身份验证记录。在配置任何中继之前,请确保您的 DNS 正确。接收服务器在接受您的消息之前会检查这些记录。

SPF 记录

SPF(发件人策略框架)告诉接收服务器允许哪些 IP 地址代表您的域发送电子邮件。在 DNS 中添加 TXT 记录:

yourdomain.com  IN  TXT  "v=spf1 include:sendgrid.net include:mail.yourdomain.com ~all"

重要提示:一个域必须有且仅有一条 SPF 记录。多个 SPF TXT 记录会导致永久性失败 (PermError)。将所有 include: 机制合并到单个记录中。每个中继提供商都会在其文档中发布其自己的 include 字符串。

DKIM 记录

DKIM(域密钥标识邮件)向每条传出消息添加密码签名。接收服务器根据发布在您的 DNS 中的公钥验证签名:

selector._domainkey.yourdomain.com  IN  TXT  "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBA..."

selector 值(例如 s1、mail、default)由您的中继提供商定义。从您提供商的仪表板复制公钥并将其粘贴为 p= 值。

DMARC 记录

DMARC 将 SPF 和 DKIM 结合在一起,并告诉接收服务器如何处理身份验证失败的消息。从监控专用策略开始,以观察而不阻止:

_dmarc.yourdomain.com  IN  TXT  "v=DMARC1; p=none; rua=mailto:[email protected]"

经过两到四周的干净报告后,升级到 p=quarantine(垃圾邮件文件夹),然后升级到 p=reject(完全阻止),以完全保护您的域免受欺骗。

配置 Postfix 通过 SMTP 中继发送

Postfix 是 Ubuntu、Debian 和 CentOS 上的默认邮件传输代理。编辑 /etc/postfix/main.cf 以定义中继主机:

# 定义智能主机
relayhost = [smtp.sendgrid.net]:587

# 启用 SASL 身份验证
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous

# 强制执行 TLS 加密
smtp_use_tls = yes
smtp_tls_security_level = encrypt
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt

创建 /etc/postfix/sasl_passwd 以存储中继凭证:

[smtp.sendgrid.net]:587  apikey:SG.xxxxxxxxxxxxxxxxxxxx

生成哈希数据库、安全权限并重新加载 Postfix:

sudo postmap /etc/postfix/sasl_passwd
sudo chmod 600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
sudo systemctl reload postfix

发送测试消息并检查邮件日志:

echo "测试主体" | mail -s "测试主题" [email protected]
tail -f /var/log/mail.log | grep "status=sent"

配置 PHPMailer 使用 SMTP 中继

PHPMailer 是应用最广泛的 PHP 电子邮件库。按如下方式为中继配置它:

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

require 'vendor/autoload.php';

$mail = new PHPMailer(true);

try {
    $mail->isSMTP();
    $mail->Host       = 'smtp.sendgrid.net';
    $mail->SMTPAuth   = true;
    $mail->Username   = 'apikey';
    $mail->Password   = 'SG.xxxxxxxxxxxxxxxxxxxx';
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
    $mail->Port       = 587;

    $mail->setFrom('[email protected]', 'Your Company');
    $mail->addAddress('[email protected]', 'Customer Name');
    $mail->addReplyTo('[email protected]', 'Support');

    $mail->isHTML(true);
    $mail->Subject = '订单确认';
    $mail->Body    = '<h1>感谢您的订单</h1><p>订单详情...</p>';
    $mail->AltBody = '感谢您的订单。订单详情如下。';

    $mail->send();
    echo '电子邮件发送成功';
} catch (Exception $e) {
    echo "错误:{$mail->ErrorInfo}";
}
?>

始终始终如一地设置 SMTPSecure 和 Port — STARTTLS 与端口 587 或 SMTPS (PHPMailer::ENCRYPTION_SMTPS) 与端口 465。始终包含 AltBody 纯文本回退;电子邮件客户端和垃圾邮件过滤器更喜欢包含 HTML 和纯文本部分的消息。

专业提示:如果您的应用程序从多个域发送电子邮件,请为每个域创建单独的 API 密钥和 DKIM 选择器,而不是共享凭证。共享凭证意味着共享声誉 — 一个域上的退回或垃圾邮件投诉激增可能会损害使用相同密钥的所有其他域的可送达性。保持发送流隔离。

将 WordPress 连接到 SMTP 中继

WordPress 通过 wp_mail() 路由传出邮件,默认情况下调用 PHP 的原生 mail() 函数。这直接从服务器的 IP 发送,没有 DKIM 签名,这就是为什么 WordPress 通知电子邮件经常最终进入垃圾邮件的原因。解决方案是 WP Mail SMTP 插件:

  1. 从 WordPress 存储库安装 WP Mail SMTP 插件。
  2. 导航到 设置 → WP Mail SMTP → 设置。
  3. 将"发件人电子邮件"设置为已配置 SPF 和 DKIM 的域上的地址。
  4. 选择邮件程序:其他 SMTP。
  5. 输入 SMTP 主机(例如 smtp.sendgrid.net)、加密:TLS、端口:587。
  6. 启用身份验证并输入您的中继用户名和密码。
  7. 保存设置,然后打开电子邮件测试选项卡并发送测试以确认收件箱传递。
# 替代方案:在 wp-config.php 中定义常量
define('WPMS_ON', true);
define('WPMS_SMTP_HOST', 'smtp.sendgrid.net');
define('WPMS_SMTP_PORT', 587);
define('WPMS_SSL', 'tls');
define('WPMS_SMTP_AUTH', true);
define('WPMS_SMTP_USER', 'apikey');
define('WPMS_SMTP_PASS', 'SG.xxxxxxxxxxxxxxxxxxxx');

监控和维护发件人声誉

正确配置中继是开始,不是结束。发件人声誉需要持续维护。三种工具至关重要:

Google 邮件管理员工具

在 postmaster.google.com 注册您的域并通过 DNS TXT 记录验证所有权。邮件管理员工具显示您的域声誉、IP 声誉、垃圾邮件率以及所有传递给 Gmail 地址的消息的 DMARC 合规性。注意垃圾邮件率指标中的任何上升 — 持续 0.1% 以上的任何内容都需要立即调查。

Mail-Tester.com

向 Mail-Tester 提供的地址发送测试电子邮件,并收到 1–10 分的详细分解。它在一份报告中检查 SPF、DKIM、DMARC、黑名单状态、内容评分和 HTML 质量。每当您更改中继配置或电子邮件模板时都运行此测试。

退回管理

必须立即从列表中删除硬退回(不存在的地址或无效的域)。重复发送到退回的地址是获取发送域或 IP 被阻止的直接途径。大多数中继提供商会自动抑制退回地址,但应将该数据同步回应用程序数据库以防止重新添加。保持总体退回率低于 2%。

电子邮件内容最佳实践

身份验证使您的消息通过服务器级检查,但内容过滤器仍然会评估每个电子邮件是否存在垃圾邮件信号。即使完全验证的消息如果内容看起来可疑也可能进入垃圾邮件:

常见问题

SMTP 中继和直接电子邮件发送之间有什么区别?

直接发送意味着您的服务器直接将电子邮件发送到收件人的邮件服务器,将您自己的 IP 地址暴露于声誉检查。如果您的 IP 是新的或声誉不佳,电子邮件经常会进入垃圾邮件。SMTP 中继通过具有预热的 IP 池和已建立发件人声誉的智能主机路由您的消息。中继处理身份验证、排队和退回管理,导致事务性和批量商务电子邮件的可送达性显著提高。

使用 SMTP 中继前需要设置 SPF 和 DKIM 吗?

是的,绝对需要。SPF 必须包含您的 SMTP 中继提供商的 IP 范围或包含机制,以便他们被授权代表您的域发送。DKIM 要求您发布包含您的中继服务提供的公钥的 TXT 记录。Gmail 和 Outlook 等接收服务器在决定是否接受或拒绝您的消息时会检查这两个记录。没有它们,电子邮件几乎肯定会被筛选到垃圾邮件或直接被拒绝,无论您使用哪个中继。

我如何将 WordPress 连接到 SMTP 中继?

WordPress 通过 wp_mail() 发送电子邮件,默认情况下调用 PHP 的原生 mail() 函数 — 这通常会导致可送达性差,因为服务器 IP 没有已建立的声誉。安装 WP Mail SMTP 插件,然后输入您的中继提供商的 SMTP 主机、STARTTLS 的 587 端口(或 SSL 的 465 端口)、用户名和密码。该插件钩入 wp_mail() 并通过您的中继重新路由所有传出电子邮件。始终使用内置电子邮件测试选项卡确认消息实际上是进入收件箱,而不是垃圾邮件文件夹。

我何时应该使用 SMTP 端口 25、465 或 587?

端口 25 是原始的 MTA 到 MTA 中继端口,但大多数 ISP 和云提供商阻止出站端口 25 以防止垃圾邮件,使其不适合应用级别的发送。端口 465(SMTPS)从连接开始时使用隐式 TLS,历史上曾短暂被废弃,但 RFC 8314(2018 年)重新推荐将其作为比 STARTTLS 更优先的邮件提交选项。端口 587 是使用 STARTTLS(显式 TLS)的现代提交端口,是所有从应用程序到智能主机的 SMTP 中继连接的推荐标准。除非您的提供商另有指定,否则始终首选端口 587。

您自己域名上的商业电子邮件托管

AsiaGB 电子邮件包括预配置的 SPF、DKIM 和 DMARC,以实现最大可送达性。起价为 200 泰铢/年。

查看电子邮件计划