技术解析 · 附来源的解答
SMTP 服务器:定义与技术概述
SMTP 服务器是实现了简单邮件传输协议(SMTP)的应用程序,用于在客户端与其他服务器之间发送、接收和中继外发邮件。它就像一个数字邮局,从发件人那里接收邮件,然后经由互联网将其路由到收件人的邮件服务器。
工作机制
流程从邮件用户代理向 SMTP 服务器发送请求开始。服务器使用一系列命令:用 HELO 或 EHLO 建立连接,用 MAIL FROM 标识发件人,用 RCPT TO 指定收件人。发出 DATA 命令后,服务器传输邮件正文和邮件头。如果收件人属于其他域名,服务器会向 DNS 查询 MX 记录以找到目标服务器,并据此中继邮件。
对发件人的重要性
SMTP 服务器对于确保邮件被正确路由并被收件系统接受至关重要。正确配置服务器,并结合 SPF 和 DKIM 等身份验证记录,可以防止邮件被标记为垃圾邮件。使用专门的 SMTP 中继服务,开发者可以处理大量事务性邮件,而不会危及公司主邮件服务器的信誉。
常见运维错误
一个常见错误是为特定连接类型使用了错误的端口。25 端口经常被 ISP 封锁以防止垃圾邮件,而 587 端口是邮件提交的标准端口。另一个常见失误是忽略 STARTTLS 或隐式 TLS,导致凭据和邮件内容以明文暴露。开发者还应确保 SMTP 凭据存储在环境变量中,而不是硬编码在应用源代码里。
具体实现示例
在 Node.js 环境中,开发者可能会使用 Nodemailer 等库连接 SMTP 服务器,提供主机地址(例如 smtp.sendgrid.net)、587 端口以及安全的身份验证令牌。随后,应用将邮件对象推送给服务器,由服务器负责复杂的路由并投递到最终目的地。SendHQ 在 https://sendhq.cc/tools 提供免费工具,帮助您管理邮件基础设施。
中继与提交
SMTP 服务器通常以两种模式运行。提交服务器接收来自最终用户的邮件,并执行身份验证以核实发件人身份;中继服务器则在网络中不同的 SMTP 服务器之间传送邮件。无需身份验证即可接收任何来源邮件的中继服务器被称为开放中继,这是一种严重的安全风险,几乎总会被现代邮件过滤器拦截。
团队常问的问题
SMTP 和 IMAP 有什么区别?
SMTP 专门用于发送或中继外发邮件。IMAP 和 POP3 则用于从服务器上的邮箱收取和管理邮件。
安全发信应使用哪个 SMTP 端口?
587 端口是使用 STARTTLS 提交邮件的行业标准端口。465 端口用于隐式 TLS,而 25 端口主要用于服务器之间的中继。
为什么我的 SMTP 服务器会拒收我的邮件?
拒收通常是由于身份验证失败、IP 地址被列入黑名单,或缺少用于验证发件人的 SPF 和 DKIM 等 DNS 记录。
可以自己运行 SMTP 服务器吗?
可以,但需要投入大量精力维护 IP 信誉和 DNS 配置,以免被主流服务商标记为垃圾邮件。
一手资料
- RFC 5321:简单邮件传输协议(SMTP) — RFC Editor
- 服务名称与传输协议端口号注册表 — IANA
- RFC 3207:基于传输层安全(TLS)的安全 SMTP 服务扩展 — RFC Editor