FreeBSD Basics



[ Home | FreeBSD | Samba | CMPP | Mail me ]


理解电子邮件 (meaculpa乱译版)
Dru Lavigne
08/30/2000

每个FreeBSD用户的首要任务之一就是希望在他的计算机上配置好访问电子邮件。但是,看一下ports collection中的邮件部分就会发现有大约148个应用程序涉及电子邮件。麻烦的是,它们可能声称是MUAs、MTAs、POP3客户端或IMAP4服务器。这些描述对于不熟悉这些术语而想收发邮件的你来说没有一点帮助。

在本文中,我将介绍一些重要的电子邮件概念,并涉及附加的信息。然后我会为你安排一些配置系统收发邮件的步骤,还将配置Pine。

从发明网络开始,人们就想要一种向别人发送邮件的方法。这就导致了很多邮件程序的发展,但很多都是专用的,你只能把邮件发送给使用同一邮件系统的人。早期的邮件系统允许你把邮件直接发送到另一个人的计算机上。但是,如果那人的机器关闭或者两台机器之间的物理连接出问题的话,这种方法就不凑效了。

很多邮件系统更希望所有的用户都把它们的邮件发到一个中央服务器存储;因为该服务器总是可获得的,所以它就担当象邮局一样的角色。如果用户在那台服务器上有一个邮箱的话,他就可以周期性地检查他的邮箱,看看是否有邮件可收。

由于邮件需求的增长,制定出的标准已经可以让用户把邮件发给任何人了,而不用管别人所用的邮件系统是什么。标准之一就是X.400;其它还有SMTP,它已经成为Internet上所用的标准了。有两个关于这些标准的描述可以参见X.400 - The Better InternetX.400 is Dead, Long Live X.400

除非你在一个使用内部X.400邮件系统的公司工作,否则你可能就是用SMTP来发信了。你所用的电子邮件地址实际上是个SMTP地址,如anyuser@anycompany.com。你会注意到一个SMTP地址看起来很象一个web地址,只是它使用一个@来替代后者中的第一个点号。现在Internet已经使用DNS(域名系统)来查找一台计算机的IP地址了。当管理员设置一台邮件服务器时,他会在其DNS数据库中建立一笔MX(邮件交换)记录来指出网络中的邮件服务器。@号左面的名称指出用户在邮件服务器上的邮箱名。

Internet邮件标准在开发时,决定使用中央服务器(邮局)作为用户检查邮箱的途径。因为Internet使用TCP/IP,为此就需要建立新的TCP/IP协议。协议是定义通信的规则,每个TCP/IP协议簇中的协议都有一个相关的端口号,并且至少有一份RFC来描述它的工作原理。

SMTP(简单邮件传送协议)定义了邮件服务器间的通信。它的端口号为25,RFC821描述了它的工作原理。

顾名思义,SMTP只是把邮件从一台服务器传到另一台,直到邮件到达正确的目的地。为了确保邮件到达服务器上正确的邮箱,就要用POP3(邮局协议3)。POP3使用端口号110,由RFC1734、1957、2449和STD0053(标准53)定义。

POP3还负责管理邮件服务器上的各个邮箱,不让用户检索他人的邮箱,除非通过身份验证。

如果你还不熟悉POP3和SMTP的命令,可以看一下SMTP with Telnet tutorial。这份教程教你怎样自己使用SMTP和POP3命令来发送和接收邮件。邮件系统和程序通常也是使用同样的命令达到目的。

你可能还会涉及到一个术语,称为IMAP4(Internet邮件访问协议版本4)。IMAP4与POP3很相似,但却有更强大的功能。POP3假定用户要把所有邮件都下载到他们的邮箱中,所以会把邮件服务器上的复本删掉;用户可以在与邮件服务器脱机后离线阅读自己的邮件。而用IMAP4,用户可以只下载个人邮件的标题,这样他可以自己决定要取得哪些邮件了;他还可以无须下载而直接从邮件服务器上删除自己的邮件。

邮件软件通常分为两部分:MTA(邮件传输代理)和MUA(邮件用户代理)。MTA在邮件服务器上运行,而且支持SMTP和POP3协议。因此,它可以把邮件发向其它的SMTP服务器,并接收和存储邮件到相应的用户邮箱中。Sendmail是Internet上最常见的MTA,并已经捆绑在你的FreeBSD系统里了。你可以使用FreeBSD的ports collection来建立其它的MTA,如Exim、Postfix和Qmail。

而用户则用MUA来撰写和阅读电子邮件。一些MUA还有内置POP3客户端功能,你可以用它来检查新邮件;而另一些可能就没有了,它只能显示你用其它的POP3客户端接收的邮件。各种MUA在功能上会有很大的区别;使用哪个MUA是个人爱好问题。在ports collection中有一打MUA程序;比较通用的有Mutt、Pine和Xfmail。

那么,当你发送电子邮件时,这两个部分是如何互相工作的呢?你使用MUA(例如Pine)来建立一封电子邮件;Pine就把它送给MTA(Sendmail),由MTA查询DNS找出邮件目的地的SMTP服务器地址。Sendmail将用SMTP命令把邮件传送到邮件服务器上。然后由那台邮件服务器用POP3将邮件放入正确的邮箱内。收信人就可以用POP3命令把邮件收下来,然后用他们喜欢的MUA阅读并回复邮件。

让我们在FreeBSD系统上配置使用Sendmail(MTA)、fetchmail(pop3客户端)和Pine(MUA)。先假定有一个用户希望在FreeBSD计算机上使用电子邮件。

象任何MTA一样,Sendmail是个高度可配置和复杂的程序,它可以为大公司甚至是ISP提供邮件服务。但是,你却不必使用缺省的Sendmail配置文件,因为它很复杂,除非你确定自己所做的一切。如果你需要对Sendmail进行复杂的配置,你应该先读这本由Brian Costales和Eric Allman写的sendmail, 2nd Edition。不过你也可能希望研究一下其它的程序如Qmail或Exim。

幸运的是,FreeBSD系统上的缺省Sendmail配置已经可以正常工作了,所以你可以向外界发送电子邮件。缺省Sendmail是打开的;如果你想确认一下它是否被打开了,可以用以下命令:

more /etc/defaults/rc.conf | grep sendmail

sendmail_enable="YES"	# Run the sendmail daemon (or NO).
sendmail_flags="-bd -q30m" # Flags to sendmail (if enabled)

如果sendmail_enable这一行设为“NO”的话,那么你必须换成超级用户身份并用文本编辑器把它改为“YES”。在保存前最好仔细检查一下输入的正确性。在超级用户身份下,在终端上用以下的命令关闭计算机上正在运行的所有程序:

shutdown now

当收到提示时,按回车键,然后打:

exit

注意屏幕上出现的信息,你会看到如下这样的提示:

starting standard daemons: sendmail.

现在你的MTA正在运行之中,接下来安装MUA。如果你已经在计算机上安装了ports collection,那么成为超级用户并打:

cd /usr/ports/mail/pine4
make && make install

当完成后,再安装POP3客户端程序:

cd ../fetchmail
make && make install

如果你不用ports collection的话,可以从FreeBSD Ports下载Pine和Fetchmail这两个包。

以root身份打:

mkdir /usr/packages

把下载的安装包放到上述目录中,然后打:

cd /usr/packages
pkg_add pine* 
pkg_add fetc*

现在我们已经有了必需的软件,然后需要建立一个用于收发邮件的用户账号。当然,你可以建立与你的邮件地址的邮箱部分同名的账号,或者,建立一个别名来对应存在的用户名。因为我的邮件地址是genisis@istar.ca,为简单起见,我建立一个用户genisis。当我要访问我自己的电子邮件时,以账号genisis登录到FreeBSD系统上。这样的账号可以让你省掉编辑一个别名文件。

如果你需要建立一个新用户的话,可以成为超级用户打/stand/sysintall并选Configure | User Management | User。在这个例子中,登录ID应该和邮箱名同名,所以就是genisis。输入一个你记得住的口令选用TAB键选OK,再按两次Cancel,然后选Exit Install

退出超级用户账号后以新用户登录。现在打pine,你就会看到如下的信息:

Creating subdirectory "/home/yourusername/mail" where Pine will store
its mail folders.

接下来是Pine的欢迎信息。你可以注意到Pine的命令列在屏幕底部。读完欢迎信息后,按E退出这条信息。然后你就来到了Pine的主菜单。

由于这是你个人第一次运行Pine,需要按S进入设置,然后按C进入配置。头三个项目可以按下面的提示进行编辑:

你可以注意到Pine有大量配置项;如果你对某一项感兴趣,可以高亮这一项并按?键。它就会给出一段该配置项的简短描述。通常,我会修改以下几项:

配置完以后,可以按E退出并按Y确认刚才的修改。要返回到主菜单后可以按A来编辑地址簿。在此按@键就可以添加一条电子邮件地址;完成以后按^X保存,程序会显示刚才输入的地址。

在地址簿中高亮一个用户,然后按C就可以给他写信了。在Cc栏里输入接收邮件复本的用户。当写完以后,确保已经连到你的ISP,然后按^X就可以发信了,这时Pine询问你是否要发送时按Y。它会提示[Sending Mail],[Message sent and copied to 'sent-mail']。然后你可以用<键返回主菜单。如果你按L进入文件夹列表,选sent-mail并按回车的话,就可以看到刚才发出的那封邮件了。

顺便提一下:Pine包含一个内置的编辑器,叫作Pico。Pico是个非常易用的编辑器,它会把有关的命令列在屏幕底部。而且,你不必为了使用Pico而运行pine,只要打:

pico filename 

现在你已经可以用Pine来发信了,接着就是如何使用fetchmail来接收邮件。再打开一个终端进行登录。然后象我这样使用fetchmail:

fetchmail istar.ca
Enter password for genisis@istar.ca: 
fetchmail: IMAP connection to istar.ca failed: Connection refused
1 message for genisis at istar.ca (868 octets).
reading message 1 of 1 (868 octets)  flushed

注意:当你检查自己的邮箱时,把正确的值替换istar.ca。如果一切顺利,fetchmail至少会下载一封邮件。这时切到刚才运行Pine的终端,打开inbox就可以读这封信了。

注意,fetchmail会把genisis加到我的邮件地址中,因为我是用此账号登录的。如果是以其他账号登录的,例如biko,就它就用biko@istar.ca这个地址了。

要是这样的话,fetchmail命令就会出错,因为我在Istar的邮件服务器上根本没有biko这样一个邮箱。但是,如果我以biko登录,然后这样调用fetchmail命令的话:

fetchmail -u genisis istar.ca

就可以让它为我接收genisis的邮件而不管实际的登录名了。

fetchmail还有一个详细运行模式可以用于显示它和邮件服务器对话的各种POP3命令。你可以用-v和-vv调用详细模式及非常详细模式。详细模式的工作情况如下:

fetchmail -v istar.ca
Enter password for genisis@istar.ca: 
fetchmail: 5.3.0 querying istar.ca (protocol auto) at Mon, 31 Jul 2000 11:16:28
 -0400 (EDT)
fetchmail: 5.3.0 querying istar.ca (protocol IMAP) at Mon, 31 Jul 2000 11:16:28
 -0400 (EDT)
fetchmail: IMAP connection to istar.ca failed: Connection refused
fetchmail: 5.3.0 querying istar.ca (protocol POP3) at Mon, 31 Jul 2000 11:16:28
 -0400 (EDT)
fetchmail: POP3< +OK iSTAR POP3 Server at istar.ca Ready v1.13 12.2.1996 
<398597cc398597cc@istar.ca
fetchmail: POP3> USER genisis
fetchmail: POP3< +OK Complete authentication with the PASS command for 
genisis@istar.ca
fetchmail: POP3> PASS *
fetchmail: POP3< +OK Authentication successful.
fetchmail: POP3> STAT
fetchmail: POP3< +OK 5 29820
fetchmail: POP3> LAST
fetchmail: POP3< +OK 0
5 messages for genisis at istar.ca (29820 octets).
fetchmail: POP3> LIST
fetchmail: POP3< +OK 5 messages (29820 octets)
fetchmail: POP3< 1 8777
fetchmail: POP3< 2 8961
fetchmail: POP3< 3 4837
fetchmail: POP3< 4 2806
fetchmail: POP3< 5 4439

通过这篇文章,你应该可以读懂USER、PASS和LIST命令了。

fetchmail通过使用开关可以进行高度配置,所以读一下它的手册很有意义。

至此,我们已经搞清了邮件工作的一些神秘本质,希望这对你有帮助。

Read more from FreeBSD Basics.




[ Home | FreeBSD | Samba | CMPP | Mail me ]

Copyright © 2000, 2001 it's meaculpa. All rights reserved.