通过telnet使用stmp协议发送邮件


邮箱服务器: stmp.aliyun.com  端口: 25

 

通过 SMTP 协议发送邮件的整体过程如下:

  1. 客户端使用 telnet 命令连接到SMTP服务器,建立会话。
  2. 客户端发送一个 HELO 或 EHLO 命令。
  3. 客户端发送一个 AUTH 认证命令进行用户登录(使用 smtpd 方式)。
  4. 客户端发送一个 MAIL 命令指定发件人。
  5. 客户端发送一个 RCPT 命令指定收件人。
  6. 客户端发送一个 DATA 命令准备输入邮件正文。
  7. 客户端发送一个 . 命令(点命令)表示 DATA 命令结束。
  8. 客户端发送一个 QUIT 命令结束会话。

 

一封普通的文本邮件的信息包含一个头部分(例如:From、To、Subject 等等)和一个体部分。

体部分通常为单体类型(例如:text、image、audio、video、application 等等)或是复合类型(即:multipart)。

头部分和体部分之间用一个空行进行分隔,并且体部分的类型由信头内容类型字段 Content-Type 描述。

信头部分:

域名 含义
Received 传输路径
Return-Path 回复地址
Delivered-To 发送地址
Reply-To 回复地址
From 发件人地址
To 收件人地址
Cc 抄送地址
Bcc 暗送地址
Date 日期和时间
Subject 主题
Message-ID 消息 ID
MIME-Version MIME 版本
Content-Type 内容的类型
Content-Transfer-Encoding 内容的传输编码方式

相关指令:

 

实例:

发件人:  hello@aliyun.com

收件人: a1@163.com、q1@qq.com

转发:   q2@qq.com

密送:  q3@qq.com

标题:  终端使用telent发送邮件

正文:  你好telnet,你好python

 

在linux中可以使用echo -n Content|base64   对指定内容进行 base64 编码 

[hupeng@hupeng-vm:~]$telnet smtp.aliyun.com 25
Trying 140.205.94.10...
Connected to smtp.aliyun.com.
Escape character is '^]'.
220 smtp.aliyun.com MX AliMail Server(127.0.0.1)
EHLO localhost                             # EHLO 开启smtp会话,并向服务器提供客户机主机名
250-smtp.aliyun.com
250-8BITMIME
250-AUTH=PLAIN LOGIN XALIOAUTH
250-AUTH PLAIN LOGIN XALIOAUTH
250-PIPELINING
250 DSN
AUTH LOGIN                                 # 开启身份认证
334 dXNlcm5hbWU6 
aGVsbG9AYWxpeXVuLmNvbQ==                   #base64编码后的用户名
334 UGFzc3dvcmQ6                         
5LiN5ZGK6K+J5L2g                           #base64编码后的密码
235 Authentication successful
MAIL FROM: <hello@aliyun.com>              # 发件人 , 邮件地址放在<>中
250 Mail Ok
RCPT TO: <a1@163.com>                      # 收件人,如果有多个收件人要分开写
250 Rcpt Ok
RCPT TO: <q1@qq.com>                       # 收件人
250 Rcpt Ok
RCPT TO: <q2@qq.com>                       # 收件人
250 Rcpt Ok
RCPT TO: <q3@qq.com>                       # 收件人
250 Rcpt Ok
DATA                                       # 收件方把该命令之后的数据作为发送的数据
354 End data with <CR><LF>.<CR><LF>
Content-Type: text/plain; charset="utf-8"  # 指定编码类型,防止中文乱码
Content-Transfer-Encoding: base64          # 指定数据压缩格式
From: hello@aliyun.com                     # 发件人
To: a1@163.com,q1@qq.com                   # 收件人,如果时多个收件人中间用逗号隔开
Cc: q2@qq.com                              # 抄送对象
Bcc: q3@qq.com                             # 暗送对象
Subject: =?utf-8?b?57uI56uv5L2/55SodGVsZW505Y+R6YCB6YKu5Lu2?=   # 主题,如果utf-8编码,并采用base64对数据压缩,其格式为: =?utf-8?b?base64压缩后的数据?=, 压缩前数据为:终端使用telent发送邮件

5L2g5aW9dGVsbmV0LOS9oOWlvXB5dGhvbg==       # 这里是正文,base64压缩后的数据,压缩前为: 你好telnet,你好python  注意: 正文与上面的Subject之前需要两个换行(\r\n), 即空一行,而正文与下面的.也需要一个换行
.  # .表示邮件数据结束
250 Data Ok: queued as freedom
QUIT                                       # 结束会话
221 Bye
Connection closed by foreign host.

 

关于收件人、抄送、密送

抄送好比微博中的@即告知。职场中惯用的邮件抄送是用来告诉上级或者团队,便于其他人对事情进度的知情,也是对自己工作进度的一种反馈。

密送好比私信。所有收件人、抄送人都无法获知秘密收件人邮箱地址。即使秘密收件人本身,也无法获取除自身以外的其他密送人信息。

 

重要:

  •   发一次邮件,如果有N个人接收(N为收件人、抄送人、密送之和),就需要在N次RCPT TO。也就是说如果每少写一次RCTP TO,就会有一个人接收人收不到邮件
  •   在DATA里面写的TO、CC、BCC等信息只起显示作用,与实际接收人无关。

  因此存在这样的情况: A要发送邮件给B,C,同时抄送给D,密送给E ,假设是通过telnet 发送, RCTP TO了四次,但是在DATA中少写了CC项即抄送项。由于DATA里的TO、CC、BCC等信息只起显示作用。 实际D能收到邮件,但是因为邮件中只有接收人,缺少抄送人选项。因此你D会误以为是A秘密给他发了邮件。

 

参考:

使用stmp发送邮件

如何通过 SMTP 方式发送带附件的邮件?


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM