Exchange学习系列之六用SMTPPOP3访问Exchange邮箱.docx
《Exchange学习系列之六用SMTPPOP3访问Exchange邮箱.docx》由会员分享,可在线阅读,更多相关《Exchange学习系列之六用SMTPPOP3访问Exchange邮箱.docx(20页珍藏版)》请在冰豆网上搜索。
Exchange学习系列之六用SMTPPOP3访问Exchange邮箱
Exchange2003学习系列之六:
用SMTP,POP3访问Exchange邮箱
2008-11-1113:
58:
27| 分类:
Exchange|字号 订阅
Exchange早期版本设计时侧重于在企业内部提供邮件服务,邮件传输以MAPI为主;Exchange的后续版本增强了对Internet邮局的支持,现在Exchange2003可以作为一个标准的Internet邮局为用户提供服务,也可以和互联网上的其他Internet邮局进行交互。
本文我们将介绍以下内容:
一 如何用OutlookExpress作客户端软件,通过SMTP,POP3协议访问邮箱
二 Exchange和其他互联网邮局通信时注意事项
三 SMTP,POP3原理分析
四 ESMTP
五 BASE64编码
实验拓扑如下图,Florence是域控制器和CA服务器,Berlin是Exchange服务器,Istanbul是客户机
一 如何用OutlookExpress作客户端软件,通过SMTP,POP3协议访问邮箱
标准的互联网邮局包括SMTP和POP3两个组件,SMTP负责邮件的出站/入站,POP3负责邮件存储。
我们可以利用SMTP把邮件发送出去,也可以利用POP3从自己的邮箱中下载邮件。
Exchange2003的SMTP来源于Win2003中的IIS,POP3倒是和Win2003的POP3服务没有任何关系。
Exchange2003的POP3服务默认是禁用状态,所以首先要启动POP3服务。
在Exchange服务器上,开始-管理工具-服务,找到“MicrosoftExchangePOP3”服务,将POP3服务的启动类型改为自动,然后启动POP3服务。
这时Exchange服务器已经可以提供SMTP和POP3服务了,我们在客户机Istanbul上,以OutlookExpress(以后简称OE)作为客户端软件,测试一下SMTP和POP3的访问状况。
启动OE后,在工具菜单中选择账户,在“邮件”标签下,选择添加“邮件”
填写邮件发送者的名称,在此我们填写一个用户名,如下图所示
接下来要写用户的邮件地址
最重要的参数,分别对SMTP和POP3服务器进行描述,可以用NETBIOS名称,域名或是IP地址
输入用户名和口令就可以完成邮件账号的设置了
配置完邮件账户后,启动OE,点击“创建邮件”,给administrator发一封测试信看看
,如下图所示
看看管理员的邮箱,是不是已经收到信了,这证明SMTP工作正常。
管理员回封信,看看dufei能否收到,在OE的“发送/接收”下拉菜单中选择“接收全部邮件”,看看收件箱里有没有回信,如下图所示,已收到回信,POP3工作正常。
二 Exchange和其他互联网邮局通信时注意事项
做完上述操作后,我们在Exchange邮局内部已经可以正常使用SMTP,POP3了,但要和其他的互联网邮局通信还需要注意以下两点:
1 设置DNS中的MX记录
2 设置SMTP服务器的中继
如果DNS服务器中没有正确设置MX记录,那么我们的邮局将无法收到其他邮局发来的邮件。
SMTP服务器向其他邮局发送邮件时,要通过查询DNS的MX记录来定位接收邮局的邮件服务器,否则互联网上这么多主机,SMTP服务器怎么知道哪台可以接收邮件?
早期的电子邮件地址格式是邮箱名@邮件服务器名,这种邮件地址中已经包含了邮件服务器的完全合格域名,因此SMTP服务器直接将邮件发送给邮件服务器就可以了。
现在的电子邮件地址格式改成了邮箱名@域名,不再直接指明接收邮件的服务器,因此SMTP服务器就只能依靠MX记录来定位接收邮件服务器了。
Exchange服务器中的SMTP中继默认对所有未通过身份验证的用户都是禁用的,所以如果我们向向外网发一封邮件,例如发到yuelei1976@,我们会看到如下图错误提示,提示中明确指出“Unabletorelay”,不能中继。
那如何修改设置呢?
在Exchange服务器上,开始-程序-MicrosoftExchange-系统管理器-服务器-协议-SMTP-默认SMTP虚拟服务器-属性-访问-中继,如下图
当前的中继设置如下图所示,只有通过身份验证的邮件发送者才可以将邮件中继到其他邮局
修改中继设置,允许192.168.2.0子网内的计算机进行邮件中继,不要设置成允许任何人进行邮件中继,那会招致大量的垃圾邮件发送
改完中继设置后,重启SMTP服务,可以把信发往其他的互联网邮局了。
三 SMTP,POP3原理分析
我们用SMTP,POP3在互联网上进行邮件收发,邮件传递的过程是什么样的?
我们假设163邮局的User1准备给263邮局的User2发信,大致过程如下
1 User1通过邮件客户端软件用SMTP协议把待发邮件提交到163邮局的SMTP服务器
2 163邮局的SMTP服务器通过查询DNS的MX记录,定位263邮局的邮件服务器,然后通过SMTP协议把邮件中继到263邮局的SMTP服务器
3 263邮局的SMTP服务器将邮件入站后,把邮件转给POP3服务器
4 POP3服务器把邮件存储在User2的邮箱中
5 User2利用邮件客户端软件通过POP3协议访问263邮局的POP3服务器,并从自己的邮箱中把邮件下载到本机计算机
接下来我们具体分析一下第一步和第五步,看看OE如何利用SMTP协议提交邮件,以及如何利用POP3协议访问邮箱。
先分析SMTP,根据RPC821,SMTP协议提供了一些简单的四个字符原语操作指令,OE就利用了这些指令发送邮件。
常用的SMTP命令有
HELO:
发件方问候收件方,后面是发件人的IP地址或计算机名。
收件方回答OK时标识自
己的身份。
问候和确认过程表明两台机器可以进行通信。
MAILFROM:
这个命令用来开始传送邮件,命令后面的参数是发件人邮件地址。
RCPTTO:
这个命令告诉收件方收件人的邮箱。
当有多个收件人时,需要多次使用该命令,
每次只能指明一个人。
DATA:
收件方把该命令之后的数据作为发送的数据,数据被加入数据缓冲区中。
RSET:
这个命令用来通知收件方复位,所有已存入缓冲区的收件人数据,发件人数据和待
传送的数据都必须清除,接收放必须回答OK。
NOOP:
空操作,不影响任何参数,只是要求接收方回答OK
QUIT:
SMTP要求接收放必须回答OK,然后中断传输
OE发送邮件时,首先连接邮件服务器的25端口,我们在命令行下模拟这个过程
telnetberlin25
HeloIstanbul (客户端进行自我介绍,我的名字是Istanbul)
mailfrom:
admin@(客户机请求服务器替自己发一封信,信的发件人是新浪的管理员,这当然是胡说,没关系的,SMTP服务器并不校验)
rcptto:
administrator@(客户机描述这封信的收件地址)
data(客户机表示要开始输入信件内容)
subject:
mailtest!
(客户机输入邮件主题mailtest!
)
Justtestting!
(客户机输入邮件内容Justtestting!
)
敲一下回车敲一下.(点)再敲一下回车邮件内容结束,邮件开始进入发送队列
上述过程如下图所示:
检查一下管理员的邮箱,有没有收到这样一封信,如下图所示,真的收到了,而且以为是sina的管理员发来的,要记住,邮件是很容易欺骗的。
这样我们就用SMTP命令发了一封电子邮件,是不是很简单呢?
其实我们可以来看一下OE发信的过程,打开OE,在“工具”菜单中选择“选项”,点击“维护”标签,在疑难解答下选择“邮件”,这样OE发送邮件时的过程会记录在日志文件中供我们分析使用。
在OE中发送一封邮件,测试一下。
邮件发出去了,检查下图路径中的smtp.log,这就是发送邮件时的日志文件
打开日志文件,里面记录了OE与SMTP服务器交互的全过程,[rx]代表OE收到的数据,[tx]代表OE发出的数据,仔细看看,OE作的操作和我们刚刚在命令行中作的完全一样。
我们再来分析一下OE利用POP3协议从Exchange邮件服务器收信的过程,POP3和SMTP类似,根据RFC1939也定义了一些四字符的原语命令,常用的POP3命令有
USER :
输入邮箱名
PASS :
输入邮箱密码
STAT :
显示邮箱状态
LIST :
列出邮箱中的邮件
RETR :
读取邮件内容
DELE:
将邮件标记为删除
NOOP :
空操作,仅返回一个回应
RSET:
中断当前操作,将标记为删除的邮件恢复
QUIT 退出POP3会话
我们举例从dufei邮箱收信,我们使用下列指令
telnet berlin 110
userdufei(准备访问dufei的邮箱)
pass passW0rd(输入dufei的邮箱口令)
list(列出邮箱中的邮件)
Retr 1(显示第一封邮件的内容)
dele 1 (删除第一封邮件)
quit (退出)
过程如下图所示,有兴趣的话大家可以结合OE中的POP3日志进行分析。
四 ESMTP
从前面的SMTP原理分析中我们可以看出,SMTP在设计时完全没有考虑安全问题,任何人都可以很方便地利用SMTP服务器发送邮件,这种处于安全真空的设计在互联网的初期是成立的,毕竟那时无孔不入的商业还不曾渗透进这片专属于科研人员的净土。
但现在如果在公网上放置这么一个服务器,那肯定会后果很严重,垃圾邮件立刻就会把你淹没。
因此,ESMTP对SMTP进行了升级,主要是在邮件的发送过程中支持身份验证,而且在传输邮件内容时也支持用SSL进行加密,大大提高了安全性。
在Exchange中把SMTP升级到ESMTP很容易,只要在SMTP服务器上禁止匿名访问,再选择一种身份验证方式就可以了。
在Exchange服务器上,开始-程序-MicrosoftExchange-系统管理器-服务器-协议-SMTP-默认SMTP虚拟服务器-属性-访问-身份验证,如下图所示
我们取消“匿名访问”和“集成Windows身份验证”,只保留“基本身份验证“,现在这就是一台ESMTP服务器了,重新启动SMTP服务,然后在Istanbul上我们发送一封邮件测试一下,如下图所示,发信出问题了,错误提示告诉我们由于没有进行身份验证,我们没有权限进行邮件发送
既然要求身份验证,那我们就满足这个条件,在OE的工具菜单中选择账户,点击邮件标签,查看邮件账户的属性,如下图所示,勾选“我的服务器要求身份验证”,点击“设置”
在设置中,我们填写了用户名和口令,再来试试,发出去了!
调出日志smtp.log查看一下发送细节,看到了一个奇怪的现象,如下图红框标示处显示的是用户名,但我们填写的用户名是dufei,怎么在这里成了ZHVmZWk=?
不要着急,这就是我们下面要讲到的BASE64编码
五BASE64编码
BASE64编码其实很简单,它把常用的64个字符重新做了个编码表。
每个BASE64编码用6个2进制数表示,BASE64的编码表如下
0A17R34i51z
1B18S35j520
2C19T36k531
3D20U37l542
4E21V38m553
5F22W39n564
6G,23X40o575
7H24Y41p586
8I25Z42q597
9J26a43r608
10K27b44s619
11L28c45t62+
12M29d46u63/
13N30e47v
14O31f48w(pad)=
15P32g49x
16Q33h50y
从ASCII码向BASE64的转换过程中,ASCII码会每3个为一组转换为4个BASE64编码,因为每个ASICC码为8位二进制数,3×8=24,每个BASE64编码是6位二进制数,24÷6=4。
如果ASCII码字符不正好是3的倍数,例如dufei是5个ASCII码,这该怎么办呢?
系统会自动用0进行填充,将ASCII码凑成3的倍数。
如果有1个ASCII码是被填充的,BASE64编码中会出现一个=符号,如果有2个ASCII吗是被填充的,BASE64编码中会出现两个=号,不可能有三个=出现的,大家仔细想想为什么?
以dufei为例,dufei的ASCII码为100117102101105,ASCII码为100117102101105。
展开成二进制是01100100 01110101 01100110 01100101 01101001,每6个一组形成BASE64编码是011001000111010101100110 0110010101101001,由于dufei只有5个ASCII码,系统会用0填充为6个ASICC码,填充的结果是011001000111010101100110 011001010110100100000000,蓝色部分为系统填充内容。
用10进制表示就是25 7 21 38 25 22 36 ,查询BASE64编码表可知分别对应 ZHVmZWK,最后那个由填充产生的000000用一个=表示。
所以最后我们看到的BASE64编码是ZHVmZWk=。
本文出自“岳雷的微软网络课堂”博客,请务必保留此出处