Sendmail并不处理最终的投递,当然也不会处理如何把邮件提交给最终用户的任务。一般来说,用户总是在Windows客户机器上处理各种电子邮件,因此需要一个服务程序负责将Sendmail存储的邮件转交给Windows或其他任何客户机器。有两种基本的方法:一种是将邮件传送到客户的本地机器上处理,这是通过所谓的邮局协议实现的;另一种是允许用户远程操作其邮箱并且实现对邮件的浏览和管理,这是通过所谓的IMAP协议。
POP3即邮局协议3,这是目前邮件客户传输的标准协议之一。几乎所有的邮件客户程序都会支持这个协议。POP3是主要用于接收邮件的。
POP3服务程序通常可以从许多程序包中得到。与Fedora发行版一起提供的通常是POP和IMAP放在一起的服务器程序,例如IMAP-4.5-4。可以用rpm程序安装这个产品。安装后,POP3D服务程序放在/usr/sbin下,名字是IPOP3D。
IPOP3D程序通常是由inetd服务程序启动,不过默认的情况下这个服务是关闭的。为了打开这个服务,用户必须确认/etc/services文件中有的内容:
pop-3 110/tcp # POP version 3
pop-3 110/udp
然后在/etc/inetd.conf中加入:
pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d
重新启动inetd,就可以使用POP服务了。
IMAP程序包中还包括IMAP服务器,IMAP方式用得比较少,但是它也有自己的优点,因为IMAP服务是直接操作服务器的文件夹,不需要把文件下载到本地,因此可以避免POP服务把邮件副本弄得遍地都是。这对于没有自己的确定计算机的用户特别重要。支持IMAP的邮件客户程序并不是很多,但通常使用的Outlook可以操作IMAP。要使用IMAP服务,在/etc/services里面加上以下代码:
imap2 143/tcp imap # Interim Mail Access Proto v2
imap2 143/udp imap
然后在/etc/inetd.conf里面加上以下代码,重新启动inetd就可以了。
imap stream tcp nowait root /usr/sbin/tcpd imapd
安装了POP支持之后,可以直接telnet到110端口看POP服务是否正常运行了,例如:
[root@localhost /etc]$ telnet 202.199.248.19 110
Trying 202.199.248.19...
Connected to 202.199.248.19.
Escape character is ^].
+OK POP3 mail.asnc.edu.cn v7.59 server ready
信息表示POP3服务已经就绪。用户可以接着实验看看能否浏览邮箱:
user newone
+OK User name accepted, password please
pass test
+OK Mailbox open, 3 messages
list list
+OK Mailbox scan listing follows
1 40934
2 29619
3 6001
返回信息说明已经一切正常,可以提供服务了。
如同上面说的一样,SMTP发送信件的时候不需要知道用户口令。相反,POP3程序在允许用户接受邮件之前必须首先确认用户口令。在一般情况下,POP3客户/服务器之间用明文传送用户名和口令。这是一种不太可靠的方式,因为一个恶意的分析者可能通过以太网监听用户的用户口令。
解决问题的办法之一是使用qpopper程序,它提供了一些高级的选项,特别是支持以加密方式在客户和服务器之间转发口令字,以及对POP3使用与账号登录不同的认证口令。用户可以自己到网上下载qpopper程序并且编译安装。
另外一个问题是Sendmail的虚拟域。虚拟域功能是非常有用的,但是它却有一个很严重的问题,就是POP3服务程序并不能正确地支持Sendmail的虚拟域。通常这种情况意味着用户必须自己编写一个POP3服务程序。不过用户使用某些基于Web的信件浏览程序来解决这个问题。