伺服器架設篇 - 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以來統計人數
其他連結
環境工程模式篇
鳥園討論區
鳥哥舊站

今日 人數統計
昨日 人數統計
本月 人數統計
上月 人數統計