SMTP的相关命令

SMTP是Simple Mail Transfer Protocol的简写。

邮件是日常工作、生活中不能缺少的一个工具,下面是邮件收发的流程。

邮件的发送,主要是通过SMTP协议来实现的。SMTP协议最早在RFC 821(1982年)中定义,最后更新是在RFC 5321(2008年)中,更新中包含了扩展SMTP(ESMTP)。

在平时的程序开发中经常会有发送邮件的这种需求,所以免不了要对邮件发送服务器的可用性进行测试。下面是整理的命令,用来在命令行下测试SMTP服务器,进行邮件发送等操作,相信对于加深SMTP的理解可以起到促进作用。

SMTP默认使用25端口,我们可以使用telnet工具进行测试。

1、连接SMTP服务器,查看是否存活。

     >telnet smtp.sina.com 25

     >Connected to mail.sina.com.

     >Escape character is '^]'.

     >220 smtp ready

     在telnet下转义符是Ctrol+],如果想退出,按转义符后输入quit,就可以退回到命令行了。

2、用户登陆

     连接到服务器后,使用AUTH LOGIN命令进行用户登陆(SMTP命令不区分大小写)

     >auth login

     >334 VXNlcm5hbWU6

     >c2VydmljZUBoZWVwLmNx

     >334 UGFzc3dvcmQ6

     >xxxxxxxx

     >235 go ahead

     235返回码表明登陆验证成功,用户可以进行后续的操作了。用户邮箱和密码是经过Base64编码的,这个与服务器的安全特性相关,属于可配置项。

3、发送邮件。

     用户身份验证通过后,执行下面的命令进行邮件的发送。

     >235 #2.0.0 OK Authenticated

     >MAIL FROM: yunpan001@sina.com

     >250 sender <yunpan001@sina.com> ok

     >RCPT to: cocowool@gmail.com

     >250 recipient <cocowool@gmail.com> ok

     >DATA

     >354 go ahead

     >Subject: Hi smtp mail

     >hello mail

     >.

     >250 ok:  Message 1763097690 accepted

SMTP命令列表

HELO

客户端为标识自己的身份而发送的命令(通常带域名)

EHLO

使服务器可以表明自己支持扩展简单邮件传输协议 (ESMTP) 命令。

MAIL FROM

标识邮件的发件人;以 MAIL FROM: 的形式使用。

RCPT TO

标识邮件的收件人;以 RCPT TO: 的形式使用。

TURN

允许客户端和服务器交换角色,并在相反的方向发送邮件,而不必建立新的连接。

ATRN

ATRN (Authenticated TURN) 命令可以选择将一个或多个域作为参数。如果该会话已通过身份验证,则ATRN 命令一定会被拒绝。

SIZE

提供一种使 SMTP 服务器可以指出所支持的最大邮件大小的机制。兼容的服务器必须提供大小范围,以指出可以接受的最大邮件大小。客户端发送的邮件不应大于服务器所指出的这一大小。

ETRN

SMTP 的扩展。SMTP 服务器可以发送 ETRN 以请求另一台服务器发送它所拥有的任何电子邮件。

PIPELINING

提供发送命令流(而无需在每个命令之后都等待响应)的能力。

CHUNKING

替换 DATA 命令的 ESMTP 命令。该命令使 SMTP 主机不必持续地扫描数据的末尾,它发送带参数的 BDAT 命令,该参数包含邮件的总字节数。接收方服务器计算邮件的字节数,如果邮件大小等于 BDAT 命令发送的值时,则该服务器假定它收到了全部的邮件数据。

DATA

客户端发送的、用于启动邮件内容传输的命令。

DSN

启用传递状态通知的 ESMTP 命令。

RSET

使整个邮件的处理无效,并重置缓冲区。

VRFY

确认在邮件传递过程中可以使用邮箱;例如,vrfy ted 确认在本地服务器上驻留 Ted 的邮箱。该命令在 Exchange 实现中默认关闭。

HELP

返回 SMTP 服务所支持的命令列表。

QUIT

终止会话。

SMTP命令响应码

211  System status, or system help reply 214  Help message (Information on how to use the receiver or the meaning of a particular non-standard command; this reply is useful only to the human user) 220  <domain> Service ready 221  <domain> Service closing transmission channel 250  Requested mail action okay, completed 251  User not local; will forward to <forward-path> (See Section 3.4) 252  Cannot VRFY user, but will accept message and attempt delivery (See Section 3.5.3) 354  Start mail input; end with <CRLF>.<CRLF> 421  <domain> Service not available, closing transmission channel (This may be a reply to any command if the service knows it must shut down) 450  Requested mail action not taken: mailbox unavailable (e.g., mailbox busy or temporarily blocked for policy reasons) 451  Requested action aborted: local error in processing 452  Requested action not taken: insufficient system storage 455  Server unable to accommodate parameters 500  Syntax error, command unrecognized (This may include errors such as command line too long) 501  Syntax error in parameters or arguments502  Command not implemented (see Section 4.2.4)

503  Bad sequence of commands 504  Command parameter not implemented 550  Requested action not taken: mailbox unavailable (e.g., mailbox not found, no access, or command rejected for policy reasons)

551  User not local; please try <forward-path> (See Section 3.4) 552  Requested mail action aborted: exceeded storage allocation 553  Requested action not taken: mailbox name not allowed (e.g.,mailbox syntax incorrect) 554  Transaction failed (Or, in the case of a connection-opening response, "No SMTP service here") 555  MAIL FROM/RCPT TO parameters not recognized or not implemente

参考资料:

1、SMTP指令说明

2、SMTP百度百科

3、Wiki Smtp

4、RFC 5321

5、电子邮件收发原理和实现

6、Telnet下Smtp命令发送邮件

7、Send Mail Using Telnet

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏安富莱嵌入式技术分享

【RL-TCPnet网络教程】第34章 RL-TCPnet之SMTP客户端

本章节为大家讲解RL-TCPnet的SMTP应用,学习本章节前,务必要优先学习第33章的SMTP基础知识。有了这些基础知识之后,再搞本章节会有事半功倍的效果。

881
来自专栏有趣的Python

10- vue django restful framework 打造生鲜超市 -用户登录和手机注册(中)

Vue+Django REST framework实战 搭建一个前后端分离的生鲜超市网站 Django rtf 完成 手机注册和用户登录(中) Json...

76011
来自专栏Android先生

RxJava2 实战知识梳理(1) - 后台执行耗时操作,实时通知 UI 更新

接触RxJava2已经很久了,也看了网上的很多文章,发现基本都是在对RxJava的基本思想介绍之后,再去对各个操作符进行分析,但是看了之后感觉过了不久就...

1072
来自专栏有趣的django

Django REST framework+Vue 打造生鲜超市(六) 七、用户登录与手机注册

七、用户登录与手机注册 7.1.drf的token (1)INSTALL_APP中添加 INSTALLED_APPS = ( ... 'rest...

2K8
来自专栏GreenLeaves

邮件发送功能开发

作为一名.Net开发,"邮件发送"功能的开发和使用是必须要掌握的,因为这个功能作为“消息推送”的一种手段经常出现在各种.Net系统中,所以本文将对.Net平台下...

6397
来自专栏漏斗社区

冷场了吗?我带着phpcms9.6.2 注入来救场了

0x00 背景 最近做代码审计的时候发现phpcms 有更新,现在漏洞详情基本不公开,想要知道漏洞的利用方法只能自己审计了,通常可进行新旧版本的代码比较了,来定...

41111
来自专栏landv

烽火2640路由器命令行手册-07-安全配置命令

本章描述了用来配置AAA认证方法的命令。认证在用户被允许访问网络和网络服务之前对他们作出访问权利的鉴定。

1092
来自专栏魏艾斯博客www.vpsss.net

补充记录腾讯云 DNSPod 域名 API 申请 Let’s Encrypt 泛域名 SSL 证书需要注意的几点

1944
来自专栏耕耘实录

Linux环境中,GitHub的配置使用极简教程

版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢

1151
来自专栏FreeBuf

BT5 + wireshark玩wifi捕获和中间人攻击

前言:先说明一下,这个文章不是我写的,是一个老外(Deepanshu Kapoor)安全专家写的,我一开始就是看着玩,但整个看完被老外那个细心和耐心给打动了,整...

2625

扫码关注云+社区

领取腾讯云代金券