Email基础知识: SMTP/POP3 命令简介
SMTP 命令简介
什么是 SMTP
SMTP (Simple Mail Transfer Protocol) : 电子邮件从客户机传输到服务器或从某一个服务器传输到另一个服务器使用的传输协议。 SMTP 是请求/响应协议,命令和响应都是基于 ASCII 文本,并以 CR 和 LF 符结束。响应包括一个表示返回状态的三位数字代码。SMTP 在 TCP 协议 25 端口监听连接请求。什么是 ESMTP
ESMTP (Extended SMTP),顾名思义,扩展 SMTP 就是对标准 SMTP 协议进行的扩展。它与 SMTP 服务的区别仅仅是,使用 SMTP 发信不需要验证用户帐户,而用 ESMTP 发信时, 服务器会要求用户提供用户名和密码以便验证身份。验证之后的邮件发送过程与 SMTP 方式没有两样。SMTP 命令
SMTP 命令包括:
HELO 向服务器标识用户身份。发送者能欺骗,说谎,但一般情况下服务器都能检测到。
EHLO 向服务器标识用户身份。发送者能欺骗,说谎,但一般情况下服务器都能检测到。
MAIL FROM 命令中指定的地址是发件人地址
RCPT TO 标识单个的邮件接收人;可有多个 RCPT TO;常在 MAIL 命令后面。
DATA 在单个或多个 RCPT 命令后,表示所有的邮件接收人已标识,并初始化数据传输,以 CRLF.CRLF 结束
VRFY 用于验证指定的用户/邮箱是否存在;由于安全方面的原因,服务器常禁止此命令
EXPN 验证给定的邮箱列表是否存在,扩充邮箱列表,也常被禁用
HELP 查询服务器支持什么命令
NOOP 无操作,服务器应响应 OK
RSET 重置会话,当前传输被取消
QUIT 结束会话连接到 Postfix 使用 SMTP 命令发送邮件
例如:安装 Postfix 的邮件服务器IP是192.168.0.1 (蓝色字体内容由客户端输入,红色字体内容是服务返回的)telnet 192.168.0.1 25 ————————————— 使用 telnet 命令连接服务器 25 端口
Trying 192.168.0.1… ————————————— 正在连接服务器 25 端口
Connected to 192.168.0.1. ———————————– 连接服务器 25 端口成功
220 localhost ESMTP Postfix – by ExtMail ——————– 显示服务器标识 ( 修改main.cf 的smtpd_banner)
helo test.com ———————————————– 向服务器标识用户身份,发信不要认证,跳过下面几步直接发送 mail from 命令
250 localhost
ehlo test.com ———————————————— ESMTP 命令,发信需要认证。
250-localhost
250-PIPELINING
250-SIZE 102400000
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
auth login ————————————————- 进行用户身份认证
334 VXNlcm5hbWU6
Y29zdGFAYW1heGl0Lm5ldA== ———————————– BASE64 加密后的用户名
334 UGFzc3dvcmQ6
MTk4MjIxNA== ———————————————– BASE64 加密后的密码
235 authentication successfully —————————- 身份认证成功
(535 authentication failed ——————————— 身份认证失败)
发到本系统中域名下的账户可跳过身份认证。
mail from: <test1@domain.com> —————————— mail from 地址 test1@domain.com
250 ok —————————————————– 命令执行成功
rcpt to: <test2@domain.com> ——————————– 递送给地址 test2@domain.com
250 ok —————————————————– 命令执行成功
data ——————————————————- 数据传输初始化
354 End data with .—————————————– 开始传输数据
From: test1@domain.com
To: test2@domain.com
Date: Mon, 25 Oct 2004 14:24:27 +0800
Subject: test mailHi, test2
This is a test mail, you don’t reply it..
———————————————————— 数据内容,包括BASE64加密后的邮件内容, 以 CRLF.CRLF 结束数据传输
250 OK: queued as 2F6DE3929——————————— 命令执行成功
quit ——————————————————- 结束会话
221 Bye
Connection closed by foreign host .————————- 断开连接
注意:
本问引用自:http://www.magicwinmail.com/technic_smtp.htm 并做了小量修改。 ======================================================
以下由genius提供的POP3命令简介,将原来单独置顶的文章去掉,融合到这里。
Email基础知识: POP3命令简介
什么是 POP3
POP3 (Post Office Protocol 3) 即邮局协议的第 3 个版本,它规定怎样将个人计算机连接到 Internet 的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的
第一个离线协议标准, POP3 允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循 POP3 协议的接收邮件服务器,用来接收电子邮件的。POP3 命令
POP3 命令包括:
USER username 认证用户名
PASS password 认证密码认证,认证通过则状态转换
APOP name,digest 认可一种安全传输口令的办法,执行成功导致状态转换,请参见 RFC 1321 。
STAT 处理请求 server 回送邮箱统计资料,如邮件数、 邮件总字节数
UIDL n 处理 server 返回用于该指定邮件的唯一标识, 如果没有指定,返回所有的。
LIST n 处理 server 返回指定邮件的大小等
RETR n 处理 server 返回邮件的全部文本
DELE n 处理 server 标记删除,QUIT 命令执行时才真正删除
RSET 处理撤消所有的 DELE 命令
TOP n,m 处理 返回 n 号邮件的前 m 行内容,m 必须是自然数
NOOP 处理 server 返回一个肯定的响应
QUIT 希望结束会话。如果 server 处于”处理” 状态,则现在进入”更新”状态,删除那些标记成删除的邮件。如果 server 处于”认可”状态,则结束会话时 server 不进入”更新”状态 。使用 telnet 连接 Winmail Server 收信
例如:安装 Winmail 的邮件服务器 IP 是 192.168.0.1(蓝色字体内容由客户端输入,红色字体内容是服务返回的)
telnet 119.119.119.212 110 —————————– 使用 telnet 命令连接服务器 110 端口
Trying 119.119.119.212… —————————— 正在连接服务器 110 端口
Connected to 119.119.119.212. ————————– 连接服务器 110 端口成功
+OK Winmail Mail Server POP3 ready
user username —————————————— 输入用户名, username 为具体的用户名
+OK —————————————————- 执行命令成功
pass password —————————————— 输入用户密码,password 为具体的密码,这里要注意,当密码输入错误后要重新user username后再运行此命令,否则提示命令无效
+OK 2 messages —————————————– 密码认证通过
(-ERR authorization failed —————————– 密码认证失败)
stat ————————————————— 邮箱状态
+OK 2 6415 ——————————————— 2 为该信箱总邮件数,6415 为总字节数
list ————————————————— 列出每封邮件的字节数
+OK —————————————————- 执行命令成功,开始显示,左边为邮件的序号,右边为该邮件的大小
1 537 ————————————————– 第 1 封邮件,大小为 537 字节
2 5878 ————————————————- 第 2 封邮件,大小为 5878 字节
.
top 1 ————————————————– 接收第 1 封邮件
+OK —————————————————- 接收成功, 返回第 1 封邮件头
Return-Path: <test1@look.com>
Delivered-To: test2@look.com
Received: (winmail server invoked for smtp delivery); Mon, 25 Oct 2004 14:24:27 +0800
From: test1@look.com
To: test2@look.com
Date: Mon, 25 Oct 2004 14:24:27 +0800
Subject: test mail
.
retr 1 ————————————————- 接收第 1 封邮件
+OK —————————————————- 接收成功, 返回第 1 封邮件全部内容
Return-Path: <test1@look.com>
Delivered-To: test2@look.com
Received: (winmail server invoked for smtp delivery); Mon, 25 Oct 2004 14:24:27 +0800From: test1@look.com
To: test2@look.com
Date: Mon, 25 Oct 2004 14:24:27 +0800
Subject: test mailHi, test2
This is a test mail, you don’t reply it..
dele 1 ————————————————- 删除第 1 封邮件
+OK —————————————————- 删除成功
dele 2 ————————————————- 删除第 2 封邮件
+OK —————————————————- 删除成功
quit ————————————————— 结束会话
+OK —————————————————- 执行命令成功MTP 命令
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
终止会话。
昨天突然想做一个apache rewrite
装了apmserv,看了好多关于apache rewrite
通过apmserv,按着教程做,基本是不成功的
其实apmserv已经开启了rewrite功能
主要修改下面两个地方
打开apache的conf的http.conf
找到你所在的虚拟目录修改以下两个地方(如果你有多个主机的话就在apmserv里的vhost.conf里)
AllowOverride None
改成
AllowOverride Options FileInfo
RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* - [F]
改成(如果没有则添加)
RewriteEngine On
RewriteRule ^list1-([0-9]+)-([0-9]+)\.html$ list1.php?id=$1&page=$2
注:这里的规则可以自己填啦,我这里的不一定能适合你的

