首页/网络/协议速查/swaks / curl 自动化发信测试

swaks / curl 自动化发信测试

命令行发信两件套:swaks 专为 SMTP 测试而生(认证/TLS/正文文件全覆盖),curl 也能直接向 SMTP(S) 提交邮件。

协议速查网络更新于 2026-10-13

命令行发信测试

命令行发信有两个常用工具。swaks 专为 SMTP 测试而设计:认证方式、加密选项、正文来源都能用参数指定,并且会把完整会话打印出来,定位问题非常直接。curl 也能直接向邮件提交端口上传一封邮件,适合已经以 curl 为核心的脚本环境。两者都支持加密通道,务必区分信封发件人与信头里的发件人,二者可以不同。

基本信息

swaks 优势专为 SMTP 测试设计,输出完整会话过程
curl 优势无需额外安装,脚本环境里随手可用
正文文件需包含必要信头、空行与正文
信封发件人由命令行参数指定,退信寄往该地址
信头发件人写在正文文件里,展示给收件人看
加密方式提交端口配显式升级,专用端口直接加密

swaks 发信

swaks 发信
swaks --to you@example.net --from me@example.com \
  --server smtp.example.com:587 --auth LOGIN \
  --auth-user me@example.com --auth-password '应用密码' --tls
# 便于定位时打印完整会话过程
swaks --to you@example.net --server smtp.example.com:587 --auth LOGIN \
  --auth-user me@example.com --auth-password '应用密码' --tls --dump-as-body

curl 提交邮件

curl 提交邮件
curl --url 'smtps://smtp.example.com:465' --ssl-reqd \
  --mail-from 'me@example.com' --mail-rcpt 'you@example.net' \
  --user 'me@example.com:应用密码' --upload-file mail.txt
# mail.txt 需含 From、To、Subject 信头与空行后的正文

典型使用场景

  • 验证提交端口与认证配置是否可用:发一封到自身邮箱
  • 排查认证失败:看完整会话定位到底停在哪一步
  • 投递链路测试:确认信封发件人与信头发件人设置是否正确
  • CI 流程里的通知验证:用脚本确认告警邮件通道畅通
  • 建立可复现的测试手段:参数化发信比手工在客户端里点更能说明问题
信封发件人决定退信寄回哪里,信头发件人决定收件人看到什么,两者不一致在合法场景下是常见做法,但排障时要意识到测试结果里的退信地址未必等于你写在正文里的那个。用 curl 提交时如果传错了信封发件人,认证可能通过但投递仍会被拒。

易错点

  • 只改正文里的发件人而不改参数里的信封发件人:退信寄到错误地址
  • 把凭据直接写在命令行里,留在进程列表与历史记录中
  • 测试只发一封到自己的同一域名,未验证跨域投递与策略层
  • 忘记正文文件需要信头与空行分隔,服务器直接拒绝或正文被吞
  • 把认证成功当成投递成功,不检查对方是否真的收到

数据来源与参考

  • RFC 5322(邮件格式)
  • RFC 5321(传输)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌