Sendmail郵件伺服器快速指南(1)
來源:互聯網
上載者:User
伺服器|郵件伺服器 人們在互連網上最常使用的就是電子郵件,很多企業使用者也經常使用免費電子郵件系統。本文就以step by step的方式引導使用者從sendmail原始碼開始構建一個可以滿足基本工作需要的郵件系統。
一、概述sendmail是最重要的郵件傳輸代理程式程式。理解電子郵件的工作模式是非常重要的。一般情況下,我們把電子郵件程式分解成使用者代理程式,傳輸代理和投遞代理。 使用者代理程式用來接受使用者的指令,將使用者的信件傳送至信件傳輸代理,如:outlook express、foxmail等。而投遞代理則從信件傳輸代理取得信件傳送至終端使用者的郵箱,如:procmail。
當使用者試圖發送一封電子郵件的時候,他並不能直接將信件發送到對方的機器上,使用者代理程式必須試圖去尋找一個信件傳輸代理,把郵件提交給它。信件傳輸代理得到了郵件後,首先將它儲存在自身的緩衝隊列中,然後,根據郵件的目標地址,信件傳輸代理程式將找到應該對這個目標地址負責的郵件傳輸代理程式伺服器, 並且通過網路將郵件傳送給它。對方的伺服器接收到郵件之後,將其緩衝儲存在本地,直到電子郵件的接收者察看自己的電子信箱。
顯然,郵件傳輸是從伺服器到伺服器的,而且每個使用者必須擁有伺服器上儲存資訊的空間(稱為信箱)才能接受郵件(發送郵件不受這個限制)。可以看到,一個郵件傳輸代理程式的主要工作是監視使用者代理程式的請求,根據電子郵件的目標地址找出對應的郵件伺服器,將信件在伺服器之間傳輸並且將接收到的郵件緩衝或者 提交給最終投遞程式。有許多的程式可以作為信件傳輸代理,但是sendmail是其中最重要的一個,事實證明它可以支援數千甚至更多的使用者,而且佔用的系統資源相當少。不過,sendmail的配置十分複雜,因此,也有人使用另外的一些工具,如qmail、postfix等等。
當sendmail程式得到一封待發送的郵件的時候,它需要根據目標地址確定將信件投遞給對應的伺服器,這是通過DNS服務實現的。例如一封郵件的目標地址是ideal@linuxaid.com.cn,那麼sendmail首先確定這個地址是使用者名稱(ideal)+機器名(linuxaid.com.cn)的格式,然後,通過查詢DNS來確定需要把信件投遞給某個伺服器。
DNS資料中,與電子郵件相關的是MX記錄,例如在linuxaid.com.cn這個域的dns資料檔案中有如下設定:
IN MX 10 mail
IN MX 20 mail1
mail IN A 202.99.11.120
mail1 IN A 202.99.11.121
顯然,在DNS中說明linuxaid.com.cn有兩個一個信件交換(MX)伺服器,於是,sendmail試圖將郵件發送給兩者之一。一般來說,排在前面的的MX伺服器的優先順序別比較高,因此服務 器將試圖串連mail.linuxaid.com.cn的25連接埠,試圖將信件報文轉寄給它。如果成功,你的smtp伺服器的任務就完成了,在這以後的任務,將由mail.linuxaid.com.cn來完成。在一般的情況下,mail換器會自動把信件內容轉交給目標主機,不過,也存在這樣的情況,目標主機(比如linuxaid.com.cn)可能並不存在,或者不執行smtp服務,而是由其mx交換器來執行信件的管理,這時候,最終的信件將儲存在mx機器上,直到使用者來察看它。
如果DNS查詢無法找出對某個地址的MX記錄(通常因為對方沒有信件交換主機),那麼sendmail將是試圖直接與來自郵件地址的主機對話並且發送郵件。例如,test@aidgroup.linuxaid.com.cnDNS中沒有對應的MX記錄,因此sendmail在確定MX交換器失敗後,將從DNS取得對方的IP地址並直接和對方對話試圖發送郵件。