天天看點

歐陽俊曦精通 Solaris / I

文章來源: http://download.csdn.net/source/149097

第一部分 郵 件 服 務

如果需要設定新的郵件服務或擴充已有的服務,參閱本部分的章節。本部分用 4章描述Solaris 2.x郵件服務。第 1章描述郵件服務元件、定義郵件服務術語,以及解釋程式在郵件服務中的互相作用。第 2章描述幾種通用的郵件配置,并提供設定每種配置的政策。第 3章描述如何設定和管理郵件服務。第 4章描述sendmail配置檔案,并解釋在郵件系統中需要更複雜的配置時,如何進行自定義。

第1章 了解郵件服務

SUNOSTM5.x郵件服務使用略作修改的 SUNOS 4.x的sendmail郵件路由程式,該程式來自 4.3版本的BSD UNIX?。SunOS 5.x不使用AT&T的郵件路由程式。如果對 SunOS 4.x的郵件服務比較熟悉,則設定和管理 SunOS 5.x 系統的郵件服務十分容易。而且如果網絡上有一些系統運作 SunOS 4.x 系統軟體而其他的系統運作 SunOS 5.x系統軟體,則郵件服務的設定和管理也十分容易。為了便于發現這些修改, SunOS 5.x sendmail程式的新資訊描述旁邊有圖示,并标記為 SVR4。作為系統管理者,可能需要擴充已有的郵件服務或設定新的郵件服務。為完成這些任務,本章定義了郵件服務術語,而且描述了郵件服務元件。

1.1   郵件服務術語

本節定義以下術語以及其在郵件服務中的使用: ■ 在郵件配置中的系統。 ? 中繼主機。 ? 網關。 ? 郵件主機。 ? 郵件伺服器。 ? 郵件客戶。 ■ 使用者代理 (UA)。 ■ 郵件傳輸代理 (MTA)。 ■ 域。 ■ 郵件位址。 ■ 信箱。 ■ 别名。

1.1.1   在郵件配置中的系統

郵件配置最少需要三個要素,它可以在同一個系統上,也可以由分離的系統提供:郵件

2 第一部分 郵 件 服 務

下載下傳

主機、不少于一個郵件伺服器以及郵件客戶。如果希望使用者能夠與域之外的網絡通訊,則還需要一個中繼主機或網關。圖1-1顯示了使用所有 4個要素的标準的電子郵件配置。每個要素在後面的章節都進行了辨別和描述。 1. 中繼主機中繼主機是運作至少一種郵件相關協定 (稱為郵件處理程式 )的系統。每個郵件處理程式指定用來發送郵件的政策和機制。中繼主機處理無法決定的郵件— 這些郵件的位址在域中找不到接收者。如果有中繼主機,則 sendmail使用它接收和發送域以外的郵件。發送中繼主機上的郵件處理程式必須與接收系統中的郵件處理程式相容,如圖 1-2 所示。在send-mail.cf檔案中指定郵件處理程式,預設的 send-mail.cf檔案指定好幾種郵件處理程式,如smartuucp、ddn、ether和uucp,也可以定義其他的。其他域

延時主機A

郵箱

延時主機或網關

郵件主機

郵件伺服器 郵件伺服器

郵箱

延時主機B

郵件發送程式A

客戶

客戶郵件發送程式A

圖1-2   在中繼主機和接收系統上的圖1-1   标準電子郵件配置相容的郵件處理程式

中繼主機和郵件主機可以是同一個系統,或者将另一個系統配置為中繼主機,如圖 1-4所示。事實上,如果站點與外界有多個連接配接,在域中可以配置多個中繼主機。如果有 uucp或網際網路連接配接,配置有那些連接配接的系統為中繼主機。 2. 網關網關是處理運作不同通信協定的網絡連接配接的系統,如圖 1-3所示。中繼主機和它連接配接的系統必須使用比對的郵件處理程式。網關可以處理具有不同郵件處理程式的系統的連接配接。在網關系統中必須自定義 sendmail.cf檔案,這是一件困難而且費時的工作。

下載下傳

延時主機郵件發送程式

延時主機第1章 了解郵件服務3

郵件主機

圖1-3   網關可以處理不同通訊協定之間的連接配接

如果必須設定網關,查找一個與所需的配置近似的網關配置檔案并修改以比對目前情形。例如,可以修改預設的/etc/mail/main.cf檔案以便在網關系統中使用。 3. 郵件主機郵件主機是指定為網絡中主郵件系統的系統。郵件主機是這樣的一個系統,其他系統将無法發送的郵件前傳到該系統。通過在主機資料庫中的該系統的 Aliases行添加 mailhost,或者在該系統的 /etc/hosts檔案的 IP位址行添加 m a i l h o s t可以指定郵件主機。在郵件主機系統中還使用 main.cf檔案作為郵件配置檔案。郵件主機最好選擇連接配接到以太網和電話線的系統或者配置為互連網路由器的系統。如果有一個單機系統沒有連網但是是一個分時配置,則可以視為單系統網絡的郵件主

網關B

網關A 郵件發送程式A 機。與此類似,如果在以太網中有幾個系統但是都沒有電話,則可以指定一個系統為郵件主機。 4. 郵件伺服器郵件伺服器是在 /var/mail目錄存儲信箱的任意系統。郵件伺服器負責路由從郵件客戶來的所有郵件。當客戶發郵件發送程式B

圖1-4   中繼主機和郵件主機可以在同一個系統或不同系統送郵件,則郵件伺服器将郵件放入發送隊列。一旦郵件進入隊列,無論客戶重新開機系統或關閉系統都不會丢失郵件。當接收者收到客戶發送的郵件時,該消息的“從:”行中的路徑包含郵件伺服器名稱。如果接收者選擇回複,則回複到使用者在伺服器上的信箱中。當信箱在郵件伺服器上時,消息發送到伺服器上,而不是直接到客戶系統。當信箱在使用者本地系統中時,如果沒有從其他系統加載 /var/mail,本地系統充當自己的郵件伺服器。如果郵件伺服器不是使用者本地系統,使用 N F S的使用者可以在 / e t c / v f s t a b   檔案中加載 /var/mail、使用自動加載程式或登入到伺服器閱讀郵件。注意 如果自動加載/var/mail目錄,可能産生在有SunOS 4.x客戶的異構網絡上收發郵件的問題。最好選用提供使用者主目錄的系統或經常備份的系統作為郵件伺服器。表1-1顯示一個有大約 12 000名雇員的計算機公司中郵件大小和郵件流量的一些采樣統計資料。

4 第一部分 郵 件 服 務

下載下傳

注意 表1-1中的資訊僅适用于ASCII消息。如果有多媒體郵件,它允許使用者傳輸任何類型的資料(不僅僅是 ASCII 文本),則一個郵件的大小可能急劇增長。将來系統管理者需要配置設定更多的多媒體郵件的緩沖空間。

表1-1   郵件消息和流量的采樣統計資料統計資料(位元組) 6500

郵件平均大小描 述 140K 15K 40M 18000M 55000M 2M

5. 郵件客戶一個使用者一天接收的平均郵件量小信箱大小(使用者定期閱讀并在其他地方存儲郵件 ) 大信箱大小(使用者在 /var/mail 目錄存儲長期郵件) 公司一天發送出去的平均消息量公司一天接收進來的平均消息量推薦配置設定給每個使用者信箱的緩沖空間,基于本表的指數郵件客戶是接收在伺服器上的郵件且沒有本地 /var/mail目錄,使用 NFS加載/var/mail的任何系統。必須确認郵件客戶在 /etc/vfstab檔案中有合适的項目而且有從郵件伺服器加載信箱的加載點。

1.1.2   使用者代理

使用者代理是作為使用者和 sendmail程式之間接口的程式。 SunOS 5.x系統軟體的使用者代理是 /usr/bin/mail、/usr/bin/mailx、$OPENWINHOME/bin/mailtool和/usr/dt/bin/dtmail。

1.1.3   郵件傳輸代理

傳輸代理負責消息的實際接收和發送。 SunOS 5.x 系統軟體的傳輸代理是 sendmail。傳輸代理執行以下功能: ■ 從使用者代理接收消息。 ■ 了解目的位址。 ■ 如果信箱在本地,則發送本地系統中産生的郵件到正确的信箱,否則發送到發送代理。 ■ 從其他代理接收傳入郵件并發送到本地使用者。

1.1.4   郵件處理程式

郵件處理程式是一個協定—sendmail在發送郵件時所使用的政策和機制。郵件處理程式在中繼主機的 sendmail.cf檔案中指定。中繼主機中的郵件處理程式必須與域外系統中的相比對。網關是一個更複雜的中繼主機 (也可以将中繼主機視為一個簡單的網關 ),可以與多種郵件處理程式通訊。 SunOS 5.x系統軟體提供的郵件處理程式如下: ■ smartuucp(預設的轉發郵件處理程式 ),使用uux(UNIX到UNIX指令執行 )發送消息,但是以域風格的位址作為頭格式。“To:”和“CC:”行為域格式。例如,如果neg.sun.com 域中的winsor使用smartuucp發送郵件給auspex的guy,則頭格式如下:

下載下傳第1章 了解郵件服務5

使用smartuucp指令發送 uucp郵件到可以處理和解決域風格名稱的郵件的系統。發送者也需要能夠處理域風格名稱的郵件和接收互連網來的應答。 ■ uucp使用uux發送郵件,但是在頭中使用基于路由的位址。在頭中部分或所有路由位址由 發 送 者 指 定 。 詳 細 的 信 息 , 請 參 閱 本 章 後 面 “ 基 于 路 由 的 地 址 ”。例如,如果 neg.sun.com 域中的winsor使用uucp發送郵件給 [email protected],則頭格式如下:

位址中的感歎号表示基于路由。在基于 uucp連接配接的系統之間使用 uucp 時需要感歎号風格的路徑。 ■ ddn使用SMTP(簡單郵件傳輸協定 )在TCP端口25連接配接到遠端主機。 ddn颠倒别名并添加域名。例如,如果 neg.sun.com域中的 winsor發送郵件給 [email protected],則頭格式如下:

如果winsor發送郵件給 [email protected](neg.sun.com域中的使用者 )并使用 main.cf配置檔案,則頭格式如下:

在向域外發送郵件時,特别是需要通過轉發才能達到的郵件處理程式要使用 ddn。 ■ ether在端口25使用SMTP協定連接配接到遠端主機。 ether不颠倒别名也不添加域名。在 dns 域中使用者可以直接通路的系統使用 ether。在sendmail.cf檔案中指定郵件處理程式可以定義其他郵件處理程式。詳細的資訊請參閱第 4章“自定義sendmail配置檔案”。

1.1.5   域

域是一個目錄結構,用于電子郵件位址定位和網絡位址命名。域位址格式如下:

在@符号左邊的部分位址是本地位址,如圖 1-5所示。本地位址可能包含使用另一傳輸的路由資訊(如,bob::[email protected] 或smallberries% 本地位址域位址 mill.uucp @physics.uchicago.edu)、一個别名,或圖1-5   域位址結構表征信箱名的符号 (ignatz→/var/mail/ignatz)。接收端的郵件處理程式負責确定位址的本地部分的含義。在@符号右邊的部分位址是本地位址所在的域的域位址。域位址各部分之間用點号 (.)分開。一個域可以是一個公司、一個實體區域或地理範圍。域位址是大小寫無關的。在位址中使用大寫或者小寫或混合二者都沒有差别。域中的資訊是層次結構,離 @符号越近則表示的位置越接近特定的位置和本地 (但是英國和紐西蘭的某些網絡為反序 )。

注意 大多數網關自動将英國和紐西蘭域名順序反序為通常的順序。子域的個數越多則目的資訊提供得越多。正如子目錄或檔案系統層中的檔案包含在上一級目錄中一樣,

6 第一部分 郵 件 服 務

每個子域包含在它右邊的域中。表1-2顯示美國頂級域。

 域 .com .edu .gov .mil .net .org

表1-2   美國頂級域

描 述商業站點教育站點政府部門軍隊部門網絡組織非赢利性組織

下載下傳

由于WWW的迅速增長,由廣泛的 Internet團體參與者組成的 IAHC,提議并實作在已有的域中添加 7類新的通用頂級域 (gTLD)。新的gTLD清單如下:

表1-3   新的通用頂級域域 .arts .firm .info .nom .rec .web 描 述着重文化和娛樂活動的實體商務或公司提供資訊服務的實體個人或私人命名的實體着重休閑和娛樂活動的實體着重與 WWW 相關活動的實體

除了新的 gTLD以外,還将建立 28個新的注冊點授予二級域名的注冊。為了指導注冊以後的發展,将建立瑞士法律之下的注冊委員會 (CORE)組織,産生和增強注冊操作所需裝置。 IAHC報告的全文在 http://www.iahc.org可以找到。表1-4顯示美國和歐洲各國的頂級域。由 Donnalyn Frey和Rick Adams寫的《 !%@::電子郵件位址和網絡目錄》,包含域位址的全部清單并定期更新。

表1-4   國家頂級域域 .au .be .de .es .fr .ie .it .nl .pt .tr .us 描 述澳洲比利時西德西班牙法國愛爾蘭意大利荷蘭葡萄牙土耳其美國域 .at .ch .dk .fi .gr .is .lu .no .se .uk 描 述奧地利瑞士丹表芬蘭希臘冰島盧森堡挪威瑞典英國

以下是教育、商業和政府域位址:

下載下傳

下面是一個法國域位址:

下面是一個英國域位址:第1章 了解郵件服務7

注意英國和紐西蘭的某些網絡編寫郵件位址時從頂級位址到低級位址,但是許多網關自動将其轉換為通常使用的順序 (即從低到高 )。

1.1.6   郵件位址

郵件位址包含郵件将發送到的接收者和系統的名稱。如果管理不帶有名服務的小型郵件系統,則郵件位址很簡單:邏輯名唯一指定使用者。但是如果所管理的小型郵件系統包含一個以上由信箱的系統或多個域,則郵件位址十分複雜。當使用 uucp(或其他 )郵件連接配接與外部相連時,變得更為複雜。郵件位址可以基于路由、獨立于路由或者二者的混合。 1. 基于路由的位址定位基于路由的位址定位要求郵件消息的發送者不僅指定本地位址 (通常為使用者名)和最終目的位址,還要指定該消息到達最終目的地的路由。基于路由的位址,在 uucp網絡十分常見,格式如下:

隻要見到郵件位址中有感歎号作為一部分,則所有 (或一些 )路由由發送者指定。基于路由的位址通常從左至右解讀。例如下面的電子郵件位址:

發送到名為 ucbvax的系統中的使用者 winsor。先從 castle到位址 sun,然後到 sierra,然後到 hplabs,最後到 ucbvax(注意這是個例子,不是實際的路由 )。如果這四個郵件處理程式中的任何一個無法使用,則消息被延時或者因無法發送而傳回。 2. 獨立于路由的位址定位獨立于路由的位址定位需要郵件消息的發送者指定接收者的名稱和目的位址。獨立于路由的位址通常表明使用高速網絡,如互連網。此外,新的 uucp連接配接經常使用域風格的位址。獨立于路由的位址格式如下: [email protected] 在國内計算機中域層次命名規則的日益推廣使得獨立于路由的位址更為通用。事實上,最通用的獨立于路由的位址忽略位址的主機名,并依賴于域名服務正确辨別該郵件消息的最終目的: [email protected] 獨立于路由的位址解讀時搜尋 @符号,然後從右到左 (最确定的位址與 @符号右邊相鄰 )讀取位址層。例如,電子郵件位址 [email protected]解讀時從 .com商業域開始,然後是 sun公司名域,最後是Eng部門域。

1.1.7   信箱

信箱是郵件伺服器上的一個目錄,是電子郵件的最終目的地。信箱名可以是使用者名或為

8 第一部分 郵 件 服 務

下載下傳

具有特定功能的程式 (如信使)放置郵件的地點。信箱可以在使用者本地系統的 /var/mail/username 目錄或者在郵件伺服器上。警告 不要使用NFS加載的檔案系統作為使用者信箱的目的地。如果伺服器故障,則 NFS 加載的檔案系統産生郵件發送和處理的問題。别名資料庫、/etc/mail/aliases檔案和如 NIS 或 NIS+ 有名服務提供為電子郵件生成别名的機制。這樣使用者無需知道使用者信箱準确的本地名稱。郵件别名在 @符号的左邊提供其别名。因為DNS隻提供系統和域 (在@符号的右邊 )的别名,是以不能使用DNS申明使用者或郵件清單别名。某些特殊應用的信箱命名的通用約定顯示如表 1-5。

表1-5   資訊命名格式約定格 式 username

使用者名經常與信箱名相同描 述 Firstname. Lastname, Firstname_Lastname, Firstinitial.Lastname, Firstinitial_Lastname postmaster

MAILER-DEAMON x-interest x-interest-request owner-x-interest local%domain

usenet

1.1.8   别名使用者名可以定義為全名,第一名字和第二名字之間用點号 (.) 或下劃線隔開,或者在第一初始名和最後名之間用點号 (.)或下劃線隔開

互連網标準需要每個站點和域具有 postmaster信箱。使用者可以使用郵件系統将疑問和問題報告給郵差信箱任何發送到 MAILER-DEAMON的郵件由 sendmail自動路由到 postmaster 帶破折号的名字可能是分布清單或者郵件清單。該格式通常用于網絡郵件組以-request 結尾的名字是分布清單的管理位址以owner-開始的名字是分布清單的管理位址百分号(%)顯示當郵件到達目的地時的本地擴充位址。大多數郵件系統将帶 %的郵件名解讀為整個郵件位址。 %被@号代替,因而郵件重定向。注意盡管許多人使用%約定,它不是一個正式标準。在電子郵件團體中代表 %hack 任何處理或接收UseNet新聞的域或系統的互連網标準需要

别名是一個可選的名字。對于電子郵件,可以使用别名給使用者配置設定其他名字、路由郵件到特定的系統或定義郵件清單。可以為站點上每個使用者建立一個郵件别名,指定郵件的存放位置。提供郵件别名類似于提供一個郵件結束标志作為大公司某人位址的一部分。如果不提供郵件結束标志,郵件發送到一個集中的地方。需要通過其他努力決定郵件發送到建築物何處,并使錯誤可能增長。例如,如果在一個建築物中有兩個 Kevin Smith,則每個 Kevin Smith接收到對方消息的可能性極大。建立别名檔案時盡量使用域以及與位置無關的位址。為了增強别名檔案的移植性和穩定性,盡量使别名項目通用并且獨立于系統。例如,如果在域 Eng.sun.com中的系統 oak上有名為ignatz的使用者,則建立ignatz作為别名而不是[email protected]或[email protected]。如果使用者 ignatz更改系統名,但是仍然在工程域中 (Eng),則無需修改任何别名檔案以反映系統名的變化。當建立包括域以外的使用者的别名時,使用使用者名和域名建立别名。例如在 Crop.sun.com 域的privet系統中有名為 smallberries的使用者,則建立的别名為 [email protected]。

下載下傳第1章 了解郵件服務9

注意 在sendmail.cf檔案中可以設定選項,當郵件向使用者域之外發送時,轉換電子郵件位址為完全的域名位址—域名包含确定電子郵件消息發送目的地的所有要素或 NIS+ 表的位置。詳細的資訊請參閱第4章。 1. 使用别名檔案可以在NIS+mail_ailases 表中,在 NIS ailases 映射中,或者如果沒有使用有名服務,則在本地/etc/mail/aliases檔案中,建立全局使用的郵件别名。使用同一個别名檔案還可以建立和管理郵件清單。根據郵件服務配置的不同,可以使用 NIS或NIS+有名服務保持一個全局别名資料庫或更新所有本地的/etc/mail/aliases檔案使之保持一緻來管理别名。關于建立别名的詳細資訊,請參閱第3章“設定和管理郵件服務”。使用者也可以建立和使用别名。可以在本地的 .mailrc檔案 (隻有使用者可以使用 )或系統本地的 /etc/mail/aliases檔案(任何人都可以使用 )中建立别名。使用者不能建立或管理 NIS或NIS+别名檔案。除非在系統中有超級使用者權限,使用者不能管理本地的 /etc/mail/aliases檔案。 2. 别名文法以下各小節描述 NIS+、NIS 和 .mailrc 别名的文法。 NIS+别名 NIS+别名表包含系統或個人所知的所有名字 (不包括在使用者本地 .mailrc檔案中列出的私人别名 )。sendmail程式可以使用 NIS+别名資料庫而不是本地 /etc/mail/aliases檔案決定郵件位址。詳細的資訊請參閱 aliasadm(8)和nsswitch.conf(4)參考頁。 NIS+别名表有4列,如表 1-6所示。

表1-6   NIS+别名資料庫的列列 alias

别名名字描 述 expansion options comments

别名使用NIS+别名表的格式:别名在sendmail/etc/aliases檔案中顯示的值保留可用于添加别名的特别說明

NIS+别名資料庫包含所有郵件客戶的項目。使用 aliasadm指令在NIS+别名資料庫中清單、建立、修改和删除項目。如果正在建立一個新的 NIS+别名表,在建立項目之前必須初始化該表。如果該表已經存在,則不需要初始化。在建立項目時,每行輸入一個别名。包含使用者系統名的項目隻能有一個項目。例如,名為winsor的使用者可以建立如下項目:

可以為本地名或域建立别名。例如在 Trees域中的使用者 fred在系統 oak上有一個信箱,在 NIS+别名表中可以有如下項目:

要使用aliasadm指令必須是超級使用者、擁有别名資料庫的 NIS+組成員或建立資料庫的人。

10 第一部分 郵 件 服 務

NIS别名 在NIS别名映射中的别名使用如下格式:

.mialrc别名 在.mialrc檔案中的别名使用如下格式:

/etc/mail/aliases别名 在本地/etc/mail/aliases檔案中的分布清單使用如下格式:

下載下傳

在/etc/mail/aliases檔案中的别名以文本的形式存儲。當編輯 /etc/mail/aliases檔案時,運作 newaliases程式重新散列資料庫,使之可以被 sendmail程式以二進制方式通路。關于如何建立NIS+别名表的詳細資訊請參閱第 3章。

1.2   郵件伺服器元件

郵件服務由許多程式、背景程序組成,彼此互動作用。以下各小節介紹這些程式,以及與管理電子郵件相關的術語和概念。

郵件服務程式

表1-7列出了郵件服務程式。

表1-7   郵件伺服器元件命 令 /usr/bin/mailx /usr/bin/mail $OPENWINHOME/bin/mailtool /usr/lib/sendmail /usr/lib/sendmail.mx /etc/mail/main.cf /etc/mail/sendmail.subsidiary.cf /etc/mail/sendmail.cf /etc/mail/aliases /etc/mail/sendmailvars . sendmailvars.org_dir /usr/bin/newaliases /usr/bin/mailq /usr/bin/mailstats /usr/bin/mconnect /usr/sbin/in.comsat /usr/sbin/syslogd /usr/dt/bin/dtmail① /usr/dt/bin/dtmailpr① ① CDE郵件程式描 述互動作用的郵件消息處理系統,描述見 mailx(1)參考頁發送郵件到信箱中的郵件處理程式 sendmail程式基于視窗的界面郵件路由程式和域名服務解讀程式相連的郵件路由程式主系統的樣本配置檔案輔助系統的樣本配置檔案郵件路郵配置檔案郵件前傳資訊存儲用于從sendmail.cf檔案中查找宏和類定義的表 sendmailvars表的NIS+版本與/usr/lib/sendmail的符号連接配接,用于重建郵件别名檔案資料庫與/usr/lib/sendmail的符号連接配接,用于列印郵件隊列的消息頭用于存儲由/etc/mail/sendmail.st(如果有)産生的郵件統計資料的檔案允許使用者連接配接到郵件處理程式驗證位址和調試的指令郵件通知精靈程式 sendmail程式使用的錯誤消息記錄器 CDE sendmail程式基于視窗的界面 CDE 電子郵件傳遞消息的列印過濾程式郵件服務由這些程式的組合提供,圖 1-6所示的簡化圖顯示了它們的互動作用。使用者使用 /bin/mailx這樣的程式或mailtool發送郵件。由産生郵件并将其傳送到 sendmail精靈程式的程式排程消息。 sendmail精靈程式解讀消息中的位址(分成可以識别的段 )。該程式使用配置檔案 /etc/mailsendmail.cf中的資訊決定網絡命

下載下傳第1章 了解郵件服務11

名文法、别名、前傳資訊和網絡拓撲。使用這些資訊, sendmail決定發送到接收者必須使用的路由。

使用者發送消息

彙集消息

路由消息

發送消息

使用者接收消息

圖1-6   郵件程式如果互動作用

sendmail精靈程式傳送該消息到合适的系統。本地系統的 /bin/mail程式發送郵件到消息接收者/var/mail/username目錄中的信箱。通知使用者郵件到達,使用者可以使用 /bin/mail、/bin/mailx、mailtool、dtmail 或類似的程式擷取郵件。 1. sendmail程式 SunOS 5.x系統軟體使用 sendmail程式作為郵件路由程式。 sendmail程式負責接收和發送電子郵件消息。它是在郵件閱讀程式 ( 如mail、mailx、mailtool、dtmail)和郵件傳輸程式 (如 uucp)之間的接口。sendmail程式執行以下功能: ■ 控制使用者發送的郵件消息。 ■ 了解接收者位址。 ■ 選擇合适的發送程式。 ■ 以發送代理知道的格式重寫位址。 ■ 按要求重新格式化郵件頭。 ■ 傳遞經過變換的消息到發送代理發送。圖1-7顯示sendmail如何使用别名。郵件閱讀程式如 /usr/bin/mailx有自己的别名。在消息到達sendmail之前别名已經展開。作為系統管理者必須選擇更新别名和前傳郵件消息的政策。可以設定一個别名信箱作為使用者發送郵件前傳請求的地方并更改為預設的郵件别名。如果系統使用 NIS或NIS+,則可以管理消息前傳而無需強制使用者自己進行管理。使用者通常會犯的錯誤是在主機 A的主目錄中放置一個.forward檔案将郵件前傳到 [email protected]。當郵件到達主機 B之後, sendmail在NIS或NIS+

12 第一部分 郵 件 服 務

别名表中查找使用者将其發送回 [email protected],進而導緻循環和更多無用的郵件。

别名

郵件工具

解析給本地

下載下傳其他郵件傳輸程式郵件處理程式

本地發送機制

圖1-7   sendmail如何使用别名

2. sendmail配置檔案 (sendmail.cf) 配置檔案控制sendmail執行其功能的方式。配置檔案決定發送代理、位址重寫規則和郵件頭格式的選擇。 sendmail程式使用 /etc/mail/sendmail.cf檔案中的資訊執行其功能。每個系統的 /etc/mail目錄中有其預設的 sendmail.cf檔案。不需要編輯或更改郵件伺服器或者郵件客戶的預設配置檔案。隻有郵件主機、中繼主機或網關才需要自定義的配置檔案。關于這幾類系統的較長的描述請參閱“郵件服務術語”或本書最後的術語表。 SunOS 5.x系統軟體提供兩個預設的配置檔案,也在 /etc/mail目錄中: ■ 在指定為郵件主機、中繼主機或網關的系統中名為 main.cf的配置檔案。 ■ 名為subsidiary.cf的配置檔案 (預設的 sendmail.cf檔案的複制 )。在某個系統中使用哪個配置檔案依賴于該系統在郵件服務中所負責的工作。

下載下傳第1章 了解郵件服務13

■ 對于郵件客戶或郵件伺服器,不需要對預設的配置檔案作任何設定或編輯。 ■ 要設定一個郵件主機、中繼主機或網關,則複制 main.cf并将其重命名為 sendmail.cf(在 /etc/mail目錄)。然後編輯 sendmail.cf檔案設定郵件配置所需參數:轉發處理程式和中繼主機。關于編輯 sendmail.cf檔案的詳細資訊,請參閱第 4章。下述清單描述了可能需要更改的一些配置參數 (依賴于系統的需求 ): ■ 時間值 ? 指定sendmail多長時間處理一次隊列。通常該間隔時間為 15分鐘到1小時。 ? 指定讀取逾時。 ? 指定郵件在傳回發送者之前在隊列中的最長時間。 ■ 發送模式指定郵件發送的速度。 ■ 裝載限制可以防止在裝載期間浪費時間,因為它不發送大郵件、到多個接收者的郵件或者到已經關閉很長時間的站點。 ■ 日志記錄級别指定記錄何種類型的問題。 ■ 檔案模式。 ? sendmail的setuid。 ? 臨時檔案模式。 ? /etc/mail/aliases權限。關于sendmail.cf檔案的設定,請參閱第 3章。關于這些參數的較長的描述,請參閱第 4章。 3. sendmail配置表 sendmail程式通過查找 sendmailvars配置表,可以定義宏和類以響應 sendmail.cf檔案的指令。sendmail.cf檔案可以包含以下兩個指令: ■ 以關鍵字母 L開頭的行為宏定義,給指定的變量配置設定從配置表中擷取的值。 ■ 以關鍵字母G開頭的行為類定義,給指定的變量配置設定從配置表中擷取的值。 L指令文法如下:

例如,在 Lm maildomain中,搜尋關鍵字 maildomain用于在配置表中查找配置設定給變量 m的值。大多數單字元變量通常是大寫,但是内部變量 (如表示郵件域名的 m)是小寫。注意 小寫變量保留給sendmail使用,對于sendmail程式可能有特定的含義。 G指令設定一個類,允許多個項目。文法如下:

例如,在Gvuucp-list中,搜尋關鍵字 uucp-list用于在配置表中查找配置設定給變量 V的值。在兩種情況中搜尋關鍵字的比對都區分大小寫。兩條指令在 sendmail檔案中都有宏和類定義的副本,而不是使用查找表。 D是L的副本,C是G的副本。如果NIS+用于管理網絡,可以保持表 sendmailvars.org_dir的全局版本。除了 NIS+表(或作為可選項 ),該表還可以存儲在 /etc/mail/sendmailvars檔案中。 sendmail搜尋這些資源的順序由 /etc/nsswitch.conf檔案的 sendmailvars項目控制。預設的搜尋順序為:檔案、 nis+,這表明 sendmail 在搜尋NIS+表之前先在本地表查找資訊。在/etc/mail/sendmailvars檔案中的項目格式如下:

14 第一部分 郵 件 服 務

搜尋關鍵字之後為 Tab鍵或一些空格,值與值之間為單個空格。

下載下傳 NIS+sendmailvars表有兩欄:關鍵字欄和值欄。值一欄可能包含一個到多個值,彼此以空格隔開,如表1-8所示。

表1-8   NIS+sendmailvars表關鍵字欄和值欄舉例關 鍵 字 欄 maildomain uucp-list 值 欄 Eng.Sun.COM castle oak cinderella

值欄中的名字是 uucp可以通路的系統。在 NIS+ 表中可以定義大多數非預設的郵件變量。但是在特定的情況下,如系統有本地的 uucp連接配接或在兩個互連網之間有網關,則可以覆寫系統中一個變量的全局設定,即在系統本地的 /etc/mail/sendmailvars檔案中包含該變量。 4. .forward檔案使用者在主目錄中可以建立 .forward檔案, sendmail用于臨時重定向郵件或發送郵件自定義程式集,無需系統管理者頻繁更改别名。當解決郵件問題時,特别是郵件沒有發送到正确的位址時,記住檢測使用者主目錄的 .forward檔案。

1.3   郵件服務綜述

以下各小節描述郵件服務的目錄結構和檔案,并解釋 sendmail 程式和郵件位址定位如何工作。

1.3.1   郵件服務剖析

郵件服務檔案在三個目錄中: /bin、/etc/mail和/usr/lib。使用者的信箱在/var/mail目錄。表1-9顯示郵件服務使用的 /bin目錄的内容。

表1-9   郵件使用的/bin目錄的内容名 稱 mail 類 型檔案

使用者代理描 述 mailcompat mailq mailstats

mailx newaliases 檔案連結檔案

檔案連結以SunOS 4.x信箱格式存儲郵件的過濾程式連結到/usr/lib/sendmail 用于存儲由/etc/mail/sendmail.st檔案(如果有)産生的郵件統計資料的檔案使用者代理連結到/usr/lib/sendmail,用于重新構件郵件别名檔案的資料庫

表1-10顯示/etc/mail目錄内容。

表1-10   /etc/mail目錄内容名 稱 mail.rc aliases aliases.dir aliases.pag mailx.rc main.cf 類 型檔案檔案檔案檔案檔案檔案描 述 mailtool使用者代理預設設定郵件前傳資訊郵件前傳資訊的二進制形式(運作newaliases建立) 郵件前傳資訊的二進制形式 (運作newaliases建立) mailx使用者代理的預設設定主系統的樣本配置檔案

下載下傳第1章 了解郵件服務15

(續) 名 稱 sendmail.cf 類 型檔案

郵件路由的配置檔案描 述 sendmail.hf sendmail.pid sendmail.st

sendmailvars sendmailvars.org_dir subsidiary.cf① 檔案檔案檔案

檔案表檔案 SMTP HELP 指令使用的幫助檔案包含/usr/lib/sendmail -b -q1h指令的檔案 sendmail統計資料檔案(如果有該檔案,則 sendmail記錄通過每個郵件處理程式的流量 ) 存儲從sendmail.cf檔案查找宏和類定義的表 sendmailvars表的NIS+版本 subsidiary系統的樣本配置檔案 ① 本版進行了修正。注意subsidiary.cf檔案以前稱為 sendmail.subsidiary.cf。表1-11顯示的是 /usr/lib目錄内容。

表1-11   /usr/lib目錄内容名 稱 newaliases① sendmail 類 型檔案檔案描 述建立aliases檔案二進制形式的指令路由程式,也稱為郵件傳輸代理 ① 以前newaliases指令在/etc/mail目錄。發送郵件的緩沖目錄在 /var/mail 目錄中,如表 1-12所示。沒有發送的郵件存儲在 /var/ spool/mqueue目錄。

表1-12   /var/mail目錄内容名 稱 mailbox1 mailbox2 mailbox3

1.3.2   郵件服務如何工作類 型檔案檔案檔案描 述發送郵件的信箱發送郵件的信箱發送郵件的信箱

圖1-8顯示sendmail如何與其他程式在郵件系統中互動作用。使用者和稱為使用者代理的郵件

郵件處理程式

圖1-8   郵件服務如何工作

16 第一部分 郵 件 服 務

下載下傳

産生和郵件發送程式互動作用。當郵件送出以後,使用者代理調用 sendmail,它将該消息發送到正确的郵件處理程式。

1.3.3   sendmail如何工作

sendmail程式接收如 mailx、mailtool或dtmail這些程式來的消息,當目的郵件處理程式需要時編輯消息頭,并調用合适的郵件處理程式進行發送或網絡傳輸排隊。注意 sendmail程式從不編輯或更改消息體。它解譯電子郵件位址時所作的所有修改隻在消息頭中進行。 1. 參數處理和位址解析當sendmail處理消息時,它擷取接收者名稱 (從指令行或 SMTP協定 )并産生兩個檔案。一個是信包,包含接收者清單和發送資訊。另一個檔案包含消息頭和消息體。 sendmail程式展開别名,包括郵件清單,并驗證盡可能多的遠端接收者。 sendmail檢測文法和驗證本地接收者。主機名的詳細檢測推遲到發送時進行。當本地接收者驗證完成以後,前傳消息給他們。接收者清單解析以後, sendmail将每個名字添加到信包和消息頭。當名字為别名或前傳名字時,在清單中保持舊名字,設定一個标志位通知在發送階段忽略該接收者。該清單可以自由複制,防止“别名循環”以及複制消息發送到同一個接收者 (當接收者在兩個不同的别名組中時)。注意 當多個别名清單包含同一使用者(使用不同的文法)的電子郵件位址時,使用者可能接收同一郵件消息的多個複制。sendmail程式不可能總是能夠比對電子郵件位址的彼此複制。 2. 消息排程 sendmail程式接下來排程消息。消息開始處有消息頭。消息的頭和體之間必須用空行隔開。在消息體中的唯一格式要求是文本行長度不超過 1024個位元組。 sendmail程式在記憶體中存儲消息頭,在臨時檔案中存儲消息體。為了簡化接口,即使沒有有效的名字 (在這種情況下該消息帶錯誤退回 ),也進行消息排程。注意 直到現在,sendmail程式不能将二進制資料作為消息的一部分傳送。随着多媒體 mailtool的出現,使用者現在可以傳送二進制資料。但是必須由使用者代理編碼。 sendmail 并不對二進制資料作任何自動編碼。關于如何對電子郵件消息進行編碼和解碼的資訊,請參閱“Mail Tool”的文檔或dtmail。 3. 消息發送對于接收者清單中的每個唯一的郵件處理程式和主機,sendmail調用合适的郵件處理程式。郵件處理程式每次都希望發送郵件給一個主機上的所有使用者,但是,郵件處理程式每次隻接受一個接收者才能正确處理。 sendmail程式發送消息給郵件處理程式,使用與送出消息到 sendmail同樣的接口 (使用約定的UNIX參數向量和傳回狀态、基于 UNIX管道對通訊和基于 TCP連接配接進行SMTP通訊 )。該消息的每個複制在開始處有一個自定義的頭。郵件處理程式捕獲并檢測狀态碼,并在适當的時候給出适當的錯誤消息。退出碼必須和系統标準一緻。如果使用了非标準的退出碼,則使用 “Services unavailable”消息。

下載下傳

4. 重傳排隊第1章 了解郵件服務17 當郵件處理程式傳回一個狀态,顯示可能稍後處理郵件 (例如下一個主機停機或電話忙于進行uucp時),則sendmail将該郵件存儲在隊列中,以後再重試。 5. 退回發送者如果在處理過程中産生錯誤, sendmail将郵件消息傳回給發送者重傳。郵件可能送回,或者寫入發送者主目錄的 dead.letter檔案。

1.3.4   郵件尋址如何工作

假定使用的是 sendmail.cf 檔案中使用的預設規則集,下例顯示一個郵件可能采取的路由。該路由由電子郵件的位址指定方式決定。 ■ 在一個域中的郵件,位址隻有使用者的登入名時,它查找郵件主機 (或Aliases資料庫 )的 aliases檔案,并被發送到從資料庫中找到的位址。在圖 1-9所示的例子中,位址為使用者 winsor的郵件到達郵件主機并前傳到 castle主機。

 郵件主機

中繼主機

圖1-9   郵件的位址隻有使用者名時的發送路徑

■ 在一個域中的郵件,位址有使用者的登入名和主機名時,無需其他處理,直接到達主機系統。在圖 1-10所示的例子中,位址為 castle主機上的使用者 winsor的郵件直接到達名為 castle的主機。 ■ 在一個域中的郵件,位址有使用者的登入名和域名時,它查找郵件主機 (或Aliases資料庫)的aliases檔案。如果該郵件主機有别名,則重定向該郵件到主機系統。如圖 1-11所示的例子中,發送到位址為 [email protected]的郵件到達郵件主機然後前傳到名為 castle的主機。

郵件主機中繼主機

圖1-10   郵件的位址有使用者名和主機名時的發送路徑

18 第一部分 郵 件 服 務

郵件主機

中繼主機

下載下傳

圖1-11   郵件的位址有使用者名和域名時的發送路徑

■ 位址為使用者名和完整域名的郵件到達郵件主機,然後送到中繼主機。中繼主機發送該消息到主機系統。但是,當郵件來自接收者域時,郵件主機識别域名,不将該消息發送到中繼主機。在圖 1-12所示的例子中,從工程域以外發送來的位址為 [email protected]. sun.com郵件到達發送者的郵件主機然後到達發送者的中繼主機。它前傳到接收者的中繼主機、接收者的郵件主機,最後到達名為 oak的主機。

郵件主機A

中繼主機A

郵件主機A

中繼主機A

圖1-12   郵件的位址有使用者名和完整域名時的發送路徑

http://johnoyoung.blog.sohu.com/90691910.html http://blog.sina.com.cn/s/blog_51e1d40e0100aadc.html http://blog.21cn.com/johnoyoung/article/51468 http://hi.baidu.com/johnoyoung/blog/item/76c5be6008c1e0da8cb10d00.html http://johnoyoung.bokee.com/viewdiary.32408821.html http://blog.yesky.com/blog/junhay/archive/2008/06/21/1855338.html

http://tieba.baidu.com/f?kz=416118784