资源描述
实验三:邮件服务
实验内容:
1. SMTP
2. POP3 & IMAP
3. 搭建邮件服务器
内容一:SMTP
SMTP是应用层的服务,可以适应于各种网络系统。简单邮件传输协议(Simple Mail Transfer Protocol,SMTP)是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式,是一种基于文本的电子邮件传输协议,是在因特网中用于在邮件服务器之间交换邮件的协议。SMTP协议属于TCP/IP协议族,它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器,就可以把E-mail寄到收信人的服务器上了,整个过程只要几分钟。SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转发出的电子邮件。在传输文件过程中使用端口:25。
SMTP 独立于特定的传输子系统,且只需要可靠有序的数据流信道支持。SMTP 重要特性之一是其能跨越网络传输邮件,即“ SMTP 邮件中继”。通常,一个网络可以由公用互联网上 TCP 可相互访问的主机、防火墙分隔的 TCP/IP 网络上 TCP 可相互访问的主机,及其它 LAN/WAN 中的主机利用非 TCP传输层协议组成。使用 SMTP ,可实现相同网络上处理机之间的邮件传输,也可通过中继器或网关实现某处理机与其它网络之间的邮件传输。在这种方式下,邮件的发送可能经过从发送端到接收端路径上的大量中间中继器或网关主机。域名服务系统(DNS)的邮件交换服务器可以用来识别出传输邮件的下一条 IP 地址。
l 工作过程
SMTP的命令和响应都是基于文本,以命令行为单位,换行符为CR/LF。响应信息一般只有一行,由一个3位数的代码开始,后面可附上很简短的文字说明。SMTP要经过建立连接、传送邮件和释放连接3个阶段,具体为:
(1)建立TCP连接。
(2)客户端向服务器发送HELLO命令以标识发件人自己的身份,然后客户端发送MAIL命令。
(3)服务器端以OK作为响应,表示准备接收。
(4)客户端发送RCPT命令。
(5)服务器端表示是否愿意为收件人接收邮件。
(6)协商结束,发送邮件,用命令DATA发送输入内容。
(7)结束此次发送,用QUIT命令退出。
SMTP服务器基于DNS中的邮件交换(MX)记录路由电子邮件。电子邮件系统发邮件时是根据收信人的地址后缀来定位邮件服务器的。SMTP通过用户代理程序(UA)完成邮件的编辑、收取和阅读等功能;通过邮件传输代理程序(MTA)将邮件传送到目的地。
l SMTP命令说明
HELO<domain><CRLF>;识别发送方到接收SMTP的一个HELLO命令
MAIL FROM:<reverse-path><CRLF>;为发送者地址。此命令告诉接收方一个新邮件发送的开始,并对所有的状态和缓冲区进行初始化。此命令开始一个邮件传输处理,最终完成将邮件数据传送到一个或多个邮箱中。
RCPT TO:<forward-path><CRLF>;标识各个邮件接收者的地址
DATA<CRLF> 接收SMTP将把其后的行为看作邮件数据去处理,以<CRLF>.<CRLF>;标识数据的结尾。
REST<CRLF>;退出/复位当前的邮件传输
NOOP<CRLF>;要求接收SMTP仅做OK应答。(用于测试)
QUIT<CRLF>;要求接收SMTP返回一个OK应答并关闭传输。
VRFY<string><CRLF>;验证指定的邮箱是否存在,由于安全因素,服务器多禁止此命令。
EXPN<string><CRLF>;验证给定的邮箱列表是否存在,扩充邮箱列表,也常禁止使用。
HELP<CRLF>;查询服务器支持什么命令
l 为了说明SMTP的工作原理,以向163发送邮件为实例。
在linux环境下,使用"telnet smtp.163. com 25"连接smtp.163. com的25号端口(SMTP的标准服务端口);在windows下使用telnet程序,远程主机指定为smtp.163. com,而端口号指定为25,然后连接smtp.163. com:交互过程如下:
[root@newsclub east]# telnet 25 //登陆 端口号为 25
Trying 202.108.44.205...
Connected to (202.108.44.205).
Escape character is '^]'.
220 Coremail SMTP(Anti Spam) System
HELO localhost // 与服务器打招呼,并告知客户端使用的机器名字,可以随便填写
250 OK
AUTH LOGIN //使用身份认证登陆指令
334 dXNlcm5hbWU6
cmVkc29zMw== //输入已经base64_encode()过的用户名.
334 UGFzc3dvcmQ6
MbM2MDQ3NQ== //输入已经base64_encode()过的密码
235 Authentication successful
MAIL FROM:<> //告诉服务器发信人的地址
250 Mail OK
RCPT TO:<> //告诉服务器收信人的地址
250 Mail OK
DATA //正面开始传输信件的内容,且最后要以只含有 . 的特殊行结束。
354 End data with .
To:yourframe@
From:redsos3@
Subject:test mail
From:redsos3@
test body
. //结束传输信件
250 Mail OK queued as smtp14,F0CPBFsuzUOvoDwE.41582S2
QUIT //断开连接
221 Bye
Connection closed by foreign host.
其中,HELO是客户向对方邮件服务器发出的标识自己的身份的命令,这里假设发送者为ideal;MAILFROM命令用来表示发送者的邮件地址;RCPTTO:标识接收者的邮件地址,这里表示希望发送邮件给XXX@163. COM,如果邮件接收者不是本地用户,例如RCPTTO:ideal,则说明希望对方邮件服务器为自己转发(Relay)邮件,若该机器允许转发这样的邮件,则表示该邮件服务器是OPENRELAY的,否则说明该服务器不允许RELAY;DATA表示下面是邮件的数据部分,输入完毕以后,以一个"."开始的行作为数据部分的结束标识;QUIT表示退出这次会话,结束邮件发送。
状态码说明:220 : 服务就绪;250 :请求邮件动作正确,完成(HELO,MAIL FROM,RCPT TO,QUIT 指令执行成功会返回此信息);235 :认证通过;221 :正在处理;354 :开始发送数据,结束以 .(DATA指令执行成功会返回此信息);500 :语法错误,命令不能识别;550 :命令不能执行,邮箱无效;552 :中断处理:
见文件JAVA邮件发送.doc
尝试使用telnet连接SMTP,发送邮件
使用JAVA程序发送邮件
[crazywill@localhost crazywill]$ perl -MMIME::Base64 -e 'print encode_base64("crazywill");'
Y3Jhenl3aWxs
[crazywill@localhost crazywill]$ perl -MMIME::Base64 -e 'print encode_base64("mypassword");'
bXlwYXNzd29yZA==
内容二:POP3 & IMAP
邮局协议(Post Office Protocol 3,POP3)当前是第3个版本,它是规定个人计算机如何连接到互联网上的邮件服务器进行收发邮件的协议。它是因特网电子邮件的第一个离线协议标准,POP3协议允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时根据客户端的操作删除或保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。POP3协议是TCP/IP协议族中的一员,,由RFC 1939 定义。本协议主要用于支持使用客户端远程管理在服务器上的电子邮件。POP3协议默认端口:110。
网络邮件访问协议(Internet Mail Access Protocol,IMAP 或interactive mail access protocol)IMAP是斯坦福大学在1986年开发的一种邮件获取协议。它的主要作用是邮件客户端(例如MS Outlook Express)可以通过这种协议从邮件服务器上获取邮件的信息,下载邮件等。当前的权威定义是RFC3501。IMAP协议运行在TCP/IP协议之上,使用的端口是143。它与POP3协议的主要区别是用户可以不用把所有的邮件全部下载,可以通过客户端直接对服务器上的邮件进行操作。
l POP3三种状态
POP3有三种状态,分别是:认证状态,处理状态和更新状态。当客户机与服务器建立连接时,客户机向服务器发送自己身份(这里指的是账户和密码)并由服务器成功确认,即客户端由认可状态转入处理状态,在完成列出未读邮件等相应的操作后客户端发出quit命令,退出处理状态进入更新状态,开始下载未阅读过的邮件到计算机本地之后最后重返认证状态确认身份后断开与服务器的连接。具体原理如下图
等待连接身份确认quit命令
C——|认证|—————|处理|——————|更新|----S
|__________________________________|
重返认证状态。
l POP3命令码
USER username认可此命令与下面的pass命令若成功,将导致状态转换
PASS password认可
APOP Name,Digest认可Digest是MD5消息摘要
STAT None处理请求服务器发回关于邮箱的统计资料,如邮件总数和总字节数
UIDL [Msg#]处理返回邮件的唯一标识符,POP3会话的每个标识符都将是唯一的
LIST [Msg#]处理返回邮件数量和每个邮件的大小
RETR [Msg#]处理返回由参数标识的邮件的全部文本
DELE [Msg#]处理服务器将由参数标识的邮件标记为删除,由quit命令执行
RSET None处理服务器将重置所有标记为删除的邮件,用于撤消DELE命令
TOP [Msg# n]处理服务器将返回由参数标识的邮件前n行内容,n必须是正整数
NOOP None处理服务器返回一个肯定的响应
QUIT None更新
a.客户机希望结束这次会话
b.如果服务器处于‘处理’状态,那么将进入‘更新’状态以删除任何标记为删除的邮件
c.导致由处理状态到更新状态,又重返认可状态的转变
d.如果这个命令发出时服务器处于‘认可’状态,则结束会话,不进行‘更新’状态。
l 使用telnet连接POP3
打开命令提示符,用telnet 登录邮件服务器,格式:telnet 邮件服务器名或ip 端口(pop3为110),如:
telnet 110 或telnet 202.108.5.100 110 远程登录163邮件服务器
telnet 110 或telnet 202.108.3.231 110 远程登录sina邮件服务器
以sina为例,输入上述命令,稍等一会儿,会出现以"Telnet "为标题的新窗口,显示"+OK pop3 proxy server ready",这表示已成功登录.。
1.登录邮箱,接下来输入用户名和密码,命令格式:
1.1 user username 提供用户名
1.2 pass password 提供用户密码
如:user test_pop3_2007
回车后显示"+OK",再输入密码
pass 123456789
若用户名正确,回车后显示“+OK”
2.获取邮件信息
2.1 Stat
请求服务器发回关于邮箱的统计资料,显示邮件数量和全部邮件大小(单位是字节)
命令格式:stat
2.2 List
返回邮件数量和每个邮件的大小
命令格式:list
3.检查邮件
3.1 Top
命令格式:top n
服务器将返回由参数标识的邮件前n行内容,n必须是正整数
3.2 Retr
返回由参数标识的邮件的全部文本
命令格式:retr n
3.3 Dele
服务器将由参数标识的邮件标记为删除,由quit命令执行
命令格式:dele 邮件编号
3.4 Rset
恢复标记为删除的邮件,用于撤消DELE命令
命令格式:rset
4. quit
退出(更新)
命令格式:quit
见JAVA邮件接收.doc
采用telnet连接自己的邮箱,使用以上命令查看邮件数量
使用java程序接收并输出邮件
内容三: 搭建MAIL SERVER
见完全架设musemail_server指南.docx
创建帐号,并使用以上telnet和邮件AGENT连接自建MAIL SERVER,完成收发信件
展开阅读全文