| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
一直以來﹐電子郵件系統就是網路管理中一個大題目﹐其複雜性不亞於管理一個現行網路﹐甚至有些公司還專門有人負責郵件系統的管理工作呢。 認識郵件系統 在我們真正動手設定 Linux 的email 系統之前﹐最好先了解一些關於 email 系統的術語和功能。 先讓我們認識兩個詞﹕MUA 和 MTA ﹐它們分別是 Mail User Agent 和 Mail Transfer Agent 的意思。MUA 從字面上看似乎好容易給它嚇死﹐但說穿了您可能會笑耶﹕我們平時用的 Outlook Express、Netscape Mail、或是 Linux 上面的 pine ﹐它們都是 MUA 。簡單說﹐MUA 是用來給使用者流覽郵件和書寫郵件的程式。 MTA 呢﹖我們管它叫郵件伺服器好了﹐它負責 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 那裡下載回來。所以﹐當您設定 MUA 的時候﹐就要分別指定 SMTP 和 POP 伺服器的位址了﹐雖然﹐大多數情況之下都可能會是同一台機器。如果您看一看 Linux 的 /etc/services 這個檔案﹐您會發現如下這幾行﹕
它們分別指定了郵件伺服器和外面聯係所使用的 Port 。您會看到 POP 也有兩個版本﹕2 和 3 ﹐分別使用 109 和 110 這兩個 port。 或許您已經留意到 IMAP (Internet Message Access Protocol) 這個協定吧﹕
這個 IMAP 是目前新的郵件協定﹐通過 IMAP﹐ 使用者在 MUA 那端就無需分別指定 SMTP 和 POP 作為上傳和下載協定了﹐而只一個 IMAP 協定就可以﹐而且 IMAP 還可以讓不同的使用者共用一個 MUA﹐非常方便哦。 現在我們對郵件系統應該有了初步的概念了吧。讓我們簡單的看一看一封郵件的傳遞流程﹕
先建立連接﹕
您會看到這樣的回應﹕
250 redhat52.siyongc.domain Hello IDENT:root@redhat52.siyongc.domain [192.168.0.17], pleased to meet you正如您看到的回應﹐MTA 會非常友善的跟您打個招呼。 如果您要寄信的話﹐先把自己的地址寫在信封上(這是按照西方的信封書寫習慣啦)﹕
250 root@redhate52.siyongc.domain... Sender ok如果您的地址沒問題﹐然後輸入收信人地址﹕
250 kenny@siyongc.domain... Recipient ok如果收件人的地址沒問題的話(嘿﹗他們的效率還真快哦﹐不像我們的郵差﹐要等差不多一個星期才知道收信人地址不對)﹐接著您就可以輸入﹕
354 Enter mail, end with "." on a line by itself以下就是寫信的內容了﹕
250 WAA02035 Message accepted for delivery 在開頭的兩行﹐我們稱之為 Header﹐我們使用 MUA 寫信的時候也是要輸入的。然後接一空白行(這行不能省)﹐再寫信肉。當您要完成信肉的話﹐另起一新行﹐只帶一個“.”符號就可以了。最後﹐我們結束 SMTP 連線﹕
221 redhat52.siyongc.domain closing connection Connection closed by foreign host. 剛才是手工的寫一封信﹐下面﹐讓我們手工地收一封信﹕
Trying 192.168.0.17... Connected to redhat52.siyongc.domain. Escape character is '^]'. +OK POP3 redhat52.siyongc.domain v7.59 server ready然後您輸入POP 使用者名稱﹕
+OK User name accepted, password please再輸入密碼﹕
+OK Mailbox open, 1 messages然後﹐您輸入﹕
+OK Mailbox scan listing follows 1 334 .我們這裡可以看到使用者目前有一封郵件待取﹐如果您要看一看郵件內容﹐請輸入﹕
+OK 334 octets Return-Path:如果您認為郵件1沒必要再留在 MTA 上面了﹐那麼您可以將之刪除掉﹕
+OK Message deleted如果您完成了所有事情﹐要離開的話﹐可以輸入﹕
+OK Sayonara Connection closed by foreign host.嘿﹗真給它氣死啦﹕居然來了句日本話呢﹗ 如果您不能用 POP 連上您的 Linux 伺服器﹐可能您還沒開放 pop/imap 的daemon (還記得這個東東用來做什麼的﹖)﹐請修改您的 /etc/inetd.conf ﹐找到下面幾行﹐將之修改過來﹕
然後﹐您還要讓 inetd 重新讀取設定哦﹕
如果狀況依然不能連上 POP ﹐您就要確定 imap 這套軟體是否已經安裝好﹐輸入﹕
如果得出來的結果什麼也沒有﹐那趕快先把 imap 裝好吧。
到這裡﹐您就會發現﹕哦~~~原來 MUA 只不過幫我們輸入了那些命令罷了。在這一個過程中﹐關鍵的角色是 MTA 如何判斷郵件的路由﹐和如何將郵件傳給對方的 MTA。如果您還沒忘記我們在設定 DNS 裡面關於 MX 記錄的設定﹐或許應該略為知道 MTA 是如何通過 DNS 系統來找到對方網路的 MTA。但要 MTA 判斷出究竟將郵件傳給哪一個 MTA 卻是非常複雜的事情﹐恐怕已經超出這裡要說的範圍了。 不過﹐我非常推薦您看一下 http://turtle.ee.ncku.edu.tw/~tung/mailsys/ 這個網頁。相信對理解郵件系統的運作﹐非常有幫助。 設定sendmail 在 Redhat 6.0 裡面﹐已經自帶了一個 MTA﹐它就是聞名遐邇的 sendmail 系統了。如果說要設定 sendmail ﹐看一看它的設定檔 /etc/sendmail.cf 就像天書一樣﹗ 的確不是件容易的事情﹐如果要想弄懂它﹐有一本 1021 頁的 O'Reilly Sendmail可以看看。 我當然也沒這能力教你設定好一個完全的 sendmail 系統﹐不過﹐如果您只想 sendmail 幫您寄信的話﹐無需設定任何檔案。但條件是您的 DNS 要設好﹐而且對方也能反查得到您的 domain ﹐也就是說﹐最好您的domain 是一個註冊域名。因為當對方的郵件伺服器接到您的郵件請求之後﹐會看看寄信人地址是否可以回郵﹐否則會告訴您諸如“Sender domain must resolve”或“cannot route to sender” 這樣的信息。 換句話說﹐如果您的 DNS 沒有經過註冊﹐人們又怎樣寄信給您呢﹖有一個簡單的辦法是在 MAU 下面設定 repply address 到您的 ISP 或其它合法信箱。要完成一個順利的郵件傳遞﹐最好雙方都可以知道如何回郵﹐使用 DNS 是最普遍的做法。當然﹐您也可以使用 UUCP 或 static mapping 的方法啦﹐但別忘記設定是雙向的。 好了﹐現在假設您已經成功的註冊好 DNS 了﹐寄信應該沒問題了吧﹖但您有否發現﹐從您的 Linux 主機幾出去的郵件﹐其回郵地址格式是這樣的﹕user@host.your.domain.name 呢﹖如果您按 Repply 回復到這個地址﹐應該沒問題的﹐但您有試過使用 user@your.domain.name 這樣的格式嗎﹖試試就知道了﹕如果您沒做任何設定﹐這樣的地址是寄不到使用者信箱的。 有辦法解決嗎﹖當然有啦﹐而且很簡單呢﹗您只要將 your.domain.name 放進 /etc/sendmail.cw這個檔案就可以了﹐這是用來設定郵件伺服器別名的檔案。如果您有多個別名(或曰 domain )要這台主機接收﹐那麼將它們全部寫進這個檔案﹐一個名稱佔一行。然後﹐您竟然無需重新啟動 sendmail 或任何服務﹐設定就已經生效了﹗ 呵呵~~~是否很開心呢﹖不過﹐您有沒有意識到一個問題﹕您使用的 intertnet 連線是固定的還是間斷的呢﹖如果您使用 modem 撥接的話﹐當您下線後﹐如何進行郵件交換呢﹖在預設情況下﹐如果 sendmail 收到郵件傳遞請求之後﹐會即時進行﹐如果因為其它原因(包括離線)而不能即時傳遞的話﹐會將郵件存列於 /var/spool/mqueue 目錄之下﹐然後每隔 1 小時(視乎設定)嘗試重遞﹐如果 4 小時之後還未能送出﹐會發出一封警告信給寄信者﹔如果5 天之後還在 queue 裡面﹐那麼這封信就會退回寄信者了。 假如別人也是用 sendmail 來寄信給您的 domain 的話﹐如果您的伺服器下線了﹐對方也會將信存在 queue 裡面。由此可見﹐使用 ppp 連線並不是理想的郵件傳遞方式。如果您不能建立一條固定的 internet 連線﹐那麼﹐將 DNS 和 Mail 都交由您的 ISP 保管好了。如果是這樣的話﹐您只要在 /etc/sendmail.cf 這個檔案裡面﹐找到這行(大約在 97 行的位置)﹐將之修改為﹕
(注意句子沒有空白鍵)。這樣的話﹐當您的伺服器在線的時候﹐那些不能即時傳遞而存在 queue 的郵件﹐或那些伺服器本身不知道如何傳遞的郵件(如那些非本地郵件)﹐就會第一時間傳給 ISP 的郵件伺服器﹐讓他們代理您的傳遞﹐而您呢﹖Sit back & relax! 哈哈﹐別高興得太早啦~~~ 收信呢﹖﹖是哦~~~ 怎麼收﹖您大可叫您的 ISP 為每一個使用者建立信箱﹐然後讓他們通過 POP 去取信。但這樣的話﹐費用顯然會比較高﹐而且如果以後人員更換的話﹐還得勞煩上頭幫您修改。為何不這樣﹕只需在 ISP 建立一個帳號﹐然後所有的使用者都可以收信呢﹖ 可以造到嗎﹖ 沒問題﹗ 不過﹐除了 sendmail 之外﹐您還得使用另一個程式﹐叫做 fetchmail 的東東。不過﹐條件是 DNS 交由 ISP 管理﹐或從外面透過 DNS 查詢到的 MX 記錄指向 ISP 的伺服器﹔也就是說﹐他們會幫您代收所有傳給您 domain 的郵件﹔同時 ISP 還必須會將所有傳給您 domain 的郵件餵進那個單一信箱去。如果他們不會做﹐只要他們也使用 sendmail ﹐您教他們修改一個檔案﹕/etc/mail/virtusertable ﹐加入﹕
跟著執行﹕
這裡假設他們在設定 sendmail 的時候已經定義出‘FEATURE(virtusertable)’這個功能。而且﹐使用的資料庫格式為‘hash’﹐如果他們使用 dbm 格式的話﹐將 hash 改成 dmb 就可以了。 然後﹐您自己還要修改/etc/sendmail.cf 這個檔案(大約在 91 、136、141 和 1032 行)﹕
(在修改 /etc/sendmail.cf 的時候務必注意﹕句子開頭帶空白鍵﹐或 Tab﹐或是沒有空白﹐效果都不一樣。以上所舉的句子都是直接用字母開頭的﹗) 修改好之後﹐重新啟動 sendmail :
接著﹐我們在 root 的家目錄 /etc/root 裡面﹐建立這樣一個檔案﹕.fetchmailrc (別少了前面的‘.’﹗) ﹕
如果您能進入 X Windows﹐可以執行 fetchmailconf 用 GUI 來設定這個檔案。因為在這個檔案裡面﹐包含了您的 ISP 帳號和密碼﹐為避免其它使用者看到﹐請執行﹕
這樣設定基本已經完成了﹐以 root 的身份執行fetchmail -d 300﹐這樣每隔 5 分鐘﹐fetchmail 就會幫您從 mail.isp.net 的 isp_account 帳號下載郵件﹐同時還會分發到各個使用者的本地郵箱中去。但您也可以使用定時器來設定 fetchmail 的執行動作。例如﹐執行﹕
然後加入這行﹕
這樣系統每隔 20 分鐘就會幫您執行 fetchmail 了﹐當然﹐您的連線也要設定好啦。例如﹐您可以使用 Diald 來實現自動連線﹐不過﹐我這裡略過這部份的討論﹐因為我還沒實際設定過。如果您設定 diald 成功﹐可否將步驟寄來給我呢﹖或許有空我測試出來再和大家分享吧。 設定轉遞 (aliases) 如果您不善忘的話﹐我們在設定 httpd 、news、fetchmail 等服務的時候﹐都常會指定一個管理者的信箱名稱(也可以是地址)﹐例如﹕webmastet、postmaster 等等。您或許知道這些使用者其實並沒有出現在 /etc/passwd 中﹐那麼傳給他們的郵件又會寄哪裡去了呢﹖這個秘密﹐就是郵件伺服器的 alias 功能啦﹐也有人稱之為‘mail list’。說穿了其實只是一個檔案﹕/etc/aliases 。如果您用 vi 去開啟這個檔案﹐多看兩遍您就知道是怎麼回事了。 在 /etc/aliases 這個檔案中﹐您會發現沒有“#”註解的每一行﹐開始都是一個名稱﹐然後跟著一個“﹕”符號﹐然後在其右邊又有其它的名稱。其工作原理是﹕當 sendmail 收到一個本地郵件的時候﹐會檢查這個 /etc/aliase 檔案﹐如果發現“﹕”左邊的名字跟接收者名稱吻合﹐就會將郵件轉遞給“﹕”右邊的名稱。在右邊的名稱﹐可以多過一個﹔也可以是另一個郵件地址﹔也可以指向一個檔案或程式。當郵件轉給右邊之後﹐又重新找一遍這個 /etc/alias 裡面的設定﹐直到再找不到左邊名稱為止。例如下面這個例子﹕
這樣﹐凡是傳給 MAILER-DAEMON 的就會轉給 postmaster ﹐然後再轉給 root﹐另外 daemon 也會轉給 root﹐而 root 呢﹐又分別轉給 netman 和 kenny﹐最後 natman 再也找不到名稱了﹐直接送到 netman 的信箱去﹔而 kenny 呢﹖則通過 sendmail 轉到 kenny@other.mail.net 那個地址去。另外﹐我們只需建立一個 /etc/sales.list 這樣的檔案﹐在裡面寫上所有 sales 的名稱﹐可以全部為一行﹐用‘﹐’和一個空白鍵分隔﹔這樣﹐所有 salse 都會收到寄給 sales 的郵件了。 不過﹐剛才稍微騙了您一下﹐sendmail 真正讀取的並不是 /etc/aliases 這個檔案﹐而是另一個經過資料庫格式過的檔案﹐我們無需知道它叫什麼﹐只要您滿意您的 /etc/aliases 檔案之後﹐馬上執行﹕
進一步修改 到此為止﹐您的 sendmail 已經足以應付日常需要了﹐但有時候您還可能進行額外的設定﹐以符合實際的需求。如果您懂得直接修改 sendmail 的設定檔的話﹐您可以直接修改﹐例如 /etc/sendmail.* ﹐而 /etc/mail/* 的檔案呢﹐您會發現它們大多數都是配對的﹐每個檔案都會對著一個 *.db 的檔案。您可對那些沒有 .db 的檔案修改﹐然後執行﹕
就可以將之編譯成指定的數據庫格式了(通常會是 hash 或 dmb 兩種)﹐因為 sendmail 只會去讀取經過格式化的數據庫啦。例如﹐sendmail 在預設情況下是將 RELAY 功能關閉了﹐也就是說﹐除非指定的主機(或 domain)﹐別的郵件伺服器是不能通過您的 sendmail 傳遞郵件的。如果您要開放 RELAY 給某些主機(或 domain)﹐您可以先修改 /etc/mail/access 這個檔案:
然後執行下列命令就可以了﹕
但還有一個更簡單的方法﹐就是確定 /etc/sendmail.cf 檔案有這樣一行(大約在 123 行附近吧)﹕
然後建立起 /etc/mail/relay-domains 這個檔案﹐將所有要 relay 的機器(或 domain ) 寫進這個檔案﹐每個名稱佔一行﹐這樣就可以了。 其實﹐來來去去這些設定﹐無非都在 /etc/sendmail.cf 這個檔案中﹐但要修改這個一千多行的檔案可不容易哦﹐搞不好您的 sendmail 就不工作了呢。如果您要手工修改它﹐一定要備份一個 copy 哦~~~。 那麼﹐有沒有容易些的設定呢﹖有的﹐就是使用 M4 啦。不過﹐我不打算詳細教您怎樣用 M4 來設定 sendmail.cf ﹐但您可以從下面的案例中看看如何使用 M4 這個程式。 架設Mail Proxy 我們都知道﹐如果使用郵件伺服器﹐最好有自註冊了的 domain ﹐否則充其量只能用在內部網路之上。難道這是縮命嗎﹖非也﹗在下面的案例中﹐我主要參考 http://www.linuxgazette.com/issue42/stumpel.html 這篇文章﹐成功讓沒有註冊的 domain 使用者分享一個 ISP 郵件信箱。準確來說﹐還不是 100% 成功啦。例如﹐我暫時不能使用同一台主機同時負責 SMTP 和 POP 的服務﹐同時﹐還得裝一台 Debian 2.1機器(請參考﹕http://www.linpus.com.tw/manual/debian2.1/index.htm 進行安裝)﹐在 Debian 上不能跑 sendmail﹐而是用 Exim 代替﹔最缺陷的是﹐在回郵地址中﹐必須使用‘ user<isp_account@isp.net>’的格式﹐缺一不可。 如果您對這樣的一個系統有興趣﹐可以繼續往下看﹐也歡迎共同研究研究。 1﹐首先﹐修改您的 /etc/sendmail.mc
注意﹕請將 SMART_HOST 改成您自己的 ISP 郵件主機。 2﹐然後備份好 /etc/sendmail.cf 再執行 m4﹕
3﹐將您的郵件主機名稱和本地 domain 名稱 加進 /etc/mail/genericsdomain裡面去(一個名稱一行)。 4﹐ 設定好使用者的郵件地址轉換﹐請修改/etc/mail/genericstable﹐其內容類似如下(請參照自己的實際情形修改)﹕
其中﹕左邊為本地使用者﹐右邊為 ISP 的郵件帳號地址。 5﹐產生genericstable.db﹐請執行﹕
6﹐然後轉到在 Debian 2.1 機器上面﹐進入 X Windows 裡面執行 fetchmailconf 來設定﹐或直接修改 .fetchmailrc 檔案(在執行下載任務之使用 者家目錄之下) ﹐其內容類似如下﹕
(注意﹐這個檔案比前面的例子略有不同。) 7﹐在 netman (或是在 fetchmailrc 指定的本地接收者) 的家目錄裡面修改 .forward 檔案﹐讓其內容類似如下﹕
(注意﹕如果使用 sendmail 來執行本地郵件的話則會出現錯誤。) 設定基本如此﹐您只需在 MUA 那端將 SMTP 指向 Redhat 機器﹐而將 POP 指向 Debian 機器就可以了﹐且 ‘Identity’那裡一定要輸入使用者名稱(和本地郵件帳號名稱一至) 。通過 Redhat 傳出去的信件都會自動將回郵地址改成 user<isp_account@isp.net> 的地址﹐所以對方只要按 Repply 就可以了。但是如果對方要新撰寫郵件給您的本地用戶﹐必須也要依照上述格式才可。否則所有郵件都只能下載到 fetchmail 指定的使用者那裡﹐而不會再分發出去了。 架設虛擬郵件主機 相信您已經知道如何修改 sendmail.cw 讓 sendmail 接收不同 domain 的郵件了。而且﹐從前面的 virtusertable (也就是“ 設定 fetchmail ”那裡)的設定例子來看﹐也知道如何讓 sendmail 將一個地址轉寄到另外一個地址去。但無論如何設定﹐如果目的地的信箱是在本 sendmail 機器上的話﹐所使用的帳號將會是 Linux 的系統帳號。舉個例子說﹕ 我們修改 /etc/sendmail.cw 讓 sendmail 可以接收另外兩個 domain 的郵件﹕
負責這兩 domain 的郵件主機分別為 mail.v1.test.domain 和 mail.v2.test.domain。這裡﹐我們假設這兩台虛擬主機的 IP Alias 和路由都已經設定好了。同時 DNS 那邊也已經設定好這兩個 domain 了(DNS 的設定方法請參考“ 架設 DNS ”)﹐MX 和 A 記錄都指向本主機。 然後﹐我們建立兩個帳號﹕v1test1 和 v2test2 。當 sendmail 接收到 v1test1@v1.test.domain 和 v2test2@v2.test.domain 這樣的郵件時﹐它可以輕鬆的將郵件分寄給 v1test1 和 v2test2 這兩位使用者。他們只要將 POP server 分別設為 mail.v1.test.domain 或 mail.v2.test.domain ﹐或干脆用本機的真實名稱﹕ redhat52.siyongc.domain ﹐就可以將信件取回去閱讀。Tips: 如果您想讓帳號只能上來收 email 的話﹐可以直接修改 /etc/passwd﹐將使用者的 GID 設為 45 ﹐同時將 shell 改為 /bin/false 。假如 GID 45 還沒存在於 /etc/group 中的話﹐可以用這個命令設定﹕ groupadd -g 45 popusers 。 但如果 v1.test.domain 和 v2.test.domain 都想有一個帳號 test 來接收各自的郵件呢﹖注意﹕他們可不是相同的人哦﹐怎麼辦呢﹖ 方法之一是用 virtusertable 來做﹕修改 /etc/mail/virtusertable﹐讓它包括這兩行﹕
然後執行﹕
這樣的話﹐v1test1 就可以收到 test@v1.test.domain 的郵件了﹐而 test@v2.test.domain 則會轉給 v2test2 這位使用者。這時候﹐v1test1 的 POP server 可以用 mail.v1.test.domain ﹐而 v2test2 則可以用 mail.v2.test.domain 。但有一個問題是﹕在 v1 和 v2 這兩 domain 下﹐他們不能共用 test 這個帳號來登錄﹕要麼將 test 給 v1 用﹐讓 v2 繼續用 v2test2 ﹔或者是相反。 假如 v1 和 v2 都堅持要用 test 這個帳號來取信﹐有辦法解決嗎﹖ 哈哈﹐誠如您一直看下來的感覺﹕凡是網中人在 study-area 提出這樣的問題﹐大多數情形是已經備好答案的了。沒錯﹕可以﹗ 做法是﹕將您的 Redhat 升級到 6.1 或以後的版本﹐同時確定下面的程式存在﹕ /usr/lib/linuxconf/lib/vpop3d 再來呢﹐參考 RUN PC 第 74 期刊 163 頁的介紹就可以做到。底下的步驟是網中人參考 RUN PC 的做法﹐在 Linpus6.4 (Redhat6.2)的實作經驗﹕
到這裡﹐可以說已經完成了虛擬郵件主機的設定了。您只要將 client 的 POP server 指向虛擬郵件主機(mail.v1.test.domain)就可以將郵件下載回來。不過有一個地方要注意的是﹕不建議在 MUA 上使用 IP 來指定虛擬主機的地址﹐而應該用它的 FQDN 。而且﹐當虛擬主機架設起來後(使用 vpop3d)﹐原來真實的帳號反而用不了﹐您必須將真實 domain 虛擬化。其情形就像 Apache 的 Name-based Virtual Host 一樣。 到目前為止﹐我還找不出除了 linuxconf 之外的方法來建立虛擬郵件主機和帳號。只知道系統會去修改 /etc/sendmail.cf、/vhome、/etc/vmail、和 /var/spool/vmail 等地方。假如日後測試出來再和大家分享經驗吧。 設定 SMTP 認證 通過 POP 協定連接遠端郵件主機的時候﹐使用者要提供帳號和密碼﹐等通過認證後才能將郵件取回。但是﹐使用 SMTP 連接遠端郵件主機送信的話﹐卻無需使用認證﹐這完全取決於 sever 那端如何設定其 RELAY。雖然 sendmail 利用 RELAY 的限制來阻止了許多不必要的郵件轉遞﹐但是如果您想開放您的 sendmail 給那些從不同 ISP 上網的員工或有關人員的話﹐這樣的限制反而會變得非常的麻煩。您可以參考一篇小州先生的文章﹐看看如何解決這個問題。 不過﹐如果您有打算將 sendmail 升級到 8.10 或以後的版本﹐您可以利用一個叫做“ SMTP 認證”的功能﹐讓那些通過認證的使用者解決 RELAY 的問題﹐而且還可以為系統提供更好的安全保護和追蹤。下面是我根據 http://beta.wsl.sinica.edu.tw/~ylchang/Email/sendmail-auth/index.html 上面的文章而實作出來的。同時還用 poprelayd 這隻 perl script 來架起 POP Before SMTP 這個方案﹐請參考http://poprelay.sourceforge.net/poprelay.html 一文。 步驟如下﹕
我必須在這裡指出一點是﹕我這裡用的系統是一個新裝的 Linpus6.4 Linux﹐其實就是 Redhat6.2﹐而且是從原已運作的 sendmail 升級上來的。如果您在編譯的過程中遇到 library 的問題(諸如: xxxxxx undeclared ...)﹐那就需要更多的努力先將套件所需的 library 裝好才能繼續。同時﹐編寫設定檔的時候也要格外小心鍵盤敲擊的準確性﹐就算由於拼寫錯誤而令設定檔有誤﹐安裝並不會因此而中斷﹐且較難察覺其中的不實。 假如您將 SMTP AUTH 和前面介紹的“虛擬郵件主機”混合在一起使用﹐在將來的修改過程中﹐可能會引至某些問題。而至於所引出的問題﹐恐怕已經超過這裡要說明的了。我建議同時保留 /etc/sendmail.cf 和 /etc/mail/sendmail.cf 兩份檔案﹐如果您會得將兩者的內容同步就更好不過。 其它 另外﹐有些公司或許會想到照顧離職的員工的轉信要求﹐但又不想將所有信件都轉到其新郵箱去﹐例如﹐和原工作相關的客戶郵件﹐那最好是讓系統自動回覆一封郵件給發信人﹐告知員工離職的消息﹐如果還有其新的信箱地址﹐也一並告知﹐然後讓發信人自己決定。為此﹐網中人寫了一只 script 來解決這個需求﹐如果您有興趣的話﹐可以 點這裡 將script 下載回去﹐然完成如下的操作﹕
這樣的所有寄到 user_name 這個賬號的郵件﹐都將產生一封回應給寄信人﹐告知員工離職的消息﹐同時把新的郵件地址也告訴對方。不過﹐要提醒一點的是﹐雖然我將 script 放在 /etc/smrsh 目錄下﹐但其實我的 sendmail 並沒有啟用 smrsh 功能。如果您使用 smrsh 的話﹐那就要先先花時間解決 smrsh 的問題了。 測試 如果您在測試過程中遇到困難﹐可以先查一查 /var/log/maillog 這個檔案﹐看看 server 傳遞是否完成(denied 或 accepted)﹐由此判斷出問題的原因﹕
www.study-area.org © 2001 Netman 網中人Last Updated: March 29, 2001 |