文档首页> 云计算> telnet如何用命令行发送邮件?

telnet如何用命令行发送邮件?

发布时间:2025-11-29 00:03       

用 telnet 与 SMTP 服务器交互即可在命令行发送邮件。核心流程是:建立连接 → 握手(EHLO/HELO)→(可选)认证 → 指定发件人与收件人 → 发送正文(DATA)→ 结束并退出。以下给出可直接复用的步骤与注意事项。📨


一、前提与准备

  1. 你需要一个可访问的 SMTP 服务器地址与端口(常见:25/2525,587 通常要求加密)。
  2. 若服务器要求登录,准备好账号与密码(注意:明文认证只适合测试环境)。
  3. 某些云/运营商会封锁 25 端口,必要时改用 2525 或联系服务商放行。🔐

二、基础发送流程(不启用加密的测试环境)

telnet smtp.example.com 25
​

典型对话示例(行尾回车换行):

S: 220 smtp.example.com ESMTP
C: EHLO client.example.com
S: 250-smtp.example.com Hello
S: 250 AUTH LOGIN PLAIN
C: AUTH LOGIN              ← 若服务器需要认证
S: 334 VXNlcm5hbWU6
C: dXNlckBleGFtcGxlLmNvbQ==      ← base64(用户名)
S: 334 UGFzc3dvcmQ6
C: c2VjcmV0MTIz              ← base64(密码)
S: 235 Authentication successful

C: MAIL FROM:<sender@example.com>
S: 250 OK
C: RCPT TO:<rcpt@example.com>
S: 250 Accepted
C: DATA
S: 354 End data with <CR><LF>.<CR><LF>
C: From: sender@example.com
C: To: rcpt@example.com
C: Subject: 测试邮件(telnet)
C: Date: Tue, 25 Nov 2025 10:30:00 +0800
C: Content-Type: text/plain; charset=UTF-8
C:
C: 这是一封通过 telnet 发送的测试邮件。🙂
C: .
S: 250 Queued as 12345
C: QUIT
S: 221 Bye
​

要点:

  • EHLO 优先于 HELO,可获知服务器能力(如 AUTH、PIPELINING 等)。
  • 正文前需有空行分隔头部与正文;结束用“.”独占一行。
  • 正文里若某行以“.”开头,需写成“..”(服务器会还原)。

三、带认证与编码要点

  • AUTH LOGIN 使用 Base64:
    echo -n 'user@example.com' | base64
    echo -n 'secret123' | base64
    ​
  • 部分服务器返回 530 Authentication required 或 550 类错误时,先完成认证或检查发件人与收件人策略(如禁止中继)。

四、遇到“必须加密/STARTTLS”的处理

许多服务在 587/25 端口要求 STARTTLS(例如提示 530 Must issue a STARTTLS command first)。telnet 无法升级加密,应改用支持 TLS 的方式进行同样的 SMTP 会话,例如:

openssl s_client -starttls smtp -connect smtp.example.com:587
​

连接建立后与上面的 SMTP 对话完全相同(EHLO → AUTH → MAIL/RCPT → DATA)。🔒


五、常见状态码快速参考

  • 220 服务就绪
  • 250 操作成功(如地址接受、邮件入队)
  • 235 认证成功
  • 354 开始输入邮件内容
  • 530/534 需要认证或需要 TLS
  • 550/553 地址被拒绝(用户不存在/策略限制)

六、排错与实战建议 💡

  • 连不上:检查端口是否被拦截、防火墙策略、DNS 解析。
  • 被拒收:直投到对方 MX 可能因缺少反向解析/PTR、SPF、DKIM、策略评分而被拒;更稳妥做法是通过自家或授权中继投递。
  • 编码:正文中文建议 Content-Type: text/plain; charset=UTF-8,必要时加 Content-Transfer-Encoding: base64/quoted-printable。
  • 批量测试:可写脚本自动化生成 SMTP 指令,但务必遵守服务端发送限制与合规策略。

按照以上流程,你即可用命令行与 telnet 完成 SMTP 交互式发信;生产环境请使用支持 TLS/认证与重试队列的专业 MTA 或客户端,telnet 更适合定位问题与验证链路。🚀