[ 永遠的UNIX::UNIX技術資料的寶庫 ]   GB | BIG5

首頁 > 應用技術 > Sendmail > 正文
sendmail.cf簡介
本文出自: http://www.csuu.com (2001-05-17 13:31:16)

以下信息主要摘自杜毅編的《UNIX系統組網技術》,由電子工業出版社出版。 

這本書主要針對SCO Unix,不過對Unix世界的初學者它值得一讀,既然引用了 

人家的東西就要為它做的廣告:-) 但願沒人找我麻煩。 

在整理的過程中,我發現書上所寫與Redhat帶的sendmail略有不同和缺漏,未 

經作者同意自行加上,文字也不是完全照搬。 

sendmail.cf的詳細信息,請自己去/usr/doc/sendmail/下找op.ps,其中第5章 

把下列內容講得很詳細。 

關sendmail.cf的簡單解釋: 

配置文件sendmail.cf中的信息仍舊是以行為單位。如果行首的第一個字符為“#”,則表 

示該行為注釋,如果第一個字符為空格則表示該行為上一行的延續。此外,行首的第一個 

字符均為命令,但是命令同變量或值之間沒有間隔。這種格式便sendmail進行分析,但 

令我們很難閱讀。下面我們將介紹sendmail.cf配置文件中的命令: 


1 D,定義宏 

命令D定義宏並為其賦值。當宏被定義之,它就負責提供提供其存儲的值給sendmail.cf 

文件中其他的命令使用或者直接提供給sendmail使用。宏的名字可以是任何單字符,小寫的 

用sendmail內部宏,用戶創建的宏只能使用大寫字母作為名字。一些sendmail的內部宏也 

在sendmail.cf文件裡定義。例如下面兩行定義了宏D和內部宏n: 

DDcs.mit.edu 

DnMAILER-DEAMON 

則宏D的值為cs.mit.edu,宏n的值為MAILER-DEAMON.要使用宏的值時,必須在宏的名字前面 

加上符號"$",以這種形式來引用它的值。例如: 

#my official host name 

Dj$w.$D 

如果宏w的值為主機名moon,此時宏j的值就為moon.cs.mit.edu,這便是本主機的全稱名(FQDN). 


2 C與F,定義類 

命令C與F都是用來定義sendmail的類。所謂類,實際上就是由處理方式相同的多個變量組 

成的數組。與宏一樣,類也使用單字符名字,大小寫規則也一樣。類可以定義在一行之中, 

也可以分多行定義,例如,下面的示范為內部類w賦值為系統的主機名,而系統可以有多個名字: 

Cwmoon sun 

Cwearth 

Cwlocalhost 

命令F是從文件中獲取類的值,例如,可以把moon,sun,earth保存在sendmail.cw之中,然 

用F命令便可以實現同上述命令完全相同的結果: 

Fw/etc/sendmail.cw 

對類的引用與宏的引用完全一樣,事實上宏就是一種類。兩者的唯一區別在,宏只能有一個 

唯一的值,而類可以有多個值,當然也可以只有一個值。 


3 O,設置選項 

命令O是為sendmail的選項賦值,賦給選項的值可以是字符串、整數或布爾值,所有的選項值 

都是直接由sendmail來使用。需要注意的是,這裡所說的選項與sendmail使用的命令行參數不 

一樣。通常情況下,不需要修改這些選項。 


4 T,定義可信任的用戶 

命令T用來定義一組用戶列表,這組用戶可以使用sendmail帶-f參數來修改用戶發出的郵件地 

址。一般情況下,包含root,daemon和uucp。管理員最好不要隨意添加其他的用戶,否則這種權 

限在某些用戶手中可能會對系統安全構成威脅。可信任的用戶可以在一行或多行中定義,但是被 

定義的用戶必須是/etc/passwd中的合法用戶。缺省是: 

Troot 

Tdaemon 

Tuucp 


5 P,設置優先級 

sendmail使用命令P定義不同的優先級來處理進入出局緩沖區的電子郵件。命令P定義的值越 

高,則優先級也越高,缺省的優先級為0。負優先級的電子郵件是不產生錯誤信息的,因此在 

批量發送郵件是應該定義較底的優先級。常用的優先級為: 

Pfirst-class=0 

Pspecial-delivery=100 

Plist=30 

Pbulk=-60 

Pjunk=-100 

如果用戶在發送郵件是需要指定優先級,則需要在郵件的首部中添加Precedence,例如: 

Precedence:bulk 


6 K,Key File Declaration 

特殊的映射可以定義成: 

Kmapname mapclass arguments 

mapname是可重寫規則中使用這個映射的句柄,mapclass是映射類型的名字,arguments 

的解釋依賴與映射類型,通常是包含映射的文件名。 


7 V,Configuration Version Level 

提供與老版本配置文件的兼容性能。 


8 M,定義郵件傳輸程序 

命令M定義郵件傳輸程序(mailer)的規格/詳細參數,其形式如下: 

Mname, {field=value} 

sendmail並不是直接發送各種各樣的電子郵件,它首先將要發送的郵件分類,然交給 

相應的mailer來發送,它本身只發送基SMTP/TCP/IP的郵件。其中[IPC]表示使用 

sendmail通過smtp來傳送郵件。關IPC mailer,在sendmail的文檔裡有一段有趣的特殊 

解釋:當規則集0解析到IPC mailer時會處理一些特殊的過程。比如直接用IP地址發送郵 

件可以用[128.32.149.78]的形式,若用[ucbvax.berkeley.edu]將會怎樣呢?它會被作 

為字符串傳遞,用這樣的方法用戶可以構造一個特殊的郵件地址,使自己的郵件按指定的 

路線發送,而通常用戶是不關心也不知道自己的郵件的發送路線的。 


9 H,定義郵件的首部格式 

命令H定義sendmail插進電子郵件首部的行的格式。 


10 R,定義重寫規則 

重寫規則是sendmail配置文件的核心內容,每一重寫規則由命令R定義,其形式如下: 

Rpattern transformation comment 

命令R中的字段由制表符進行分隔,系統處理時忽略注釋字段(comment),模式字段(pattern) 

與改寫字段(transformation)為該命令的核心。 

重寫規則將輸入地址與模式進行匹配,如果匹配,則將該地址用規則中改寫字段的規則重寫 

為新的格式。每一規則可以多次處理同一地址,這是因為地址在重寫之,仍要再次同該模 

式進行匹配,如果仍舊匹配則再次改寫,直到不再匹配為止(使用"$:"可以避免無限循環)。 

在Linux中格式的表達應該是: 

Rlhs rhs comment 

lhs--left hand side rhs--right hand side 


11 S,設置重寫規則集 

規則集是一組可以用數字來引用的相關重寫規則。命令S是規則集的開始並賦予它一個數字 

以便由郵件傳輸程序來調用。規則集可以被看作用來處理電子郵件地址的子程序或函數。具有 

特殊功能並可由sendmail直接調用的規則集有5個: 

規則集3:為最大最復雜的規則集,也是用地址的第一個規則集。它將地址轉化為正規形式 

如:user@host.domain。 

規則集0:應用傳輸郵件的地址。必須在規則集3之使用,並僅用實際郵件傳輸中接收 

者的地址。它可以將地址解析成(mailer,host,user)的形式,由郵件傳輸者、接收方主機和接 

收用戶的名字組成。 

規則集1:應用消息中所有發送者地址。 

規則集2:應用消息中所有接收者地址。 

規則集4:應用消息中所有地址並將內部地址格式轉化為外部地址格式。 

下圖說明了消息和地址通過這些規則集的流程(原書有誤): 


+---+ 

-->+ 0 +---> resolved address 

/ +---+ 



/ +---+ +---+ 

/ -->+ 1 +-->+ S +--- 

/ / +---+ +---+ 

+---+ / +---+ / +---+ 

addr --->+ 3 +---->+ D +--- --->| 4 +---> msg 

+---+ +---+ / +---+ 

+---+ +---+ / 

-->+ 2 +-->+ R +--- 

+---+ +---+ 

圖中,D--sender domain addition 

S--mailer-specific sender rewriting 

R--mailer-specific recipient rewriting 
(http://www.fanqiang.com)
    進入【UNIX論壇

相關文章
 

★  樊強制作 歡迎分享  ★