ExtMail服务器社区's Archiver

hzqbbc 发表于 2005-10-16 10:25

Email基础知识: SMTP/POP3 命令简介

<blockquote style="font-size: 12px; font-family: simsun,arial,helvetica,clean,sans-serif">
<p><b>SMTP 命令简介</font></b><br><br>
<p><font class="head3">什么是 SMTP</font><br>
SMTP (Simple Mail Transfer Protocol) : 电子邮件从客户机传输到服务器或从某一个服务器传输到另一个服务器使用的传输协议。
SMTP 是请求/响应协议,命令和响应都是基于 ASCII 文本,并以 CR 和 LF 符结束。响应包括一个表示返回状态的三位数字代码。SMTP 在
TCP 协议 25 端口监听连接请求。</p>

<p><font class="head3">什么是 ESMTP</font><br>
ESMTP (Extended SMTP),顾名思义,扩展 SMTP 就是对标准 SMTP 协议进行的扩展。它与 SMTP 服务的区别仅仅是,使用 SMTP 发信不需要验证用户帐户,而用 ESMTP 发信时,
服务器会要求用户提供用户名和密码以便验证身份。验证之后的邮件发送过程与 SMTP 方式没有两样。</p>

<p><font class="head3">SMTP 命令</font><br>
SMTP 命令包括:<br>
HELO 向服务器标识用户身份。发送者能欺骗,说谎,但一般情况下服务器都能检测到。 <br>
EHLO 向服务器标识用户身份。发送者能欺骗,说谎,但一般情况下服务器都能检测到。<br>
MAIL FROM 命令中指定的地址是发件人地址<br>
RCPT TO 标识单个的邮件接收人;可有多个 RCPT TO;常在 MAIL 命令后面。<br>
DATA 在单个或多个 RCPT 命令后,表示所有的邮件接收人已标识,并初始化数据传输,以 CRLF&#46;CRLF 结束  <br>
VRFY 用于验证指定的用户/邮箱是否存在;由于安全方面的原因,服务器常禁止此命令  <br>
EXPN 验证给定的邮箱列表是否存在,扩充邮箱列表,也常被禁用  <br>
HELP 查询服务器支持什么命令  <br>
NOOP 无操作,服务器应响应 OK  <br>
RSET 重置会话,当前传输被取消<br>
QUIT 结束会话  <br>
<br>
<font class="head3">连接到 Postfix 使用 SMTP 命令发送邮件</font><br>
例如:安装 Postfix 的邮件服务器IP是192&#46;168&#46;0&#46;1 (蓝色字体内容由客户端输入,红色字体内容是服务返回的) </p>
<p><font color="#0000FF">telnet 192&#46;168&#46;0&#46;1 25 </font>--------------------------------------- 使用 telnet 命令连接服务器 25 端口 <br>
<font color="#FF0000">Trying 192&#46;168&#46;0&#46;1&#46;&#46;&#46;</font> --------------------------------------- 正在连接服务器 25 端口 <br>
<font color="#FF0000">Connected to 192&#46;168&#46;0&#46;1&#46; </font>----------------------------------- 连接服务器 25 端口成功 <br>
<font color="#FF0000">220 localhost ESMTP Postfix - by ExtMail </font>-------------------- 显示服务器标识 ( 修改main&#46;cf 的smtpd_banner) <br>
<font color="#0000FF">helo test&#46;com</font> ----------------------------------------------- 向服务器标识用户身份,发信不要认证,跳过下面几步直接发送 mail from 命令 <br>
<font color="#FF0000">
250 localhost</font><br>
<font color="#0000FF">
ehlo test&#46;com</font> ------------------------------------------------ ESMTP 命令,发信需要认证。<br>
<font color="#FF0000">
250-localhost</br>
250-PIPELINING</br>
250-SIZE 102400000</br>
250-VRFY</br>
250-ETRN</br>
250-AUTH LOGIN PLAIN</br>
250-AUTH=LOGIN PLAIN</br>
250-ENHANCEDSTATUSCODES</br>
250-8BITMIME</br>
250 DSN</br>
</font>
<font color="#0000FF">auth login</font> ------------------------------------------------- 进行用户身份认证 <br>
<font color="red">334 VXNlcm5hbWU6 </font> <br>
<font color="blue">Y29zdGFAYW1heGl0Lm5ldA== </font>----------------------------------- BASE64 加密后的用户名 <br>
<font color="red">334 UGFzc3dvcmQ6 </font>     <br>
<font color="blue">MTk4MjIxNA==</font> ----------------------------------------------- BASE64 加密后的密码 <br>
<font color="red">235 authentication successfully </font>---------------------------- 身份认证成功 <br>
(<font color="#FF0000">535 authentication failed </font>--------------------------------- 身份认证失败)<br>
发到本系统中域名下的账户可跳过身份认证。<br>
<font color="#0000FF">mail from: <[email]test1@domain&#46;com[/email]></font> ------------------------------ mail from 地址 [email]test1@domain&#46;com[/email]<br>
<font color="#FF0000">250 ok </font>----------------------------------------------------- 命令执行成功 <br>
<font color="#0000FF">rcpt to: <[email]test2@domain&#46;com[/email]> </font>-------------------------------- 递送给地址 [email]test2@domain&#46;com[/email]<br>
<font color="#FF0000">250 ok </font>----------------------------------------------------- 命令执行成功 <br>
<font color="#0000FF">data</font> ------------------------------------------------------- 数据传输初始化 <br>
<font color="#FF0000">354 End data with <CR><LF>&#46;<CR><LF></font>----------------------------------------- 开始传输数据 <br>
<font color="#0000FF">From: [email]test1@domain&#46;com[/email]<BR>
To: [email]test2@domain&#46;com[/email]<BR>
Date: Mon, 25 Oct 2004 14:24:27 +0800<BR>
Subject: test mail <BR>
<BR>
Hi, test2 <BR>
This is a test mail, you don't reply it&#46; <BR>
<BR>
&#46;<br>
</FONT> ------------------------------------------------------------ 数据内容,包括BASE64加密后的邮件内容, 以 CRLF&#46;CRLF 结束数据传输 <br>
<font color="#FF0000">250 OK: queued as 2F6DE3929</font>--------------------------------- 命令执行成功 <br>
<font color="#0000FF">quit</font> ------------------------------------------------------- 结束会话 <br>
<font color="#FF0000">221 Bye</font><br>
<font color="#FF0000">Connection closed by foreign host</font> &#46;------------------------- 断开连接 </p>
</blockquote>

<b>注意:</b></br>

本问引用自:<a href="http://www&#46;magicwinmail&#46;com/technic_smtp&#46;htm">[url]http://www&#46;magicwinmail&#46;com/technic_smtp&#46;htm[/url]</a> 并做了小量修改。


======================================================</br>
<b>以下由genius提供的POP3命令简介,将原来单独置顶的文章去掉,融合到这里。</b>

<blockquote style="font-size: 12px; font-family: simsun,arial,helvetica,clean,sans-serif">
<p><span class="tpc_content"><b>Email基础知识: POP3命令简介</b><br>
<b>什么是 POP3</b><br>
POP3 (Post Office Protocol 3) 即邮局协议的第 3 个版本,它规定怎样将个人计算机连接到 Internet
的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的         <br>
第一个离线协议标准, POP3 允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循 POP3
协议的接收邮件服务器,用来接收电子邮件的。</p><br>
<br>
POP3 命令<br>
POP3 命令包括:<br>
USER username 认证用户名         <br>
PASS password 认证密码认证,认证通过则状态转换         <br>
APOP name,digest 认可一种安全传输口令的办法,执行成功导致状态转换,请参见 RFC 1321 。         <br>
STAT 处理请求 server 回送邮箱统计资料,如邮件数、 邮件总字节数         <br>
UIDL n 处理 server 返回用于该指定邮件的唯一标识, 如果没有指定,返回所有的。         <br>
LIST n 处理 server 返回指定邮件的大小等         <br>
RETR n 处理 server 返回邮件的全部文本         <br>
DELE n 处理 server 标记删除,QUIT 命令执行时才真正删除         <br>
RSET 处理撤消所有的 DELE 命令         <br>
TOP n,m 处理 返回 n 号邮件的前 m 行内容,m 必须是自然数         <br>
NOOP 处理 server 返回一个肯定的响应         <br>
QUIT 希望结束会话。如果 server 处于"处理" 状态,则现在进入"更新"状态,删除那些标记成删除的邮件。如果 server
处于"认可"状态,则结束会话时 server 不进入"更新"状态 。</p>         <br>
<br>
使用 telnet 连接 Winmail Server 收信<br>
例如:安装 Winmail 的邮件服务器 IP 是 192&#46;168&#46;0&#46;1(蓝色字体内容由客户端输入,红色字体内容是服务返回的) </p><br>
  <font color="blue">telnet 119&#46;119&#46;119&#46;212 110 </font>
----------------------------- 使用 telnet 命令连接服务器 110 端口       <br>
  <font color="red">Trying 119&#46;119&#46;119&#46;212&#46;&#46;&#46; </font>
------------------------------ 正在连接服务器 110 端口       <br>
  <font color="red">Connected to 119&#46;119&#46;119&#46;212&#46;</font>
-------------------------- 连接服务器 110 端口成功       <br>
  <font color="red">+OK Winmail Mail Server POP3 ready</font>         <br>
  <font color="blue">user username</font>
------------------------------------------ 输入用户名, username 为具体的用户名       <br>
  <font color="red">+OK </font>
---------------------------------------------------- 执行命令成功<br>
  <font color="blue">pass password</font>
------------------------------------------ 输入用户密码,password
为具体的密码,这里要注意,当密码输入错误后要重新user username后再运行此命令,否则提示命令无效       <br>
  <font color="red">+OK 2 messages </font>
----------------------------------------- 密码认证通过 <br>
  (<font color="red">-ERR authorization failed</font>
----------------------------- 密码认证失败)       <br>
  <font color="blue">stat</font>
--------------------------------------------------- 邮箱状态 <br>
  <font color="red">+OK 2 6415 </font>
--------------------------------------------- 2 为该信箱总邮件数,6415 为总字节数       <br>
  <font color="blue">list</font>
--------------------------------------------------- 列出每封邮件的字节数 <br>
  <font color="red">+OK </font>
----------------------------------------------------
执行命令成功,开始显示,左边为邮件的序号,右边为该邮件的大小 <br>
  <font color="red">1 537</font>
-------------------------------------------------- 第 1 封邮件,大小为 537 字节       <br>
  <font color="red">2 5878 </font>
------------------------------------------------- 第 2 封邮件,大小为 5878 字节       <br>
  <font color="red">&#46;</font><br>
  <font color="blue">top 1 </font>
-------------------------------------------------- 接收第 1 封邮件 <br>
  <font color="red">+OK</font>
---------------------------------------------------- 接收成功, 返回第 1 封邮件头<br>
  <font color="red">Return-Path: <<a style="text-decoration: none" href="mailto:test1@look&#46;com">test1@look&#46;com</a>><br>
  Delivered-To: <a style="text-decoration: none" href="mailto:test2@look&#46;com">
test2@look&#46;com</a><br>
  Received: (winmail server invoked for smtp delivery); Mon, 25 Oct 2004
14:24:27 +0800<br>
  From: <a style="text-decoration: none" href="mailto:test1@look&#46;com">
test1@look&#46;com</a><br>
  To: <a style="text-decoration: none" href="mailto:test2@look&#46;com">
test2@look&#46;com</a><br>
  Date: Mon, 25 Oct 2004 14:24:27 +0800<br>
  Subject: test mail <br>
  &#46;</font>     <br>
  <font color="blue">retr 1 </font>
------------------------------------------------- 接收第 1 封邮件     <br>
  <font color="red">+OK</font>
---------------------------------------------------- 接收成功, 返回第 1 封邮件全部内容<br>
  <font color="red">Return-Path: <<a style="text-decoration: none" href="mailto:test1@look&#46;com">test1@look&#46;com</a>><br>
  Delivered-To: <a style="text-decoration: none" href="mailto:test2@look&#46;com">
test2@look&#46;com</a><br>
  Received: (winmail server invoked for smtp delivery); Mon, 25 Oct 2004
14:24:27 +0800<br>
  <br>
From: <a style="text-decoration: none" href="mailto:test1@look&#46;com">
test1@look&#46;com</a><br>
  To: <a style="text-decoration: none" href="mailto:test2@look&#46;com">
test2@look&#46;com</a><br>
  Date: Mon, 25 Oct 2004 14:24:27 +0800<br>
  Subject: test mail <br>
  <br>
  Hi, test2 <br>
  This is a test mail, you don't reply it&#46;<br>
  <br>
  &#46;<br>
  </font><br>
  <font color="blue">dele 1 </font>
------------------------------------------------- 删除第 1 封邮件   <br>
  <font color="red">+OK</font>
---------------------------------------------------- 删除成功     <br>
  <font color="blue">dele 2 </font>
------------------------------------------------- 删除第 2 封邮件   <br>
  <font color="red">+OK</font>
---------------------------------------------------- 删除成功     <br>
  <font color="blue">quit</font>
--------------------------------------------------- 结束会话 <br>
  <font color="red">+OK </font>
---------------------------------------------------- 执行命令成功 </p><br>
</blockquote>
<br>
注意:<br>
本问引用自:<a target="_blank" style="text-decoration: none" href="http://www&#46;magicwinmail&#46;com/technic_pop3&#46;htm">[url]http://www&#46;magicwinmail&#46;com/technic_pop3&#46;htm[/url]</a>
并做了小量修改,呵呵向hzqbbc学习的,希望可以置顶</span><br>
</p>

windowsxp 发表于 2005-10-16 11:13

顶!支持!

jack 发表于 2005-10-16 11:20

这个应算是个新手必看教程,置顶吧

jamesxu 发表于 2005-10-17 08:59

看到了宝贝了,非常感谢版主。对我近几天的技术支持。

judy 发表于 2005-10-20 13:24

这篇太好了,最适合我这样的菜鸟了.
太谢谢了~~~

genius 发表于 2005-11-20 00:42

搞不懂
HELO 向服务器标识用户身份。发送者能欺骗,说谎,但一般情况下服务器都能检测到。
EHLO 向服务器标识用户身份。发送者能欺骗,说谎,但一般情况下服务器都能检测到。
有什么区别

hzqbbc 发表于 2005-11-21 08:25

[quote][b]下面是引用genius于2005-11-20 00:42发表的:[/b]
搞不懂
HELO 向服务器标识用户身份。发送者能欺骗,说谎,但一般情况下服务器都能检测到。
EHLO 向服务器标识用户身份。发送者能欺骗,说谎,但一般情况下服务器都能检测到。
有什么区别[/quote]

EHLO 主要是为了检测接收方服务器对ESMTP的支持情况而已,HELO的内容完全可以伪造。

这个是因为SMTP协议本身不具备来源识别功能。

使用EHLO 的话接收方服务器将显示其是否支持SMTP 认证,以及支持认证的类别等信息,发送

HELO时没有这个功能。

manito 发表于 2005-12-2 15:24

需要一些基础知识

teqv 发表于 2005-12-15 18:07

这篇太好了,最适合我这样的菜鸟了.
太谢谢了~~~

niweiming777 发表于 2006-1-20 14:09

good article, I like it.Thanks

silentime 发表于 2006-5-25 15:56

有个问题请教:

1).postfix的smtp验证时的用户名是带域名的么?这个怎么设置?
2).smtp验证时的密文形式怎么获得?
3).同1的pop验证的用户名?

maoyaowu 发表于 2006-6-4 10:23

好文章,专业!

thinkwzb 发表于 2006-6-9 10:27

顶!!!

tweinan 发表于 2006-6-26 23:04

感谢楼主!

aximofu 发表于 2006-6-30 21:49

谢谢楼主.受教了

solarwind 发表于 2006-7-14 12:52

真不错 ~很适合我这样的菜鸟~多谢了~

viiqii 发表于 2006-8-24 16:02

很基础的东西,但是很经常使用。。。

soso_com 发表于 2006-9-16 20:07

很好!不过,要十分注意:
This is a test mail, you don&#39;t reply it.

.
------------------------------------------------------------ 数据内容,包括BASE64加密后的邮件内容, 以 CRLF.CRLF 结束数据传输
用smtp语句发邮件的时候,要结束信的内容一定注意用" .  "结束,不然你怎么都退不出来!

wxhh12 发表于 2006-11-8 17:35

upupup

wxhh12 发表于 2006-11-8 17:40

upupup

zhoubingfeng 发表于 2006-11-15 22:42

太好了!!谢了!!

linliangde 发表于 2009-9-21 14:25

LZ写得真详细;收下了

jasen0313 发表于 2011-3-18 18:14

非常感谢

sophinalove 发表于 2011-10-29 23:12

:lol 这个基础知识值得细读。

页: [1]

Powered by Discuz! Archiver 7.0.0  © 2001-2009 Comsenz Inc.