您的位置:首页 > 其它

实习第三天小结 2010.07.21

2010-07-21 09:58 141 查看
跟小刁聊了一下,今天主要看看邮件的基本知识(Email基础的RFC了解),对应Development Process中的第二节,主要包括以下几个方面:

# 能够了解POP3/SMTP/IMAP协议 认证、收发信过程,知道POP3、IMAP能支持哪些操作;
# 能够简单了解一封邮件的信头及信体各个字段的含义;
# 能够了解一封邮件的发送传递过程;
# 能够了解邮箱附件的处理方式;

以下是一些参考的RFC标准:

RFC标准文档:

SMTP(Simple Mail Transfer Protocol)

POP3(Post Office Protocol - Version 3)

IMAP(Internet Message Access Protocol - Version 4rev1)

IMF (Internet Message Format)

MIME(Multipurpose Internet Mail Extensions)

其他相关RFC标准文档,可选:

Augmented BNF for Syntax Specifications: ABNF

SMTP Service Extension for Command Pipelining

天道酬勤

----------------------------------------------------------------------------------------------

早上小刁也给了一个小任务,用perl实现一个监控脚本。虽说很简单,但是对于没写过perl的我来说,还是有一点挑战的,决定先弄这个。

----------------------------------------------------------------------------------------------

下午重新学习perl,发现脚本果然是不错的语言。

晚饭前终于重新看了一遍perl,还有把小刁的任务完成了。

吃饭回来看一看RFC。

----------------------------------------------------------------------------------------------

(一)STMP

①一些关键词:

基于TCP传输,建模在FTP上,25端口

②工作原理:

SMTP 协议是最早出现的, 也是被普遍使用的最基本Internet 邮件服务协议。SMTP 工作在两种情况下: 一是电子邮件从客户机传输到服务器; 二是从某一个服务器传输到另一个服务器。SMTP 是个请求/响应协议, 它在TCP 协议25 号端口监听连接请求, 它的连接和发送过程如下:
1. 客户端要通过25 端口与邮件服务器建立TCP 连接;
2. 客户端收到响应后发送HELO 命令以标识发件人自己的身份, 然后客户端发送MAIL 命令, 服务器端以OK 作为响应, 表明准备接收;
3. 客户端发送RCPT 命令, 以标识该电子邮件的计划接收人, 服务器端则表示是否愿意为收件人接收邮件;
4. 协商结束, 用命令DATA 发送邮件, 以“0”表示结束;
5. 发送成功后客户端请求断开连接, 服务器断开连接。这样就完成邮件连接和发送的过程, 该过程可在命令提示符下通过telnet( 主机名) 25 来完成。

③例子:(也包括一些讲解)

→什么是 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 结束会话

连接 Winmail Server 使用 SMTP 命令发送邮件
例如:安装 Winmail 的邮件服务器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 Winmail Mail Server ESMTP ready ------------------------- 显示服务器的标识名称 (Winmail 管理工具->高级设置->系统参数->基本参数中可更改)
helo cnu.com ------------------------------------------------ 向服务器标识用户身份,发信不要认证,跳过下面几步直接发送 mail from 命令
250 Winmail Mail Server
ehlo cnu.com ------------------------------------------------ ESMTP 命令,发信需要认证。
250-Winmail Mail Server
250-PIPELINING
250-AUTH=LOGIN PLAIN
250-AUTH LOGIN PLAIN
250-SIZE 20480000
250 8BITMIME
auth login ------------------------------------------------- 进行用户身份认证
334 VXNlcm5hbWU6
Y29zdGFAYW1heGl0Lm5ldA== ----------------------------------- BASE64 加密后的用户名
334 UGFzc3dvcmQ6
MTk4MjIxNA== ----------------------------------------------- BASE64 加密后的密码
235 auth successfully -------------------------------------- 身份认证成功
(535 auth failure ------------------------------------------ 身份认证失败)
发到本系统中域名下的账户可跳过身份认证。
mail from: <test1@domain.com> ------------------------------ mail from 地址 test1@domain.com
250 ok ----------------------------------------------------- 命令执行成功
rcpt to: <test2@domain.com> -------------------------------- 递送给地址 test2@domain.com
250 ok ----------------------------------------------------- 命令执行成功
data ------------------------------------------------------- 数据传输初始化
354 go ahead ----------------------------------------------- 开始传输数据
From: test1@domain.com
To: test2@domain.com
Date: Mon, 25 Oct 2004 14:24:27 +0800
Subject: test mail

Hi, test2
This is a test mail, you don't reply it.

.
------------------------------------------------------------ 数据内容,包括BASE64加密后的邮件内容, 以 CRLF.CRLF 结束数据传输
250 ok message accepted for delivery ----------------------- 命令执行成功
quit ------------------------------------------------------- 结束会话
221 Winmail Mail Server
Connection closed by foreign host .------------------------- 断开连接

经测试验证,以上的例子是正确的。也因此发现了各大邮箱的一些漏洞。特别是搜狐与新浪的邮箱,网易其次,QQ邮箱在测试中则没有出现比较大的问题。(估计是由于反垃圾的功能做得比较完善,所以很多域名都被reject回来了。

→QQ邮箱的良好表现:



→网易的表现也不俗:



→新浪就……



其实总结起来,都是“真实发件人与data内容中的发件人信息不一致,而某些品牌的邮箱又没有把代发账户与域名显示出来所致”。

好吧,STMP学习,暂时到这里。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: