服务器架设篇 - RedHat 6.1

设置邮件服务器(Mail Server)

设置邮件服务器(Mail Server)

最近更新时间: 2001/08/21

本文数据主要针对 RedHat 6.1 的系统进行说明,要注意的是,RedHat 6.1 与 Red Hat Enterprise Linux (RHEL) 是完全不同的东西!RedHat 6.1 在 1999 年推出,在 2000 年底就不再维护了!这部份网站更新到 2002 年,也没有再维护过! 因此,建议您前往本站查找最新版本的 Linux distribution 文章来阅读,比较不会浪费时间。那为何还需要编辑 RedHat 6.1 的数据呢? 鸟哥只想要做个自己曾经撰写过的文档内容保存而已啰! ^_^!最新文章请前往鸟站首页查阅啰!

认识邮件运送的过程

基本上,当你使用 E-Mail 消息时,信件是如何运送的呢?通常是如下图这样运送的:
你的信件将经过 smtp 协定发送至 邮件服务器 ,然后邮件服务器将视有无设置转信主机(Mail eXchanger, MX),若有转信主机,则信件先经过转信主机后再传到目的邮件服务器,若无转信主机,则信件将直接由你的邮件服务器送至目的邮件服务器,最后,由你的收件者以 pop-3 协定,将信件由对方的邮件服务器中捉下来!举个例子来说,如果你要从 kimo 寄信给鸟哥的话(tsai.adsldns.org),那信件是如何发送的呢?
  1. 你在 Windows 系统中写完了信,以 smtp 协定将你的信发送至 kimo.com.tw 这个邮件服务器;
  2. kimo.com.tw 这个邮件服务器将你的信转送至鸟哥的 tsai.adsldns.org 这个邮件服务器;
  3. 鸟哥在 Windows 系统中,以 pop-3 协定将这封信由 tsai.adsldns.org 捉下来电脑中!
大致的流程就是这样而已。底下来说说一些邮件的术语(以下的术语摘至 study-area ):
  • 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 功能了。
  • 我们用 MUA 撰写邮件之后﹐是通过 SMTP 协定上传给 MTA 的﹔而阅读邮件则是通过 POP 从 MTA 那里下载回来。
Mail 与 DNS 的相关性
与 mail 最具相关的大概就是 DNS 的设置了,例如你要寄信给我的话,就要寄到 vbird@tsai.adsldns.org 这个信箱,因此,如果你要架设邮件服务器的话,请务必将你的 DNS 设置正确!否则一定信件是寄不到你的信箱的喔!而由于我们是使用 ADSL拨接系统 来上网的,所以只好申请动态 IP 啰!

简易的设置 sendmail

开始设置前的准备工作
在开始设置你的邮件服务器之前,请先让你的主机具有 DNS 可以追查到的功能啰!申请 DNS 主要有两种方法:
  • 若你在学术系统中,你可以直接向您的上一层 DNS Server 的管理员申请,由于你具有固定 IP ,所以架设上会很方便;
  • 再来,如果你与我相同是使用 ADSL拨接系统 的话,由于没有办法具有固定 IP,所以只好申请动态 IP 的 DNS 系统了,详细的申请步骤请至『动态 DNS 申请』中察看。
请千万注意,由于 DNS 设置错误将使你的信件无法收取(不过发信可能没有问题!)因此这一部分请仔细的设置喔!
    设置 sendmail
    如果你是使用这个网页介绍的 Redhat 6.1 来安装你的 Linux 的话,那在你安装好了 Linux 时,你的邮件服务器已经架设好了!不相信吗?假设你的 ID 是 test,则你可以进入 Linux 之后,输入这样的字眼:
     
    [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 啦!
     

  • netconf 设置邮件服务器

  • 基本上,设置邮件服务器只要两个步骤:
    1. 一个是使用 netconf 简易的设置好主机的名称与其他与主机相关的事项;
    2. 然后再修改 /etc/inetd.conf 这个文件,打开 pop-3、smtp 及 imap 的服务即可!
    这个 IMAP 是目前新的邮件协定﹐通过 IMAP﹐ 用户在 MUA 那端就无需分别指定 SMTP 和 POP 作为上传和下载协定了﹐而只一个 IMAP 协定就可以﹐而且 IMAP 还可以让不同的用户共用一个 MUA﹐非常方便哦。
    netconf:好了,现在来设置一下主机吧:
    1. 以 root 的身份运行 『netconf』,会出现一个窗口;
    2. 向下移动光标到 『Mail delivery system (sendmail)』 这一项,并按下 enter 键;
    3. 在出现的框框中选择 『basic information』 这一项;
    4. 『Present your system as』『Mail server』 这两个地方,都输入你在 动态 DNS 系统中申请到的名称(以我为例,在这两个地方都输入 tsai.adsldns.org 即可);另外,在这勾选两行中间的 『[X] Accept email for adsldns.org』 这一个咚咚,这样就设置好了!
    5. 以 Tab 键将光标移动到 Accept 这一项,按下 enter,回到刚刚的画面;
    6. 按一次 Quit 出来主菜单,选择『Basic host information』这一项,按 Enter 进入;
    7. 『Host name』的地方输入你的主机名称,另外,在 『Primary name + domain』 的地方也要输入一次刚刚输入的名称喔!(就是 hostname.adsldns.org这一个!);
    8. 按下 Accept 退出来之后,回到刚刚的画面;
    9. 由于 Redhat 6.1 中的 sendmail 『不许直接修改 /etc/sendmail.cf 』这个文件,所以请到 『Generate   /etc/sendmail.cf』这个选项按下 enter!重新再产生一个,以符合你刚刚设置的参数;
    10. 然后选择 Quit 退出,这时系统会自动侦测一些设置,等到出现:
      1. Activate the changes
        Preview what has to be done
        Don't quit
      这三个选项时,请选择 Activate the changes 即可!
      注意喔,这个时候系统会先将你的网络停止再重新打开,所以,如果你是在外部电脑作业的话,请先确认你的拨接系统可以自动拨接上网络喔!
    11. 若有一些错误消息的话,也没有关系,你可以看看,也可以直接按 enter 离开!
    12. 设置完成!
    很简单吧,这样就设置好你的邮件服务器了!不过,这时候还没有办法在 Windows 上面以 pop-3 及 smtp 协定收发信件,所以你接着要修改 /etc/inetd.conf 这个文件!
    /etc/inetd.conf 文件设置
    1. 以 vi 编辑这个文件:

    2.  
      [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 退出!
    3. 退出之后再重新开机!
    这样子,邮件服务器在你重新开机启动后,就可以正常运作了!

    限制

    • 虽然设置上是很简单的,不过,这里有件事要说,就是,在 sendmail 当中,默认值是『无法让大写的ID收发信件的』,例如 VBird@hostname.adsldns.org 就没有办法使用 sendmail 来收发信件!如果要让你的 sendmail 可以支持大写的 ID ,则必须直接修改 /etc/sendmail.cf 这个文件,而,Redhat 是无法直接让你修改这个文件....所以,只好请您在设置 ID 的时候,以小写来设置吧!
    • 在收发信件的时间上,如果一封信无法寄出,则会等待四小时、一天,这两个时段,分别发一封警告信给你,到第五天还无法将此信投递的时候,系统就会将原信退还给你啦!

Windows 设置

好了,现在开始要来设置用户的收信方法了,在此我仍然以 Outlook 来作介绍, Netscape 的方法是差不多的!你只要知道你的邮件服务器的名称就好了(这里假设你的邮件名称是 hostname.adsldns.org):
  1. 打开 OutLook,点击『工具』里面的『帐号』;
  2. 点击『添加』选择『邮件』来设置;
  3. 输入显示名称:这个名称是别人在收信的时候,可以看到的寄件人称谓;
  4. 接着下来比较重要了,请使用你的 ID@hostname.adsldns.org 登录你的邮件服务器;
  5. 然后,当然邮件服务器收发都是同一个,请使用你的 DNS 申请的名称;
  6. 输入帐号与密码,也可以选择『记忆密码』,然后按下一步,就完成了。
基本上,Windows 这边只要设置如此即可!然后你就可以用你的 Linux 来当邮件服务器啰!!

设置邮件别名转寄

你有没有发现,通常一个人在一个机器上只有一个 ID ,但是,如果你想要让你的很多别名都可以直接寄到你的帐号中的话,要如何是好?又,如果你想要让你的小组成员都可以收到同一个帐号的信,要如何设置呢?
  1. 一个人拥有多个不同的虚拟信箱

  2. 假如你的 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 来解决就可以了!
    • 运行 /bin/userconf;
    • 选择 User accounts
    • 选择 pig 这个帐号;
    • 在出现的框框中,将光标往下移动,直到出现如下图所示:

    • 在上面 Email alias (帐号别名)的地方输入你想要的别名(可以多重设置喔!)
    好了!设置完成之后,只要选择 Accept ,不用进行任何其他的步骤, smwang 这个虚拟的信箱就激活了!方便吧!另外,你一个帐号可以多重设置很多的虚拟信箱喔!
     
  3. 多人共用一个帐号

  4. 相反的,假如你们一票同学都希望拥有同一个信箱,如此一来,当 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 这四个人的信箱中,所以这四个人只要打开自己的信箱就可以收到同一封信了!
其实,上面两个方法仅要改变一个文件即可做到,就是修改 /etc/aliases 这个文件,这个文件有点像这样:
 
#
#       @(#)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
有没有看到最后一行,smwang:  pig ,在虚拟帐号后面接实体帐号,而每个帐号名称中间以『,』符号分隔!因此,当你需要设置邮件别名的时候,除了 userconf 之外,也可以使用这个文件来修改!
但是请注意,修改完成之后,还必须运行 newaliases 来加载这个文件的设置进入 sendmail 中才行!也就是说你必须:
  • 修改 aliases 文件;
  • 运行 newaliases 来启动。

使用 Linux 系统寄信

用 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 进入后,输入每一封信件的号码来看信的内容!
当然还有很多的功能可以使用的,就要让你自己来摸索啰!
修改历史:
2002/01/01以来统计人数
其他链接
环境工程模式篇
鸟园讨论区
鸟哥旧站

今日 人数统计
昨日 人数统计
本月 人数统计
上月 人数统计