如果 HTTP 代理允许到邮件服务器端口的 CONNECT 隧道,它就能承载 SMTP 连接。这一权限比网页能否通过同一代理加载更重要。

使用 SMTP 和 STARTTLS 提交邮件时,大致形式如下:

curl --proxy http://203.0.113.10:8080 --proxytunnel \
  --url smtp://mail.example.com:587 --ssl-reqd \
  --user mail-user \
  --mail-from [email protected] \
  --mail-rcpt [email protected] \
  --upload-file message.eml

这些地址只是占位符。请使用你有权使用的邮件服务和发件人。当 user 选项只包含用户名时,curl 会提示输入密码。邮件文件需要合适的邮件头、一个空行和正文;它并不只是收件人地址。

预期会有独立的连接和登录

HTTP 隧道选项 会让 curl 请求代理连接到 SMTP 目标。代理可能要求 通过 curl 的代理认证选项提供它自己的凭据。随后 SMTP 服务在该连接内部对邮件用户进行认证。

--ssl-reqd 要求为此 SMTP URL 升级到 TLS。请为预期的邮件主机名保持证书校验开启。代理认证成功并不能证明 TLS 或邮件登录会成功。

许多通用 HTTP 代理会限制 CONNECT 端口。拒绝端口 587 可能是有意为之的策略。请申请获批的线路,而不要反复尝试无关端口,或把这种限制当成故障。

邮件服务在链路打通后还可能执行发件人权限和提交策略。请阅读 SMTP 的响应。认证之后被拒的邮件,与在 SMTP 问候语到达之前就被拒的隧道,需要不同的处理方式。

相关文章