设置邮件服务器(Mail Server)
基本上,当你使用 E-Mail 消息时,信件是如何运送的呢?通常是如下图这样运送的:你的信件将经过 smtp 协定发送至 邮件服务器 ,然后邮件服务器将视有无设置转信主机(Mail eXchanger, MX),若有转信主机,则信件先经过转信主机后再传到目的邮件服务器,若无转信主机,则信件将直接由你的邮件服务器送至目的邮件服务器,最后,由你的收件者以 pop-3 协定,将信件由对方的邮件服务器中捉下来!举个例子来说,如果你要从 kimo 寄信给鸟哥的话(tsai.adsldns.org),那信件是如何发送的呢?大致的流程就是这样而已。底下来说说一些邮件的术语(以下的术语摘至 study-area ):
- 你在 Windows 系统中写完了信,以 smtp 协定将你的信发送至 kimo.com.tw 这个邮件服务器;
- kimo.com.tw 这个邮件服务器将你的信转送至鸟哥的 tsai.adsldns.org 这个邮件服务器;
- 鸟哥在 Windows 系统中,以 pop-3 协定将这封信由 tsai.adsldns.org 捉下来电脑中!
- MUA(Mail User Agent ):照字面的意义来说,就是所谓的『邮件代理人』,MUA 从字面上看似乎好容易给它吓死﹐但说穿了您可能会笑耶﹕我们平时用的 Outlook Express、Netscape Mail,或是 Linux 上面的 pine ﹐它们都是 MUA 。简单说﹐MUA 是用来给用户流览邮件和书写邮件的程序;
- MTA(Mail Transfer Agent ):照字面的意义来说,就是『邮件发送代理人』,我们管它叫邮件服务器好了﹐它负责 MUA 的请求﹐也负责将邮件从一个 MTA 传到另一个 MTA 。通常一个 MTA 都可以支持好几种邮件协定﹐例如﹕ UUCP、SMTP、POP 等。 UUCP (Unix to Unix Communication Protocol) 现在已经比较少用了﹐取而代之的是 SMTP (Simple Mail Transfer Protocol) 和 POP (Post Office Protocol) 这两个协定。 SMTP 负责的将邮件从 MUA 上传给 MTA﹐也是 MTA 和 MTA 之间的邮件传递协定﹔ 而在没有 POP 之前﹐email 的用户一般都要用 telnet 或其它远程控制程序连上 MTA 那里﹐然后在那里阅读邮件﹐而有了 POP 之后﹐ MTA 可以将用户的邮件存在一个文件里﹐然后用户通过 MUA 连到 MTA ﹐再将信件下载回本地机器阅读。另外﹐ MUA 和 MTA 都无需是同一个厂家的软件﹐只要双方都支持 POP 协定就可以了﹐其灵活性是不言而喻的了。有些程序﹐如 sendmail ﹐表面来说﹐就同时具备 MUA 和 MTA 功能了。
Mail 与 DNS 的相关性:
- 我们用 MUA 撰写邮件之后﹐是通过 SMTP 协定上传给 MTA 的﹔而阅读邮件则是通过 POP 从 MTA 那里下载回来。
与 mail 最具相关的大概就是 DNS 的设置了,例如你要寄信给我的话,就要寄到 vbird@tsai.adsldns.org 这个信箱,因此,如果你要架设邮件服务器的话,请务必将你的 DNS 设置正确!否则一定信件是寄不到你的信箱的喔!而由于我们是使用 ADSL拨接系统 来上网的,所以只好申请动态 IP 啰!
开始设置前的准备工作:
在开始设置你的邮件服务器之前,请先让你的主机具有 DNS 可以追查到的功能啰!申请 DNS 主要有两种方法:请千万注意,由于 DNS 设置错误将使你的信件无法收取(不过发信可能没有问题!)因此这一部分请仔细的设置喔!
- 若你在学术系统中,你可以直接向您的上一层 DNS Server 的管理员申请,由于你具有固定 IP ,所以架设上会很方便;
- 再来,如果你与我相同是使用 ADSL拨接系统 的话,由于没有办法具有固定 IP,所以只好申请动态 IP 的 DNS 系统了,详细的申请步骤请至『动态 DNS 申请』中察看。
[test@tsai
test]# mail test
Subject: test <==这里输入信件标题 this is a test mail <==从这里是信的内容 . <==要结束就输入一个 . 即可 Cc: <==这个是提供副本寄送的地方 |
然后你只要输入 mail 即可收信喔!
[test@tsai
test]# mail
Mail version 8.1 6/6/93. Type ? for help. "/var/spool/mail/test": 1 message 1 new >N 1 test@localhost.local Tue Aug 21 15:39 13/388 "test" & 1 <==输入 1 来看第一封信! Message 1: From test Tue Aug 21 15:39:05 2007 Date: Tue, 21 Aug 2007 15:39:05 +0800 From: test <test@localhost.localdomain> To: test@localhost.localdomain Subject: test this is a test mail & exit <==输入 exit 即可离开 mail ! |
虽然你的 Linux 已经具有收发信件的能力,但是你也可以看到,上面的例子中,所显示的邮件主机是
localhost.localdomain
,这是不对的!寄给别人的信也是使用这一个名称的话,当然人家一定寄不到你这里来啦!所以要设置一下你的
sendmail 啦!
[root@tsai
/root]# vi /etc/inetd.conf
找到底下这三行: #pop-2 stream tcp nowait root /usr/sbin/tcpd ipop2d #pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d #imap stream tcp nowait root /usr/sbin/tcpd imapd 将上面这三行的注解符号 # 取消即可,再以 :wq 退出! |
限制:
好了,现在开始要来设置用户的收信方法了,在此我仍然以 Outlook 来作介绍, Netscape 的方法是差不多的!你只要知道你的邮件服务器的名称就好了(这里假设你的邮件名称是 hostname.adsldns.org):基本上,Windows 这边只要设置如此即可!然后你就可以用你的 Linux 来当邮件服务器啰!!
- 打开 OutLook,点击『工具』里面的『帐号』;
- 点击『添加』选择『邮件』来设置;
- 输入显示名称:这个名称是别人在收信的时候,可以看到的寄件人称谓;
- 接着下来比较重要了,请使用你的 ID@hostname.adsldns.org 登录你的邮件服务器;
- 然后,当然邮件服务器收发都是同一个,请使用你的 DNS 申请的名称;
- 输入帐号与密码,也可以选择『记忆密码』,然后按下一步,就完成了。
你有没有发现,通常一个人在一个机器上只有一个 ID ,但是,如果你想要让你的很多别名都可以直接寄到你的帐号中的话,要如何是好?又,如果你想要让你的小组成员都可以收到同一个帐号的信,要如何设置呢?其实,上面两个方法仅要改变一个文件即可做到,就是修改 /etc/aliases 这个文件,这个文件有点像这样:
- 一个人拥有多个不同的虚拟信箱:
假如你的 ID 喜欢以 nice name 来取,例如 pig ,不过,当你进入工作中,总不好意思还用这一个 ID 吧,假如你的姓名是 王小明 (全中华民国最倒楣的名字!?)那你应该会想要使用 smwang@hostname.adsldns.org 来当你的信箱,那要不要在开一个帐号给你呢?其实不需要的,只要设置一个别名给 pig 这个帐号就可以了!也就是说,当外面的信件收件人写 smwang@hostname.adsldns.org 的时候, Linux 系统就会主动的将信传到 pig@hostname.adsldns.org 这个信箱中,也就是说,根本没有 smwang@hostname.adsldns.org 这个信箱,他只要用来将信件转到你 pig 帐号中的一个手续而已!
那要如何设置呢?很简单,直接以 userconf 来解决就可以了!好了!设置完成之后,只要选择 Accept ,不用进行任何其他的步骤, smwang 这个虚拟的信箱就激活了!方便吧!另外,你一个帐号可以多重设置很多的虚拟信箱喔!
- 运行 /bin/userconf;
- 选择 User accounts ;
- 选择 pig 这个帐号;
- 在出现的框框中,将光标往下移动,直到出现如下图所示:
![]()
- 在上面 Email alias (帐号别名)的地方输入你想要的别名(可以多重设置喔!)
- 多人共用一个帐号:
相反的,假如你们一票同学都希望拥有同一个信箱,如此一来,当 Linux 系统收到一封信时,大家都可以收到了!这时,如果只有一个实体信箱的时候,因为信被 Outlook 收走时,服务器信箱里的信也就被删掉了!后面的人不就收不到了?要如何作呢?其实也是很简单,如果你有四个人 bird1, bird2, bird3, bird4 希望收到同一个信箱的信,例如 birdhome@hostname.adsldns.org ,那也很简单,只要在四个人的 Email alias 都设置一个别名为 birdhome ,那四个人就都可以收到 birdhome 这个信箱的信了!
Linux 的运作过程是这样的,Linux 当收到 birdhome 这个信箱的信时,会去查每一个实体帐号的 email alias 设置,有设置这个 alias (别名)的人就寄一份数据给他,因此, Linux 总共会寄出四份数据,分别发送到 bird1, bird2, bird3, bird4 这四个人的信箱中,所以这四个人只要打开自己的信箱就可以收到同一封信了!
有没有看到最后一行,smwang: pig ,在虚拟帐号后面接实体帐号,而每个帐号名称中间以『,』符号分隔!因此,当你需要设置邮件别名的时候,除了 userconf 之外,也可以使用这个文件来修改!
#
# @(#)aliases 8.2 (Berkeley) 3/5/94
#
# Aliases in this file will NOT be expanded in the header from
# Mail, but WILL be visible over networks or from /bin/mail.
#
# >>>>>>>>>> The program "newaliases" must be run after
# >> NOTE >> this file is updated for any changes to
# >>>>>>>>>> show through to sendmail.
#
# Basic system aliases -- these MUST be present.
MAILER-DAEMON: postmaster
postmaster: root
# General redirections for pseudo accounts.
bin: root
daemon: root
games: root
ingres: root
nobody: root
system: root
toor: root
uucp: root
# Well-known aliases.
manager: root
dumper: root
operator: root
# trap decode to catch security attacks
decode: root
# Person who should get root's mail
#root: marc
smwang: pig
birdhome: bird1 ,bird2 ,bird3 ,bird4
但是请注意,修改完成之后,还必须运行 newaliases 来加载这个文件的设置进入 sendmail 中才行!也就是说你必须:
- 修改 aliases 文件;
- 运行 newaliases 来启动。
用 Linux 来寄信,最常使用的就是 mail 这个指令了,基本的使用情况是这样的:
- 寄出一般文本信件:
可以输入 mail id@person.domain.name 来寄出信件。
[test@tsai test]# mail id@person.domain.name
Subject: test <==这里输入信件标题
this is a test mail <==从这里是信的内容
. <==要结束就输入一个 . 即可
Cc: <==这个是提供副本寄送的地方
- 寄出文件:
你也可以直接以 vi 先编辑好一个文件之后,再发送出去!例如你写好了一个文件,名称为 mail_raw 则寄出去可以写成这样:
[test@tsai test]# mail id@person.domain.name < mail_raw 当然还有很多的功能可以使用的,就要让你自己来摸索啰!
- 看信件:
直接以 mail 进入后,输入每一封信件的号码来看信的内容!