設定郵件伺服器(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 進入後,輸入每一封信件的號碼來看信的內容!