客户端发送 EHLO 后,服务器会公布可用的身份验证机制。客户端在发送邮件之前需要完成其中一种验证。
SMTP 身份验证在什么时候发生?
客户端建立连接,在需要时启动 TLS,然后发送 EHLO。服务器在响应中列出可用的身份验证机制。客户端随后使用 AUTH 发送机制和凭据。交换成功后,客户端可以发出 MAIL FROM 并继续 SMTP 事务。
RFC 6409 将邮件提交与服务器间中继分离。它要求提交服务器对客户端进行身份验证,除非明确适用例外情况。该默认设置可防止未经授权的提交。发送凭据前请使用加密连接。
| 机制 | 保护或证明的内容 |
|---|---|
| TLS | 保护传输中的连接 |
| SMTP AUTH | 向中继服务器标识提交客户端 |
| SPF、DKIM 和 DMARC | 授权或验证发送域 |
RFC 4954 定义了 AUTH 扩展及其成功和失败的回复。AUTH 不能证明收件人会接受该邮件。
SMTP 使用哪些凭据?
中继服务器可以使用用户名和密码、以 API 密钥作为密码,或者它公布的其他机制。将两者都视为机密信息。不要将它们存入源代码管理或日志中,因为任何读取到泄露凭据的人都可以冒用你的账户发送邮件。
身份验证证明客户端可以通过该中继服务器提交邮件,但不能证明收件人会接受该邮件,也不能保证邮件进入收件箱。SPF、DKIM 和 DMARC 等域身份验证处理的是投递的另一个环节。
为什么已通过身份验证的发送仍然会失败?
中继服务器可以在不同阶段拒绝凭据、发送者权限、邮件策略或收件人策略。读取 SMTP 回复代码和文本,找到失败的阶段并修复后再重试。
成功的 AUTH 仅完成了登录。后续的 RCPT TO 回复仍然可以拒绝收件人。接收方提供商仍然可以过滤已接受的邮件。
C: EHLO app.example
S: 250-AUTH PLAIN LOGIN
C: STARTTLS
S: 220 Ready to start TLS
C: EHLO app.example
C: AUTH <credentials omitted>
S: 235 Authentication successful
身份验证失败时,服务器返回 535。切勿将真实密码或 base64 凭据放入日志或示例中。任何读取到的人都可以冒用你的账户发送邮件。
如何使用 Bird 进行身份验证?
使用与你的密钥区域对应的 SMTP 主机。选择端口 587 搭配 STARTTLS,或端口 465 搭配隐式 TLS。使用用户名 bird 和具有 emails 权限范围的 API 密钥作为密码进行身份验证。SMTP 中继指南展示了连接设置和回复处理方式。
总结
- SMTP 身份验证证明客户端可以通过中继服务器提交邮件。
- 在加密激活后再进行身份验证。
- 登录成功不保证投递或进入收件箱。
- Bird 使用
bird作为用户名,使用 API 密钥作为密码。
