0.聲明
本文是在《通過exim建立家庭網絡的郵件系統》一文的基礎上修改的,作者:Jan W.Stumpel,Oegstgeest, The Netherlands。
這篇章的地址是:http://211.167.66.225/~yzhao/lg-zh/lg-zh-issue8/stumpel.html
1.簡介
我想現在一個再普通的單位,也會需要用到電子郵件。我所在的企業,已經到了無法離開 email的地步——每當郵件服務器出現問題,我的電話都會被打爆。在M$平台上,郵件服務器市場基本上被兩個軟件占領:M$的Exchange和 Lotus的Domino/Notes。這些軟件所花費的費用,實在不小。而Unix平台上,我們有很多選擇,而且都是免費的。
在Debian裡面,我們不用Sendmail,也不用Qmail和Postfix,而是用Exim,這是Debian的缺省郵件服務器,連基本系統都附帶了這個軟件。理由我就不說了,反正,Debian推薦的,不會錯。
1.1 我們將實現的功能
◆ 局域網中的用戶可以實現本地郵件的發送和轉發。
◆ 發往局域網以外的郵件有正確From:<郵件地址>,以使外部的郵件能夠正確的回復。
◆ 電子郵件賬號是所有本地子網用戶所共享,但是要實現每個用戶僅僅能夠收到自己的郵件。
◆ exim作為郵件的收發代理(它比sendmail好配置的多)。
◆ mail作為Linux端的郵件客戶程序。
◆ Microsoft Outlook Express
作為Windows2000端的郵件客戶程序(同樣你也可以使用其它的類似工具,比如Foxmail)。
◆ qpopper 作為POP3服務器, 用來把郵件從Linux系統中轉移到Windows2000機器上。
◆ fetchmail 用來從互聯網上收取郵件。
我在兩台機器上(分別安裝Linux和Win2000系統)做的測試,當然,win9x/NT/XP都可以,而且兩台機器都是Linux的話也當然可以。這個方案,應付一個中小型的辦公室應該綽綽有余。
1.2 網絡和命名
在這篇文章中我假定以下的名字(您實際應用時應該做寫修改,以適應您的實際情況):
◆ 擁有者和系統管理員的名稱 kanaka Leng。
◆ Linux機器名為 Debian。
◆ Win2000 機器名為 Notepad。 通常使用者為 ganghua Leng。
◆ kanaka 在 Debian 機器上的注冊用戶名為 kanaka。
◆ ganghua 在 Debian 機器上的注冊用戶名為 ganghua。
◆ganghua在Notepad機器上的注冊用戶名也為ganghua。她的在Linux下的Debian機器和Windows2000上的口令也相同。
◆ 我們公司的局域網通過寬帶連接互聯網,當然你通過普通撥號也可以。
◆ kanaka 和 ganghua 都使用電子郵件地址:[email protected]。
◆ kanaka到POP3收信的口令為kanakapswd。
◆ ISP的發送郵件的郵件服務器為smtp.yeah.net。
◆ ISP的接受郵件的郵件服務器為pop3.yeah.net。
機器Debian和Notepad都屬於一個域,域名為test.com。
這個域名是我們內部搞測試用的,我們並沒有注冊這個域名,因而對於外部網絡來說,並不能直接識別這個域名。
此外,我還假設內部網絡已經正常工作,
並且已經擁有使用daild實現的非永久撥號連接,或者寬帶網連接。在Debian機器上也沒有安裝DNS服務。/etc/resolv.conf中只是加入了ISP提供的兩個DNS服務器的地址。同樣的設置也要加在Notepad機器上的TCP/IP設置中。
1.3 郵件地址
在"To:"和"From:"中指定郵件地址是一封郵件的基本組成部分, 此外還有更多的內容。 舉例來說: To: ganghua Leng
'ganghua Leng'是一個"real-name part"(真實姓名部分)。 這是通過撰寫電子郵件的程序加上的。 這個部分就是將郵件發送給ganghua本人的依據。注意:如果在real-name part中有句點存在, 郵件地址必須用"符號包圍起來(例如:"kanaka C.Leng")。 您可以用man mailaddr參考一下相關的幫助頁。
2.安裝
由於我們已經安裝了Debian基本系統,而Debian基本系統裡面含有exim和mail這兩個軟件,所以我們只需要安裝這兩個:fetchmail、fetchmailconf和qpopper。
# apt-get install fetchmail fetchmailconf qpopper
其中,fetchmailconf是用來配置fetchmail的工具。
系統會有一些問題提問你。當問你是否以root身份運行system-wide fetchmail時,答Yes。其他的都選默認值。 //本文來自電腦軟硬件應用網www.45it.com轉載請注明
3.配置
3.1 配置Debian的hosts
Debian機器上的/etc/hosts文件內容如下:
127.0.0.1 localhost 192.168.1.1 Debian.test.com Debian 192.168.1.2 Notepad.test.com Notepad
3.2 配置exim
在Debian下,這一切都是由eximconfig程序來完成的。
# eximconfig
程序將問到一些問題,你可以參考下面的回答:
◆ 你的系統是一個Internet主機(選擇1,雖然你在局域網。這樣你可以發郵件到互聯網)。
◆ “顯示的郵件域名”為test.com。
◆ 系統有其他的名稱嗎?你可以回答 Debian:localhost。
◆ 你不想轉發任何非本地域的郵件。保持none,按回車。
◆ 你想轉發的本地域地址為192.168.1.0/16。
◆ 處理向外轉發的郵件的smarthost 地址為 smtp.yeah.net。
◆ 系統管理員的郵件為kanaka(非root)。
3.3 配置Windows2000
3.3.1 hosts
在Notepad機器上的c:\winnt\system32\drivers\etc\hosts文件中的內容跟Debian機器中的/etc/hosts文件的內容一樣。
127.0.0.1 localhost 192.168.1.1 Debian.test.com Debian 192.168.1.2 Notepad.test.com Notepad
3.3.2 郵件客戶端
在Microsoft Outlook Express(或者你在Win2000使用的其他此類的郵件客戶程序)。 必須都將Debian輸入作為SMTP 郵件服務器和POP3服務器。在“POP3賬號名”和“POP3口令”輸入框, 輸入用戶名ganghua和她在linux下的口令。 輸入姓名為ganghua Leng;電子郵件地址為 [email protected]。 注意電子郵件地址必須以本地域做後面的地址。
4.小測試
通過上述的設置,本地的用戶之間應該已經可以實現相互的發送和回復信件了。在Outlook Express裡面的測試我就不說了,我來說一下在Debian上面用mail來做測試。
# mail kanaka Subject: This is my First test-mail! Hi,kanaka, This is the first time that I send a mail by exim. . Cc: [email protected] #
上面我們給本地的kanaka發了一封郵件,並抄送給了互聯網上的 [email protected]。注意,要結束一封信的內容,在新的一行輸入“.”就可以了。我在Windows 2000上用Outlook Express就可以收到發給kanaka的信;而發給[email protected]的信,我到freemail.yeah.net站點上去,也收到了。
現在test.com已經真正成為了一個具有郵件轉發功能的本地域,而且可以發送郵件到互聯網上的[email protected]。但是,一個格式為From:[email protected]的地址顯然是無法被外部用戶回復的,因為對於外部網絡來說,test.com是一個不存在的(因而不合法)的域名。因此,我們還需要修改From:的地址。
5.修改 From: 的地址
在往互聯網上發送郵件的時候,為了他們可以正確的回復,我們必須把本地的From: 地址格式改變成為一個合法的電子郵件地址。 借助於exim的"傳送過濾器", 我們可以實現這一功能。 往外部轉發的郵件經過這個傳送過濾器以後, From: 中的地址就會被改變, 而對於本地郵件則沒有什麼影響。
下面的過濾器將實現這個惡作劇式的技巧, 首先我們確定我們要改變的地址永遠包含在"<>"符號之內。 雖然不能完全保證, 但是通常的郵件程序:mail甚至Microsoft Outlook Express都是生成這種格式的電子郵件地址。
5.1 創建outfit文件
我們來創建一個文件,/usr/bin/outfit,內容如下:
#!/usr/bin/perl while () { if (/^From: /) { s/<.*>/<'[email protected]'>/; print "$_"; last; } print "$_"; } while () { print "$_"; }
把這個文件放到/usr/bin目錄中,命名為outfit,不要忘記把上面的電子郵件地址換成你自己的電子郵件地址! 然後,通過下面的命令chmod +x /usr/bin/outfit加上可執行的權限。
# chmod +x /usr/bin/outfit
5.2 修改exim.conf
打開/etc/exim/exim.conf,找到下面一行:
driver = smtp
在它的下面加上兩行,就成了:
driver = smtp headers_remove = "sender" transport_filter = "/usr/bin/outfilt"
通過上述對/etc/exim.conf文件的修改,無論何時發送一封電子郵件到本地域以外時,都可以被exim正確的投遞了。如果你使用的是撥號網絡,那麼Exim(通過daild)每發送一次郵件,就會向外撥一次號。而我們公司的寬帶24小時在線,所以郵件每次都是直接就發出去了。
6.配置Fetchmail
我們需要運行fetchmailconfig,來在你的主目錄裡產生一個叫.fetchmailrc的文件,否則你就不能使用fetchmail。 fetchmial將從互聯網的郵件服務器上取回郵件(並轉交給exim再做本地投遞)。
# fetchmailconfig fetchmialconf must be run under X
你看到了吧,它說fetchmialconf這個程序比如在X下面運行。唉!我們要把debian做服務器用,而服務器根本不需要安裝X的,我們不會為了配置fetchmail再去安裝一個X系統和一個窗口管理器吧!好吧,那麼我們就手工寫這個文件吧,其實也很簡單。
由於我們是要把郵件接收到kanaka在本地的信箱裡面,所以應該在kanaka的主目錄裡面產生這個.fetchmailrc,所以我們切換到kanaka用戶,再進行操作:
# su kanaka $ cd $ nano .fetchmailrc
然後,輸入以下內容,存盤退出即可:
set postmaster "postmaster" poll pop3.yeah.net with proto POP3 user "[email protected]" password "kanakapswd"
.fetchmailrc文件可以在不同用戶之間相互拷貝,只要把文件的屬主設置成相關的用戶即可。不過把用戶的郵件密碼用明碼寫在這個文件中顯然是一種不明智的方式。或許應該有更好的方法,請大家告訴我啊,呵呵。
然後,使用fetchmail命令來把郵件從互聯網上拖到本地來:
$ fetchmail 1 message for [email protected] at pop3.yeah.net (1648 octets). reading message [email protected]@pop3.yeah.net: 1 of 1 (1648 octets) . flushed
然後,你可以在Windows 2000的Outlook Express裡面,從本地接收這些郵件。
7.修改exim的投遞限制
Exim 缺省的一次投遞郵件的最大數量為100封。
你可以根據你們單位的實際情況,修改這個值。如果需要取消這個限制,就把它改為0,不過小心受到攻擊:
smtp_accept_queue_per_connection = 0
8.綜合測試
你可以在Debian上和Windows 2000上多發幾封郵件,做一下測試。
9.TODO
在下一個版本中,我們將描述如何使用.forward文件,實現轉發,把信件正確的投遞郵件給某個用戶,而不是一下子都發給kanaka。
我們還將描述,如何建立一個webmail系統。
10.結束語
本文是《Debian服務器設置入門》系列教程之第三章,建議您按照順序閱讀,有問題可以和作者kanaka聯系。
11.參考文獻
本文在開頭就聲明,本文是在《通過exim建立家庭網絡的郵件系統》一文的基礎上修改的,作者:Jan W. Stumpel, Oegstgeest, The Netherlands。
這篇章的地址是:http://211.167.66.225/~yzhao/lg-zh/lg-zh-issue8/stumpel.html
之所以這樣,是因為,這篇文章對我們來說太珍貴了,除了她,我沒有找到其他關於exim的資料。
非常感謝原文作者,以及翻譯者!