EXWOLF討論區's Archiver

wolf 發表於 2008-8-5 14:45

用Linux作郵件服務器

在Internet上,E-mail是用戶之間交往溝通的最佳方式。通過電子郵件,可以為Linux系統開拓新的空間,增強與外界的聯繫。已經證明,電子郵件是Internet上使用最多的應用程序,甚至比WWW的使用還要多。本章介紹如何為Linux系統安裝、配置E-mail軟件。
F9yh ~'G x"I/L}d
0@x ``:v!|l 1   Linux E-mail軟件簡介7W1g2R\al7J-XaM
-FD'h}0V0gu!L
Linux中的E-mail軟件系統分為兩大類:MUA(郵件用戶代理)和MTA(郵件傳送代理)。MUA的功能是為用戶提供讀寫郵件的界面,而MTA的作用則是處理郵件的收發工作。換言之,用戶可以通過MUA寫信、讀信,利用MTA收信、發信。 'r T FM9h%pl
6@FE&}(Sv!A,uq
最常用的電子郵件MTA系統是sendmail,它由加州大學開發,其最新版本是8.9;另一個常見的MTA程序是smail,它由Curt Noll和Ronald Karr聯合開發,也已經發佈了幾個版本。 {@ Lh%Q;A.b;`

y-k+S-\i*` EwR7S 值得注意的是,與其他大型軟件包一樣,sendmail也有自己的一些缺陷。雖然引起sendmail失敗或系統崩潰的錯誤已基本上被排除,但提供 root訪問權限的安全性漏洞仍然時有發現。如果配置不當,sendmail有可能為「黑客」提供可乘之機。為了安全起見,用戶最好定期訪問計算機緊急反應小組(CERT,www.cert.org)的網頁,加入它的郵遞列表,或者閱讀由它主持的網絡討論組(conp.security.announce)來瞭解由它發出的安全性通知。
9{ U~%X^X (LKR4~xl{C
電子郵件的MUA系統目前很多,大約有十幾種,其中最常見是:mail和elm。
7T#G2TDq J K7w&Bzs
2  sendmail及其配置5F-fT_k_q
l D:nOu Jz'|"ca
本節介紹如何安裝和配置sendmail程序,不過在開始深入研究這些詳細內容之前,先介紹SMTP協議以及域名系統(DNS)對E-mail在Internet上傳輸的影響。
q%h8OVv !e M.JP o
2.1 SMTPT3a])a5Z'D1|*n
9C3g aH9y)J'C*t3dP
SMTP是簡單郵件傳輸協議的簡稱,是Internet上傳輸郵件的既定標準方式。sendmail的基礎協議正是SMTP。sendmail程序提供為Linux支持SMTP連接所需的服務。 @@BJ!b"ZZ#m:]

2YS!d } H0] 要瞭解sendmail所做的各種不同工作,需要掌握有關互聯網協議的一些知識。所謂協議就是硬件和軟件進行通信所遵守的標準。協議通常分為不同的層次,高層的協議利用低層的協議作為基礎。例如,互聯網協議(IP)在網絡之間發送和接受數據包,但不必創建諸如SMTP和其他高層協議所使用的端到端(PPP)的連接;建立在IP之上的傳輸控制協議(TCP)提供了被Telnet和SMTP程序所使用的面向連接的服務;總而言之,TCP/IP為互聯網提供了基本的網絡服務,例如文件傳輸協議(FTP)和SMTP的高層協議,都建立在TCP/IP之上。協議分層的優點在於,執行SMTP或FTP協議的程序不必知道與傳送數據包和連接其他主機有關的任何內容,因為它們可以使用TCP/IP提供的服務來完成。即執行高層協議的程序不必關心低層協議的具體細節。
@oK2p"GN
YKwc'U)y \ SMTP定義了在互聯網上交換E-mail的方式,因此軟件版本和硬件環境對交換郵件的程序來說並不重要,只要這兩個程序都正確地執行SMTP協議,它們就可以交換郵件。
$r(W T.BZc ~1LZ s?2M$o3O9?
下面介紹一個使用的SMTP協議的例子:位於somedomain.gov的用戶li正在向位於otherdomain.com的zhang發送郵件。  
sU0F+YKByMxc 6M*`!v,M$N0W*Xp4b)T
以下為引用的內容:+Aba(_!lL)N~"@_i
  $ sendmail-v [email]zhang@otherdomain.com[/email]<letter .p$ZPT'U+G]G
        [email]zhang@otherdonain.com...Connecting[/email] to otherdomain.com via top... -K*rIdq5z'@nHp^ m
        Trying 123.45.67.1...connected
b8GNCO%G]9\         220-otherdomain.com SMTP ready at Sun,14 Nov 1999 18:56:22-0500 A%sh)\+g{?$ix qx1t
        220 ESMTP spoken here z"T)D0lAa,F1H}c
        >>>HELO somedomain.gov
n*popPN         250 otherdomain.com Hello somedomain.gov [123.45.67.2],pleased to meet you 'ZoWb.K3X&[}WP
        >>>MAIL From:〈[email]li@somedomain.gov[/email]〉 0e6m ?vA
        250〈[email]li@somedomain.gov...Sender[/email] ok
4}xZ7Emfmn1J         >>>RCPT To:〈[email]zhang@otherdomain.com[/email]〉 C&nM1P8yb,rhp
        250〈[email]zhang@otherdomain.com[/email])...Recipient ok
t _T%_ n6n         >>>DATA :M0G0C.Uhj,{
        354 Enter mail,end with"." on a line by itself (TE C;R!k|+\
        >>>. } E+h^#|
        250 SAA08680 Message accepted for delivery E ]oz@X8z
        >>>QUIT JC/k@6m3~u
        221 otherdomain.com closing connection js9lE9B-k[
        [email]zhang@otherdomain.com...Sent[/email]
qQh2Q0`j$Z         S
,E6Y:O)a%g:Ar1bc
b0Zag7~)lBaL/i 上面的第一行是直接調用Sendmail的一種命令格式,而不是利用用戶所喜歡的郵件用戶代理MUA(例如elm或mail)來執行這一任務。這裡 -v選項告訴sendmail使用冗餘模式顯示SMTP對話。其餘行顯示的是SMTP客戶機和服務器進行的交談。以>>>開始的行表示的是位於somedomain.gov處的客戶機(寄件人),緊跟其後的行是位於otherdomain.com處的服務器(收件人)的答覆。以220開始的第一行是最初連接之後SMTP服務器對自己進行的聲明,它給出了自己的主機名以及日期和時間;第二行用來告訴客戶機該服務器能夠理解擴充的SMTP協議(ESMTP),以便客戶能夠使用它。像220這樣的號碼是SMTP客戶機同SMTP服務器用來通信的回覆代碼,跟隨回覆代碼後面的文本才是真正的內容。
p M5Lj$Y I 0G`$UV,}M+fDB
如果想對這一對話有更深刻的瞭解,可以閱讀參考文獻RFC821。以-v選項運行sendmail有助於用戶理解SMTP對話的工作方式。 "MsvMva:hjJ5|(F
-e1u ]jyN4x)m H
像otherdomain.com這樣的名字對於用戶理解和記憶是十分方便,而計算機採用的卻是像123.45.67.1這樣的數字化的IP地址。幸運的是,域名系統(DNS)提供了主機名到IP地址的轉化以及其他的重要信息。用戶沒有必要記憶主機的IP地址。 6nL;[.bH#[GW
isUp3e:`
DNS把對主機進行命名和編號的權限分配給自治管理的域,例如,一個稱為otherdomain. com的公司可以維護自己域中主機的所有信息。當主機a.otherdomain.com想發送郵件或遠程登錄(Telnet)到主機 b.otherdomain.com時,它會通過網絡向otherdomain.com的域名服務器發送一個請示,域名服務器不妨假設是主機 ns.otherdomain.com。域名服務器ns.otherdomain.com將把b.otherdomain.com的IP地址(可能還有其他信息)返回給a.otherdomain.com,這樣郵件將被發送,或者Telnet將被連接。由於us.otherdomain.com對 otherdomian.com域具有管理權,因此它能夠回答對otherdomain.com中的主機的任何查詢,不管這些查詢發自哪裡;另外,它還有對域中的主機進行命名的權力。 }1yr cK~.J

?i5~8t(B/g 現在,如果a.otherdomain.com上的某人想給zhang@ somedomain.gov發送郵件會怎麼樣呢?雖然us.otherdomain.com沒有位於somedomain.gov域中的主機的有關信息,但是它卻知道如何找到這一信息。當城名服務器收到它不具有此域信息的某個城中的主機的查詢請示時,它便向根域名服務器(root nameserver)詢問那個域中(在本例中是somedomain.gov)具有管理權限的域名服務器的名字和IP地址。根域名服務器將把對 somedomain.gov具有管理權限的域名服務器的名字和IP地址提供給us.otherdomain.com。 us.otherdomain.com域名服務器將詢問它們並把回覆轉發給a.otherdomain.com。
d3?|D x V b JI
Kj/M.[u/V 從上可知,DNS是一個包含主機名到IP地址映射的大型分佈式數據庫。另外,它還包含其他信息。當利用像。sendmail這樣的程序投遞郵件時,它必須把收件人的主機名轉化為一個IP地址。這部分DNS數據被稱為A(地址)記錄,它是關於主機的最基本的數據。主機數據的另一部分是郵件交換器(MX)記錄,像a.otherdomain.com主機的MX記錄列出的是能夠為它接收郵件的一個或多個主機。
ho{!l)k
yt1Tf2v$f/i 也許讀者會問:MX記錄的作用是什麼?為什麼a.otherdomain.com不簡單地接收它自己郵件並處理這一過程呢? '?Y8E5XL1S

C ome2P2ljovq MX記錄的作用如下: :z.DT]%OJ@
$W.W#{z@^\'|Hti
(1)通過MX,不在Internet上的主機(例如,只利用UUCP的用戶)能夠指定一個Internet主機來接收它們的郵件,從而使它們看起來就像具有Internet地址一樣。例如,假定a. $u$eG1N4D.Mw"Wr
otherdomain.com 只是偶爾通過UUCP連接到ns.otherdomain.com。如果us.otherdomain.com為它發佈一個MX記錄,其他 Internet主機就能夠向它發送郵件。當ns.otherdomain.com收到郵件時,它把郵件保存起來,直到 a.otherdomain.com同它連接。MX記錄能夠使非Internet主機也可以接收來自Internet的E-mail。
I!m(y i|9Z)p)`5z
u6B*Pv%Z&dzq D)Ii (2)通過MX,使用僅有發送功能MUA客戶程序的用戶也能接受電於郵件。假設有一台充當一群PC機的文件服務器的UNIX主機 pcserv.otherdomain.com。這些PC機都具有可以發送郵件但不能接收郵件的帶有內置SATP客戶程序的MUA。如果發往外地的郵件具有類似[email]someone@pcl.otherdomain.com[/email]的回覆地址,那麼接收方如何回覆信件呢?通過MX記錄,問題便迎刃而解:用pcserv.otherdomain.com做為所有PC機的MX主機,寄向它們的郵件都將正確到達。
C Sf,rg o)L
0?;f;|qc-j0s:w,P (3)通過MX可以把用戶的電子郵件存儲起來。由於一些難以預料的原因,主機可能會長時間地離開Internet。雖然用戶的主機離開了 Internet,但發往它的郵件可能在其他主機上排隊,當經過一段時間後郵件便返回給寄件人。如果用戶的主機具有在中斷時間裡為它保存郵件的MX主機,那麼在用戶的主機重新啟用後郵件將被投遞。這些MX主機可以是站點內的(即在用戶的域中),也可以是站點外的,或者兩者都有。有條件的情況下,最好選擇站點外的MX主機。因為某些事故通常會使用戶的整個站點與網絡斷開,在這種情況下,站點內的MX主機也就毫無用處。 !dE#D w;S7^

wQ`Dk (4)MX記錄能夠隱藏信息並使用戶更靈活地重新配置自己的局域網。
zT'{9D9W*Mp.C
(?6~ p1keLb0o 收郵件的主機被命名為wang.otherdomain.com還是liang.otherdomain.com並不重要,用戶的通信者不會知道其中的差別。
KP!h lb,HU 5b:e.do,T%B
當某個SMTP客戶程序向某個主機投遞郵件時,它並不只是把主機名轉化為IP地址。客戶程序首先查找MX記錄。如果MX記錄存在,它便按照記錄中所提供的優先級對這些記錄進行排序。例如,otherdomain.com或許就具有MX記錄,這些記錄把主機 mailerl.otherdomain.com、mailer2.otherdomain.com和mailer3.somedomain.gov列為願意為它們收郵件的主機。注意,「主機」otherdomain.com除作為一個MX記錄外可能並不存在,即它沒有一個可用的IP地址。雖然這些主機中的任何一個都將為otherdomain.com接受郵件,但MX的優先級確定了SMTP客戶程序應首先嘗試投遞的主機。在這裡,系統管理員實際上已經設置了一個主郵件服務器mailer1.otherdomain.com和一個站點內的備用郵件服務器mailer2.otherdomain.com,並且還與mailer3.somedomain.gov的管理員協商,把它作為站點外的一個備用郵件服務器。管理員通過設置MX的優先級,從而使SMTP客戶程序將首先試用主郵件代收器,其次是站點內的備用郵件服務器,最後是站點外的備用郵件服務器。
MO)Wi dN U/R(hD;}ew
當收集和排序MX記錄之後,SMTP客戶程序把這些主機的IP地址聚集起來並按照它們的MX優先級的順序向它們投遞。當郵件傳送出現問題時,應該清楚這樣一個事實:若一封信被投遞的地址是[email]zhang@otherdomain.com[/email],這並不能說明主機。otherdomain.com一定存在;即使這一主機存在,或許它也不是直接接收郵件的主機。 4Q{ `]t

1OqB @ H BV!H h` 另外,很有必要瞭解郵件頭和信封地址之間的差別,因為郵件路由器處理它們的方式是不同的。下面舉例說明兩者之間的差別。
.@} OEY0v %L}+qN m$D
假定某個用戶有一個便箋想寄給一些同事,他們分別是A公司的li和qiu以及B公司的zhang和wang吧。用戶把便箋的一個副本交給了用戶所信任的郵件收發員xie,他記錄了所有的收件人。xie是個非常精明的人,他想為用戶的公司節省郵費,因此把便箋複印了兩份,然後把每份放進一個寫有各自公司地址的信封裡(而不是給每個收件人都發送一個副本)。在發往A公司的信封的封面上,他寫有h和qiu的名字;在發往B公司的信封的封面上,寫有 zhang和wang。當xie在A公司和B公司的的同行收到這兩個信封時,他們對便箋進行了複印並把它們分別送給了li、qiu和zhang、 wang,而並不查看在便箋裡面寫的地址。對於A公司和B公司的郵件收發員來說,他們所關心的只是信封地址。
~ q!C2| dD
G YT4^v&j 上面的比喻說明了SMTP客戶程序和服務程序的工作方式。假定[email]zhang@somedomain.gov[/email]向他的同事[email]li@somedomain.gov[/email]和[email]zeng@otherdomain.com[/email]發送郵件,信頭部的收件人名單如下: 5}B3k'qA/po?
8w5Cyf4sk9K5~
To:[email]li@somedomain.gov[/email],[email]zeng@otherdomain.com[/email]

wolf 發表於 2008-8-5 14:47

如果somedomain.gov的SMTP客戶程序連接到。otherdomain.com郵件發送器來投遞zeng的副本,當它準備列出收件人(信封地址)時,它該怎麼處理呢?如果像上面To:行(郵件頭地址)那樣列出兩個收件人,li將收到信件的兩個副本,因為otherdomain.com 的郵件發送器將向somedomain.gov轉發一個副本。解決這一問題的方法是:somedomain.gov的SMTP客戶程序把信件放在一個信封裡,在此信封只包含一個主機上的收件人姓名,雖然所有收件人的名單仍然在信件的頭部,但他們在信封之內,因此位於somedomain.gov和 otherdomain.com處的SMTP服務程序也就看不到他們。在本例中,寄往otherdomain.com的信封將只列出zeng,寄往 somedomain.gov的信封將只列出li。 XrC)e`,S E%v

j'@Bz u%e5z gi2N 別名是說明郵件頭和信封地址不同的另一個例子。假定要把郵件發送到別名為friends的人,friends包括的人名是Xie、zhang、li 和qiu。在信中,用戶寫的是To:friends,然而。sendmail將擴展這一別名並構造一個包含所有收件人的信封。根據這些名字是否是別名,是否有可能在其他主機上,最初的消息將被裝進四個不同的信封並投遞到四個不同的主機。在每個信封上將只包含一個收件人的姓名,但在信頭中包含的卻是同一個別名friends。 5S0@ v9| c
Ga,T6S|u
sendmail允許在命令行中指定收件人,假定有個名為letter的文件,其內容如下:
f$x0{2CJE(T P
fM3Ee x%V3c To:null recipient〈 〉 M6~I1z,m9Gns

$x.Fe"l\0R%z Subject:To show the differebce between in header and envelope addresses
uNt*Yn Z+y O_ I
!Yj d2SJ.yN This is just a test for E-mail.
c&a7QC _TC
Ie ?"hn,o;ah 利用下面的命令發送這一信件: j_ E,B2@(t+M
*Q$Cd-J&W7DO/dY
$sendmail yourlogin〈letter ,n:b^!uq8\ B,F
dEps @#QN4y
即使用戶的註冊名沒有在信件的頭部,用戶(yourlogin)也將會收到這一信件。因為用戶的地址在信封上。除非以別的方式(例如利用-t標誌)說明,否則sendmail將根據命令行上指定的收件人構造信封地址,而且郵件頭地址和信封地址並不一定要相同。
6~@x"sT?.\6bW
[:Sl"T/?9v_U {'II+z 2.2  sendmail的安裝與配置
2\)tVz[#TzW ~ IzH"WVLGN6cD
首先,必須獲取sendmail源代碼並進行編譯。接著,必須選擇同用戶的站點需求相接近的sendmail.cf文件並對它進行必要的修改。然後,測試sendmail和它的配置文件。最後,必須安裝sendmail、sendmail.cf以及其他輔助文件。
8y ]/uJ[(K"_
_Uz c+w1hk;uY 上面所述的是基本步驟。但根據sendmail安裝位置的不同,可能還需要修改系統登錄腳本(/etc/init.d中的一個文件),從而使 sendmail在系統引導下能夠被正確地啟動。此外,如果系統沒有別名文件,還必須創建一個,別名文件通常被命名為/usr/lib/aliases或 /etc/mail/aliases(別名文件的位置將在sendmail.cf中用到,因此可以把它放在用戶想放的任何地方)。需要注意的是,可能還需要對系統的DNS數據庫進行修改。iS\!cr

k4C}6h-z2b+e? 1.獲取源代碼sx~ zy6]E'^1?
P6] eY i{7o
RedHat 6.1配備的是sendmail-8.9.3,從[url]www.redhat.com站點上可以得到sendmail-8.9.3[/url]的RPM版本。sendmail的這一版本可以從http://www.sendmail.org站點得到,或者通過FTP從ftp://ftp.sendmail.org得到。
3LnBp @SZ oz"QcndL9U"M(d
注意:下載文件的確切名字依據V8 sendmail當前版本的不同而不同,當前的最新是版本8.9.3。另外,由於文件是被打包壓縮的,因此在傳輸它們之前必須為FTP提供binary命令,即以二進制方式傳輸。還注意,應該使用自己完整的E-mail地址作為口令,例如[email]username@somedomain.gov[/email]。N,wxoD
q vx_OG7om8vSND
2.解壓源、解包並編譯sendmail
W6`Rt*Q:_7g}J
.RpD#G @L?[n 在獲得了源代碼後,必須把它打開。由於它是一個被壓縮的tar映像文件,因此必須對它進行解壓,然後從tar檔案中抽取各個文件。假定文件存放在目錄/usr/local/src下面。  ?Z$eU(zP!{E5UDy
7f R9oXqEx
以下為引用的內容:&oR1aWN`qr
     [root@lll src]# gzip -d sendmail-8.9.3.tar.gz
G)I\+uE E6Bi         [root@lll src]# tar -xvf sendmail-8.9.3.tar
AD-D!}D5r     執行上述操作後,將產生子目錄sendmail-8.9.3。接下來,運行cd和Is,查看這一源代碼  目錄中有哪些文件:
*X(tY~9~P         [root@lll src]# cd sendmail-8.9.3/stc。
:m.tp,f/H J?%S(h         [root@lll src]# ls
+Kv9U.T2fU:r x/i{(c     Makefile     collect.c      macro.c      parseaddr.c     srvrsmtp.c L/iV"tK-b4ZK\
    Makefiles    conf.c         mailp.0      pathnames.h     stab.c (k0M8n(C8u"P
    READ_ME      conf.h         mailp.1      queue.c         stats.c %v(K;?Fz n R$p4f&b
    TRACEFLAGS   convtime.c     mailstats.h  redcf.c         sysexits.c
k$Q'O2Zm*I     alias.c      daemon.c       main.c       recipient.c     sysexits.h
u^*O r C r1jU&o     aliases      deliver.c      makesendmail safefile.c      trace.c #G4SnlLa
    aliases.0    domain.c       map.c        savemail.c      udb.c or"I9n g2e ^
    aliases.5    envelope.c     mci.c        sendmail.0      useful.h
.GqHZ#{5N0o     arpadate.c   err.c          mime.c       sendmail.8      usersmtp.c '`CUj B
    cdefs.h      headers.c      newaliases.0 sendmail.h      util.c m(C#N6dy*jjG)S]
    clock.c      ldap_map.h     newaliases.1 sendmail.hf     version.c
2Wl`D D!Fxi 現在可以準備編譯sendmail了,但首先要閱讀下面的文件,這些文件包含關於用戶所下載的sendmail版本的最新消息。 D6B.qS*e:XoP
        FAQ
~v.R)z*e;wK         RELEASE-NOTES
:V,r`dZR%I         KNOWNBUGS
U(r%H1RI         READ_ME 0AOD+W9C Uc5v
    另外,還要注意doc/op子目錄中的sendmail安裝與操作指南(SIOG)。
Z%c~|4Ev;MgEz     sendmail的安裝過程非常簡單。要編譯新的sendmail版本,運行下面的命令即可。
;Ju:E$g%w kIrR h         [root@lll src]# makesendmail )P#V4D ld Lv
    在RedHat 6.x的2.2內核上,sendmail在編譯時不會出現任何警告或錯誤。如果使用光盤上的RPM軟件包文件,安裝更簡單。僅需執行下面的命令:
&n(bC#@5eu R4J         [root@lll src]# rpm-ivh sendmail-8_9_3.rpm iiL#D9@*R,^
    在安裝新的sendmail時,一定要為被替換的所有文件創建一個備份,特別是原來的sendmail守護程序。如果新的sendmail不能正常工作,在排除新版本的故障時,將需要恢復原來的版本。 +K _'d g"afu
    要安裝新版本的sendmail,首先利用下面的命令停止當前運行的守護進程: 'P ]5b+_'Fx.n
        [root@lll src]#/etc/rc.d/init.d/sendmail.init stop x[4G g7^ U(F?
    然後把新的二進制文件拷貝到sendmail的正確位置:
"P7Ozi`*s         [root@lll src]# cp obj.Linux*/sendmail/usr/sbin/sendmail
jW_3l6HE[z1h     另外,還必須把新的手冊頁文件拷貝到正確位置: #E1|^@F
        [root@lll src]# cp aliases.1/usr/man/man5/aliases.5 -E^T] KK
        [root@lll src]# cp mailq.0/usr/man/man1/mailq.1 h;d'_2H#Aw*obd
        [root@lll src]# cp newaliases.0/usr/man/man1/newaliases.1
'? S |P8L|V,fy/^-e(v         [root@lll src]# cp sendmail.0/usr/man/man8/sendmail.8 ^0bF9n:r"LE2XMD
    現在可以利用下面的命令重新啟動新的sendmail守護進程: ,P*e+y LN N'M0V
        [root@lll src]# /etc/rc.d/init.d/sendmail/init startb Egc*}S l
8Rt]+w4KI
3.sendmail的別名文件
"RMZ7? {&} c"W 5Q u kTC ];W#{h ?"bv
sendmail依靠許多輔助文件來執行它的工作。最重要的文件是別名文件和配置文件Sendmail.cf。如果打算把sendmail作為 SMTP服務程序運行(大多數站點都這麼做),則應該安裝SMTP的幫助文件sendmail.hf。這就是關於文件sendmail.st和 sendmail.hf所需說明的內容。其他輔助文件包含在sendmail的安裝和操作指南(Sendmail Internet and Operating Guide,簡稱SIOG)中。 } j0{3RH kanv
h \ Mr.q
sendmail會檢查收件人的地址是否為別名。例如,大部分Internet站點都設有一管理員地址Webmaster,遇到問題可以向他報告。然而大多數站點並沒有這一名字的實際賬號,而是把Webmaster的郵件轉移到負責郵件管理的一個或幾個人。例如,在假設的站點 somedomain.gov上,用戶zhang和li共同負責網站管理,因此別名文件會具有下面一項內容: uk1C9iJV

3e o1xzU @1Z'T5x9_O Webmaster:zhang,li
-EF9Cd mH'R*Q *yL7`;q[!|
這行代碼告訴sendmail,寄向Webmaster的郵件將被改寄到用戶名為zhang和li處。事實上,這些名字還可以是別名,例如:  
8{ fG+A%k7B Webmaster:firstgroup,secondgroup,thirdgroup #y0PG_$bG
firstgroup:zhang,li 'Ed4MF K"tHt
secondgroup:liu,deng
-X5nd8P2SY'z3| thirdgroup:qiu,wang
]d_/Ftid)X
\"t b}~b5zV 在所有這些例子中,別名的名字在冒號的左邊,這些名字所代替的真實名字在冒號的右邊。sendmail將反覆地分析別名直到他們被解析為一個真正的用戶或一個遠程地址為止。在前面的例子中,要解析別名Webrmaster,sendmail首先把它擴展為收件人名單firstgroup、 secondgroup和thirdgroup。然後進一步擴展這些別名中的每一個,從而得到最終的名單——zhang、li、liu、deng、qiu 和wang。
1k[O"l+zd'L0P[ On;j;bYT
需要指出的是,別名的右邊可以指定為一個遠程主機,但左邊卻不能。別名zhang:[email]zhang@otherdomain.com[/email]是合法的,而[email]zhang@otherdomain.gov[/email]@otherdomain.com是不合法的。

wolf 發表於 2008-8-5 14:48

別名可用於創建郵遞列表(mailing list)。在上面的例子中,別名Webmaster實際上就是一個本地郵件管理員的郵遞列表。對於大型的或是經常改動的名單,可以利用:include 的別名形式指示sendmail從文件中來讀取名單的成員。如果別名文件包含行
|#S,P?,m w7t'H%~ ^b%C8g
friends::include:/home/zhang/friends.aliases
9X&wI6} fA@p 1HA X uSV)wg ])l8d
並且文件/home/zhang/friends.aliases包含
l:~{h$j\Q6M zhang Ig@B[ZF
li
E&^J,oK%Jo1HK1O liu
z+s&`?7{!H.q deng
^9U];I-X4L3Hq @
.v#YlC_f 其效果與下面的別名相同:  friends:zhang,li,liu,deng {:GTqvAn
2w"j;[yp W x
這一指令對於經常變動的郵遞列表或哪些由用戶而非郵件管理員管理的郵遞列表非常方便。如果經常要求改變郵件別名,用戶一般希望把它置於自己的控制之下。 x'iZy"@V4bnw%|"a h
W@SknR*v
別名文件也可被用於向某個程序發送郵件的內容。例如,許多郵遞列表的設立使用戶可以獲取所列的信息或通過向某一特定地址list-request發送信件來訂閱信息。這種信件的主體通常只包含一個單詞,比如help或subscribe等。假設zhang的郵遞列表具有名為zhang- request的一個地址:  zhang-request:|/usr/local/lib/auto-zhang-reply ,m Z JK4?V
AOhU;f;|6dPE
上面表達式的管道號(|)通知sendmail使用程序的郵件發送器,它通常被定義為/bin/sh。sendmail將把信息提供給/usr/local/lib/auto-zhag-reply的標準輸入,如果它存在,sendmail便考慮投遞信件。
X#\7Xb U6r5s1Z jD#C s;MJ GJF0j
用戶還可以創建一個使sendmail向文件發送郵件的別名。下面是別名nobody的一個例子,它在運行NFS的系統上是經常用到:  nobody:/dev/null
-bm M]Wc)K{
Y"oa;I.PsHO 指定文件的別名讓sendmail把它的消息追加到被指定的文件中。由於這一特殊的文件/dev/null是Linux/UNIX的「黑洞」,因此這一別名的作用其實是把郵件清除掉。
8l] hI0?;X.}:o[
[2mq3S6a5J2Jl2Y OK 4.配置sendmail yIvV4TU-P

rN/RLp(}P] Q sendmail是通過sendmail.cf文件來配置的。這個文件通常在目錄/etc下面(有些系統是在/etc/lib目錄下)。 sendmail.cf文件使用的語法與其他配置文件不同,而且比較複雜。    配置文件的每一行都以一個單一的命令字符開頭,這一字符用來說明這一行的功能和語法。以#開始的行是註釋行;空行被忽略;以空格或製表符開始的行是上一行的續行,不過通常應該儘量避免續行。
h{DSi-n
8w9b_,H~0WB 下面介紹命令字符及它們的功能。  
'oHu!@1~.l~
.fKC:d+k gC 以下為引用的內容: PA ]?1|{E:h
    (1)#  註釋符,以#開始的行是註釋行。例如:
6h4q$[0Tz(Z6W |           # This file is a sample for sendmail.cf Gq$_,XL(^ tor X
    (2)D  使用格式為:DX string。其功能是把宏X定義為字符串string,例如: `4{~&Ibh
            DM mail.somedomain.gov :GgL*q[,r
    (3)C  使用格式為:CX word1、word2。其功能是把類X定義為wor1、word2。例如:
3XwG/kew#`&nq           Cw localhost my_host &Zu?ns)\eE9e_U
    (4)F  使用格式為:FX/file。其功能是把類X定義為從文件中讀取的值。例如:
d)^VG fS/]5S x           Fw/etc/hosts )V|r k&Y
    (5)H  使用格式為:H?mailerflag?name:template。其功能是定義郵件頭。例如:
#AA q| ?K           H?F?From:\ $ q    }'f%U rG%j'bz4YJ
    (6)O  使用格式為:OX option arguments。其功能是設置選X,例如:
,e&x9~,a {1}T`'@           OL8# sets the log level to 8
L*CN~ms:_X     (7)P  使用格式為:Pclass=n。其功能是根據郵件的類來設置郵件投遞的優先級。例如:
aq!y]$y[-xP           Pjunk=100
a9i$u;y!t4k"o I     (8)V  使用格式為:Vn。其功能是把配置文件的版本級別通知給V8 sendmail。例如: 9cz1a$B7u1p+X*b?:M
          V3
vFaG'Fp YM6q     (9)K  使用格式為:Kname class arguments。其功能是定義一個關鍵字文件(數據庫映像)。例如: r:~$`:El2Eb
          Kuucphosts dbm/etc/uuphosts 8k-fV:I2RD7[S'b
    (10)M  使用格式為:Mname,f1=v1,...。其功能是定義一個郵件發送器。例如: L8Q nus-_iJ
          Mpop,P=/bin/sh,F=lsD,A=sh-c $ u
j'DK} Q&]6_A     (11)S  使用格式為:Sun。其功能是開始一個新的規則集。例如:
G H9qa~L             S22 lfwia's2|
    (12)R  使用格式為:Rlhs rhs comment。其功能是定義一個匹配/改寫規則。例如:
(`{2VU/au'J)~         R $ + $>jg call ruleset jg -@x?4J-f6ic3hM

Hwa'W9QJ(c3V 上面簡要地列出操作符的類型,現在對它們進行詳細介紹。
0dja^/_IK%k E !A8h;eZY0r
· D操作符 2wN?a+x;rz
9eC"J@.}NCp
宏類似於shell變量,當為一個宏定義了值後,可以在配置文件的後面對它進行引用,宏將會被它的值所取代。例如,一個配置文件可能有多個行包含假設的郵件中心mailer.somedomain.gov,為了避免一次次地輸入這一名字,可以像下面這樣為它定義一個宏R(代表中繼郵件發送器):   DRmailer.somedomain.gov
#h kD%k6_ `[Hy%{A-F
nv OX*a\ 當sendmail在sendmail.cf中遇到$ R時,sendmail將把它替換為字符串mailer.somedomain.gov。
@!?%FvW1]`&y
rI3L7XE4F 宏的名字通常是一個單字符。sendmail定義有許多宏,這些宏不應該被再次定義,否則將會出現一些問題。sendmail使用小寫字母來定義自己的宏;大寫字母可以被自由地使用。
e6tH I3YWC{j m,V*r2MQ6n _|
· C和F操作符
,_Cc)X9ZS#Ql
/QaE~Rn} 類與宏類似,但是在改寫規則中用於不同目的。與宏一樣,類的名字也是一個單字符,小寫字母由sendmail使用,大寫字母用於由用戶定義的類。一個類包含有一個或多個單詞。例如,可以像下面這樣定義一個包含本地域中所有主機的類H: 2F'~lC%D8sy
        CH host1 host2 host3 6b!{*p W4F ]?
    為了方便起見,大型的類可以續行定義。下面對類H的定義與前面定義的結果相同: e ]!dM(c)Y*^,O
        CH host1
[ m+if6@dD!gal(vcB         CH host2
2yy2O ^sB ],C         CH host3
;Ka/KjR(z     另外,還可以通過從某個文件中讀取它的單詞來定義一個類:
(y4y$evt         CF/usr/usr/localhosts
:f:X[0~#D(r}     如果/usr/localhosts文件包含host1、host2和host3,並且是每行包含一個,那麼這一定義與前面的兩個定義等價。
g*g Kc#yUxz     使用宏和類最主要的優點是它們可以集中配置文件中信息。在上面的例子中,如果決定把郵件中心由mailer.somedomain.gov改變為 mail1.somedomain.gov,只需要改變宏$ R的定義就可以了,配置文件僅需作很少的改動。否則名字mailer.somedomain.gov散佈在文件的各處,那麼可能會在某些位置忘記對它們進行修改。另外,集中的重要信息,可以在單獨的一個位置詳細地對它進行註釋。由於配置文件一般比較難於理解,因此如果很長一段時間之後對自己所做的某種修改感到迷惑時,在配置文件中添加詳細的註釋是很有幫助的。
"JAP*U$~5r%I     · H操作符
_^Int&g     一般情況下,不需要對V8 sendmail的配置文件所提供的郵件頭進行修改,因為它們已經遵從了公認的標準。下面是一些郵件頭的示例:
8moT'[x         H? D? Date:$ a
|a:]vE%kZ#d         H? F? Resent-From:$ q )L+P:NY} J O_-@
        H? F? From:$ q )}^xw-Of
        H? x? Full-Nnme:$ x `!F\-K1IZ
    可以看出,在郵件頭的定義中可以使用宏。當插入到某封信中時,這些宏將被擴充,由它相應的值取代。例如,在上面的例子中,用於郵件頭定義Full- Name:中的宏$ x將被取代為寄件人的全名。在郵件頭的定義中,可選的?mailerflag?結構用來通知sendmail只有在被選擇的郵件發送器具有這一郵件發送器標誌時才插入郵件頭。 S%i^W*j-Ed"` B iTF
    假如在用戶的本地郵件發送器的定義中具有一個標誌Q,並且sendmail選擇了這一郵件發送器來投遞某一信件,如果配置文件包含一個像下面這樣的郵件頭定義,那麼sendmail將把這一郵件頭插入到通過本地郵件發送器被傳遞的信件中,並利用相應的值來取代宏$ F:
_yT.NZ6J         H? Q? It-is-a-wonderful-day:$ F ].j tX7Td
    為什麼要使用?mailerflag這一特性呢?這是因為不同的協議可能會需要不同的郵件頭。另外,由於它們也需要不同的郵件發送器,因此可以通過在郵件發送器定義中定義相應的郵件發送器標誌並使用郵件頭定義中的?mailerflag?結構,來通知sendmail是否要插入相應的郵件頭。 (s_/P-^w(^-g[C
    ·0操作符
Z0\ \ NE-X\ oh     sendmail具有許多選項,這些選項用來改變sendmail的操作或者用來通知所使用的文件的位置。大部分選項既可以通過命令行提供,也可以在配置文件中給出。例如,用戶既可以在命令行也可以在配置文件中指定別名文件的位置;要是在命令行上指定別名文件,可以使用-o選項: w0j:_LK-Cc
        $ sendmail-oA/etc/aliases[other arguments...] (|FI#K L#F
要是在配置文件指定別名文件,可在配置文件中添加如下一行代碼: #\)qgxW0l
        OA/etc/aliases %we&z"Q^Z
    這兩種方法是等價的。但由於像別名文件的位置這種選項很少改變,因此人們通常在配置文件sendmail.cf中設置它們。V8 sendmail的所有選項在SIOG中有詳細的說明。
7Q;~ vqgjY     ·P操作符
)A @/m+})l3{P:~     用戶可以在郵件中包含用來指示郵件的相對重要性的標題,sendmail可以根據這些標題來確定信件的優先級。假設為V8 sendmail提供的優先級如下:
c)U!wPP*z         Pemergent=100
Q(qs0a&qa"X(d         Pimportant=0
V)e\8z/BK`)i         Pnormal=-30 (y%Im1@ ^.T
    如果用戶在他們的信息中含有標題Drecedence:normal,那麼sendmail為這些郵件提供的優先級要低於利用標題Precedence:importangt的郵件。 EV2QW a+V'dt
    ·V操作符 ]5p0MM"n]5W
    隨著V8 sendmail的發展,許多Linux愛好者不斷地為它添加新的特性。 V操作符能夠使V8 sendmail知道在配置文件中它可以找到哪些特性。老版本的sendmail不能夠識別這一命令。在SIOG中,對配置文件的版本級別有詳細的說明。
0|ilx3sv&CqK     注意:配置文件的版本級別與sendmail的版本級別並不是一回事。V8 sendmail能夠理解從版本1到5的配置文件,而版本8的配置文件並不存在。
D%T;Fx J     ·K操作符 6yfjQF9g?
    sendmail使用了一些關鍵字數據庫,例如別名數據庫。假如給定了關鍵詞Webmaster,sendmail將查找與這一關鍵詞相關的數據,V8 sendmail把這一概念擴充為任意的數據庫,包括NIS mps(Sun的網絡信息服務,以前稱為Yellow Pages或YP)。K操作符可用來向sendmail通知數據庫的位置、類別以及訪問方法。V8 sendmail支持的數據庫類別有:dbm、btree、hash和NIS。當在Linux下編譯時,使用的缺省類別是dbm格式。
%@ ?*{d l-f$?y~     · M操作符 R!st h!dH]!g
    前面已經介紹,郵件發送器或者是MTA或者是最終投遞代理。針對每種目標,可以定義一個專門的郵件發送器。即使SMTP,MTA被內置,它也必須有一個郵件發送器定義來定製sendmail的SMTP操作。郵件發送器的定義是很重要的,因為所有收件人的地址必須在0號規則集中解析到一個郵件發送器。解析到本地郵件發送器將通過定義在其中的最終投遞代理(例如/bin/mail)把信件發送給某個本地用戶,解析到SMTP郵件發送器將通過定義在其中的 sendmail固有的SMTP傳輸器把信件發送給另一個主機。下面將介紹一個定義郵件發送器的具體例子,由於sendmail需要一個本地郵件發送器,因此給出下面的例子:
6H'n5\|3Bh.i V         Mlocal,P=/bin/mail,F=lsDFMfSn,S=10,R=20, A=mail-d$u #L]v3r Nn
    所有郵件發送器的定義都以M操作符和郵件發送器的名字開頭(在本例中是local),其他字段在後面並且分別由逗號隔開。每個字段由字段名和它的值組成,字段名和它的值之間由等號(=)隔開,允許使用的字段在SIOG中有詳細的說明。在上面本地郵件發送器的定義中,P=用來提供投遞郵件的程序所處位置的路徑名/bin/mail,字段F=用來為本地郵件發送器提供sendmail標誌。這些標誌並不是要傳遞給字段P=中所指定的命令,而是由 sendmail用來根據它所選擇的郵件發送器來修改自己的操作。例如,sendmail通常在調用郵件發送器之前放棄它的超級用戶身份,但可以利用S郵件發送器標誌通知sendmail為某些郵件發送器保持這一身份。
)Ve.[5F,g     字段S=和R=用來為sendmail指定在改寫寄件人和收件人地址時用到的規則集。由於可以為所定義的每個郵件發送器提供不同的R=和S=標誌,因此可以針對每個郵件發送器的不同特點來改寫地址。例如,如果用戶的UUCP鄰居運行的是一個不理解域尋址的陳舊軟件,就需要專門為他的站點說明一個特殊的郵件發送器,並編寫針對特殊郵件發送器的規則集,從而把地址轉化為它的郵件發送器能夠理解的形式。S=和R=字段還可以指定用來改寫信封和郵件頭地址的各種規則集,像S=21/31這種表達式將通知sendmail利用21號規則集改寫寄件人的信封地址,利用31號規則集改寫寄件人的郵件頭地址。這一功能對於要求不同地顯示信封地址和郵件頭地址的郵件發送器是很有用的。 H$s TO7?JIr
    A=字段用來為被運行的程序(在本例中是/bin/mail)提供變量向量(命令行)。在這一例子中,sendmail將運行命令mail-d $ u,其中的宏$ u將被替換為被投遞的用戶名: %Z:Ez3\ @G
        /bin/mail-d zhang -^ l$R@D;hf U
    用戶可以在命令提示符下把與此完全相同的命令輸人到shell中。 h:Z8Z!S!lXI3q
    另外,還可以使用其他郵件發送器標誌來調節郵件發送器。例如,可以根據不同的郵件發送器限制信息的最大尺寸。 ?qI-E"TD,Rz.^
    · S和R操作符
RXV.I!Q qZ     配置文件sendlnail.cf由一系列規則集組成。規則集用來探測錯誤的地址,把地址改寫為遠程郵件發送器能夠理解的形式,以及把郵件路由到 sendmail內部的某個郵件發送器。sendmail按照固有的順序向規則集傳送地址,而規則集可以不按固有順序調用其他規則集。固有順序與處理的郵件地址以及選擇用來投遞信件的郵件發送器有關。
/I/D"b7eG%lP     規則集由S命令宣佈,跟在它後面的是用來標識規則集的編號。sendmail將收集下面的R(規則)行,直到它發現另一個S操作符或配置文件的結尾為止。下面的例子定義了編號為11的規則集:
'Qu6M$p4B_R{         #  Ruleset 11 ]'J1I;H#p!eRO
        S11 :f|JzK/{ t
        R $+$:$>22$ I call ruleset 22 /i/k5Ut ?
    sendmail分三種途徑來處理地址:一種用來選擇投遞代理,一種用來處理寄件人地址,一種用於處理收件人地址。 9^'j,?,_0xG(`i
    所有郵件地址首先被傳送到3號規則集進行預處理從而變為規範的形式,以便其他規則集能夠容易地處理它們。不論地址多麼複雜,3號規則集的任務是確定某個郵件應該被發送到的下一個主機,3號規則集將盡力在地址中查找那一主機並利用尖括號來標記它。例如,在一種最簡單的情況下,一個像 zhang@somedomain.gov這樣的地址將變為znahg<@simedomain.gov>。接下來,0號規則集將確定用於每個收件人的正確的投遞代理(郵件發送器)。例如,一封由li@othedomain.com發給zhang@somedomain.gov(一個 Internet站點)和posthost!zhao(一個老式的UUCP站點)的信件需要兩個不同的郵件發送器:一個用於somedomain.gov 的SMTP郵件發送器,一個用於posthost的老式UUCP郵件發送器。郵件發送器的選擇決定以後對寄件和收件人的地址進行處理的方式。因為提供在「S=」和「R=」郵件發送器標誌中的規則集根據郵件發送器的不同而不同。 0[z"fm{oukQW
    經過0號規則集的地址必須解析到一個郵件發送器。因此,當某個地址匹配lhs時,rhs將提供一個由郵件發送器、用戶和主機組成的三元組。下面這行代碼表示的是解析到某個郵件發送器的規則的語法: |9z{'REH]!TH
        Rlhs $ # mailer $ @host $:user some comment here...
2q(I"qf6a     上面的mailer是利用M命令定義的一個郵件發送器的名字,例如SMTP。host和user通常是來自lhs的位置宏。
0pP5J^(~!W     當sendmail在0號規則集中選擇了一個郵件發送器後,它將通過1號規則集(通常是空的)來處理寄件人的地址,然後把它們發送到由這個郵件發送器中的S=標誌所提供的規則集。
aj3k:yy3QR0_     類似地,sendmail將把收件人的地址發送到2號規則集(通常也是空的)中進行處理,然後再把它們發送到郵件發送器的標誌R=所提供的規則集。 I`C!j+N[4B
    最後,sendmail將在4號規則集中對所有地址進行後處理。4號規則集將把在3號規則集中插入的尖括號刪除。
4yIxjQ/T6V     為什麼不同的郵件發送器具有不同的S=和R=標誌呢?考慮前面向zhang@somedomain.gov和posthost!zhao發送信件的例子。如果li@othedomain.com發送郵件,它必須針對每個收件人以不同的形式出現。對於zhang,它應該是一個域地址 li@otherdomain.com;對於zhao,由於otherdomain.com希望老式的UUCP地址(假設它具有一個連向posthost 的UUCP鏈接並且otherdomain.com的UUCP主機名是posthost),因此返回地址應該是otherdomain!li。zhang 的地址也必須為posthost的UUCP郵件發送器進行改寫,並且zhang的副本必須包括他的郵件發送器可以處理的posthost的地址。
fw7Bt"lR;["UES cs     當sendmail把一個地址傳遞給某個規則集後,規則集中的每一個規則行將逐行地對它進行處理。如果某個規則行的lhs與地址相匹配,地址將被Ihs改寫;如果它不匹配,sendmail將繼續到下一個規則,直到達到規則集的末尾為止。在規則集的最後,sendmail將把被改寫的地址返回給調用規則集的規則集或是固有執行順序的下一個規則集。 P6h&J$I8rWX
如果某個地址與lhs相匹配並且被rhs改寫,這一規則將再次被調用——一個隱式循環。 K/N#JU|$aKe
    如前面介紹,每一個改寫規則都由R命令引人並且具有三個字段——左端(lhs或匹配端)、右端(rhs或改寫端)以及可選的註釋,各個字段之間必須由製表符隔開: 8]z4S#Yog.~ oU
        Rlhs rhs coment
{9|M2K/Q4_l:s W     sendmail將把地址和規則的lhs解析成標記,然後再逐個標記地把地址和lhs進行比較。宏$o包含sendmail用來把地址分隔成標記的字符,它通常具有如下的定義:
3j"fF'qu$\l         #address delimiter characters
(~6l(I)m8t(Q+?R         Do.:%@!^/[] .r:V!E2e%i h
    $o中的所有字符,既是標記分隔符,又是標記。sendmail獲取像xie@rainbow.org這樣的地址,然後根據宏o中的字符把它分解成多個標記,就像下面這樣: 1q0?:ldk9o@U
       「xie」「@」「rainbow」「.」「org」
8R-U+Hh c\ hp     sendmail也把改寫規則lhs分解為標記,從而使它們可以同輸人的地址一個個地相比較,以確定是否匹配。例如,lhs $ -@rainbow.org分解後的內容如下: y Hd ]^bG'NP
        $-」「@」「rainbow」「.」「org」
*fq5a4p3f2P9SoZ     其中「$-」是一個模式匹配操作符,類似於shell通配符,它用來匹配任何單一的標記符。現在可以把兩組標記放在一起來揭示sendmail如何確定一個地址是否與規則的lhs相匹配。 /B^3`^e[ Du
        「xie」「@」「rainbow」「.」「org」 BU4QM'ta.x*r'n&nv3k
        「$」「@」「rainbow」「.」「org」 K1zQ1UH,g
    在此例中,由於來自地址的每個標記都匹配一個常量字符串(例如rainbow)或一個模式匹配操作符($-),因此地址和lhs相匹配並且 sendmail將使用rhs來改寫這一地址。接下來,考查一個改變$o值的效果。sendmail把地址xie@rainbow.org分解為五個標記;然而,如果@字符不在$o中,這一地址將完全不同地被分解為三個標記:
d ATz J [g$A"M         「xie@rainbow」「.」「org」
ysQj+WG \P+f     由此看來,改變$o將對sendmail的地址解析產生極大的影響。因此除非用戶對自己所做的事情非常有把握,否則應該保持它的原狀。 h|/pN[{ ~
    · 規則的左端(lhs)
9m?'Iq;\/F$\L     lhs是sendmail用來與輸入地址進行對比的模式,lhs既可以包含普通的文本,又可以包含任何模式匹配操作符。 0sFS*b2^b*l7Iq
    lhs的模式匹配操作符主要包括:$-(匹配一個標記)、$+(匹配一個或多個標記)、$ *(匹配零個或多個標記)、$@(匹配空的輸入,用來調用錯誤郵件發送器)。 k${i8r @
    在lhs中,還可以利用下列宏和類的匹配操作符:$ X(匹配宏X的值)、$=C(匹配類C中的任何一個詞)、$∼C(匹配不屬於類C的任何一個標記)。
u(\$\'D R7Uv$q     模式匹配操作符以及宏和類的匹配操作符是十分必要的,因為大多數規則必須匹配許多不同的輸入地址。例如,某個規則可能需要匹配所有以somedomain.gov結尾、以一個或多個其他任何內容開頭的地址。 5^$K_0W3g1X
    · 規則的右端(rhs) :g i~)F;?U-|@
    rhs是改寫規則,其作用是通知sendmail如何來改寫一個與lhs相匹配的地址。lhs可以包含文本、宏及對匹配內容在lhs中的位置把它匹配的內容賦值給一個數字宏$ n。例如,假設地址zhang@hostl.somedomain.gov被傳遞給下面的規則: |}~"c|*l3c
        R $+@$+$:$1<@ $ 2>foucus on domain |?cq5g}
    在此例中,由於zhang與$+(一個或多個任何內容的標記)相匹配,因此sendmail將字符串zhang賦值給$ l;地址中的@與lhs中的@相匹配,但常量字符串不被賦值給位置宏;字符串hostl.somedomain.gov中的標記與第二個$十相匹配,因此它被賦值給了$ 2。這樣被改寫後的地址是$ l<@$ 2>,也就是zhang<@ hostl.somedomain.gov>。
*\*I+QQ`y,S     現在考查下面的這條規則: %^/O P aC S
        R $ * $:$ 1<@ $ j>add local domain
'D3Vx f&q;B+G8l     當在rhs改寫一個地址後,sendmail將把改寫過的地址再與當前規則的lhs相對比。在本例中,由於$*可以與0個或多個任何內容的標記相匹配,因此無論rhs如何改寫地址,它將始終與$ *相匹配,因此這一匹配規則將無限制地循環下去。為了避免sendmail在這條規則上進人死循環,引用了$:,它用來通知sendmail只對這一規則使用一次。 9q~:tf5h'ruoM
    當希望一個規則集立即終止並把地址返回給調用這一規則集的規則集或sendmail固有順序中的下一個規則集時,可以在規則的rhs之前添加$@,它將使sendmail在rhs改寫地址之後立即退出這一規則集。 "A:Ub9`m B#K AI
    一個規則集可以通過在rhs前面添加$>向另一個規則集傳遞地址,考查下面這一條規則:
7pk:ajf$w         R $ * $:$>22 $ 1 call ruleset 22 jgu5d?hX
rhs 的$ *匹配零個或多個標記,因此sendmail將不斷地執行rhs,但由於在rhs前具有$:,所以這一規則只被使用一次。在這一規則中,$>22 $ 1 將以 $ 1 為輸入地址調用22號規則集。由於$ 1匹配的內容正是lhs中的內容,因此這一條規則只是把當前的輸入地址原封不動地傳遞給22號規則集。22號規則集返回的任何內容都將傳遞給這一規則集中的下一條規則。
'K.f3C5_R;P%b 8.2.3  測試sendmailGSX-t|p
    在安裝一個新的或經過修改的sendmail.cf之前,必須對它進行徹底的測試,因為即使是很小的、看起來不會造成危害的修改也可能會導致嚴重的後果。 X\f ]}
    測試的第一步是創建一些地址,這些地址應該是用戶的站點需要用到的有效地址。例如,在沒有UUCP連接Internet站點somedomain.gov處,下面的地址有效。 I,Y!p*u YO[.V
        zhang
5r5uX_ fen7S%XU         zhang@host1.somedomain.gov
4h zo xJx#TD&k"S         znang@somedomain.gov
w"wEi{ BR8Ym1`     即使somdomain.gov具有一個UUCP連接,也應該測試這些地址。其他一些需要考慮的地址包括各種別名(例如,Webmaster,include:列表,用來向文件郵寄的別名,用來向程序郵寄的別名)、非本地地址、源路由地址等等。 $|6M!ndp'X:^
    當創建好測試地址的列表後,可以使用-C和-bt選項來查看將要發生的情況。這些地址至少應該被傳遞3號規則集和0號規則集,從而確定它們是否能夠被路由到正確的郵件發送器。完成這一任務的比較簡單的方法是,創建一個包含被調用的規則集以及測試地址的文件,然後對它執行sendmail。例如,如果文件 sdml.test包含下面的行:
A}CwFm'EvA         3,0 zhang
_7Q9Jy&~ r         3,0 zhang@hostl.somedomain.gov
3nymO,{t         3,0 zhang@somedomain.gov j4{ ^ d Pc
那麼,可以通過輸入下面的命令來測試配置文件test.cf:
qv%P Z Y| D'h         $ sendmail-Ctest.cf-bt< sdml.test
V4L/v4[a.Vqu         rewrite:ruleset 3 input: zhang L jAy"L:x
        rewrite: ruleset 3 retruns:zhang
5`9i q ri1S         [etc.] )IRT2h'_
    還可以對一個或多個地址執行改寫過程進行全面測試。例如,如果某個地址被解析到SMTP郵件發送器。並且這個郵件發送器指定R=21,那麼可以通過使用3,2,21,4等來測試收件人地址的改寫是否正確。
d8X3q&u*UyG     如果到目前為止sendmail.cf的工作正常,那麼可以準備發送一些真正的信件。執行如下命令: _u^ y8Nr[]6dRd
        $ sendmail-v-oQ/tmp-Ctest.cf recipient</dev/null
-dby Z!\/b1b'\d     這裡的一v選項使得sendmall以冗餘方式顯示信息,從而使用戶可以看到所發生的事情。看到的內容或者像zhang…Sen這樣的簡單信息或者是一個完整的SMTP對話框。-oQ/tmp用來通知sendmail使用/tmp作為它的隊列目錄。使用這一選項很必要。因為當利用-C選項運行時, sendmail將放棄它的超級用戶權限,並且不能把隊列文件寫到正常的郵件隊列目錄中。由於這裡使用了-C和-oQ選項,因此sendmail在信件中也將包含如下的警告標題,從而向收件人提醒一些偽造的郵件: -e2o'Qp,h,yj7sRy
        X-Authentieation-Warning:somedomain.gov:Processed from queue/tmp hCU8o6jh
        X-Authentication-Warning:somdomain.gov:Processed by zhang with-C srvr.cf
2v1o$Thh4Y,C;Y     sendmail也將在信件中插入標題Apparemt;u-tp:zhang,這是因為雖然在命令上指定了收件人,但信件中卻沒有任何內容。在本例中,由於信件來自空文件/dev/null,因此沒有可用的To:標題。如果以超級用戶的身份執行測試任務,那麼就可以不使用-oQ選項,sendmail便不會插人警告標題。通過創建像下面的文件並利用它作為輸入來代替/dev/null,可以避免「Apparently-to:」標題的插入。
IS5CE [5\-u         To:recipient
:w P B({+f|F         test A3K)~)M]nx*K
"_V"C0PiD3ur
收件人是用戶自己,以便檢查郵件頭的正確性。在一些特殊的情況下,返回地址行必須為SMTP包含一個FQDN。因此像From: zhang@somedomain這樣的標題是不正確的,因為它不包含名字的域名部分,但像From:zhang@somedomain.gov這樣的標題是正確的。0OBt*l2a8hZ I#`
t/I4s8RH*{#R0K"J
3  sendmail的工作方式
gP3t.A @ x;n E &Y%Db/AhAM|`O
sendmail應用廣泛而且靈活,它有多種工作方式,能充當多種角色。sendmail可以作為郵件路由器、SMTP客戶程序和SMTP服務程序。不過,它不執行最終的郵件投遞。
6go7m.[v D+i+])x W{1{7}
sendmail的主要角色是充當一個郵件路由器。即通過它獲取信件、檢查收件人地址並確定發送信件的最好路徑。sendmail是如何來執行這一任務呢?
W0s{nXo !E)tb$JI7I6J&P$p
sendmail可以確定它自己的一些信息,例如當前的時間和它運行所在的主機名,但它的大部分智能是由用戶(「郵件管理員」)通過配置文件 sendmail.cf的形式來提供的。這個配置文件確切地告訴sendmail如何來處理各類郵件,它非常靈活和強大,並且乍看起來似乎難於理解。 Q&LX6Ye_ \
但是,正像上面介紹的那樣,V8 sendmail具有一套模塊化的配置文件構造塊,大多數站點都能夠利用這些模塊輕易地構造出配置文件,並且還包括許多示例。 9s&p7]A2lYS#L

-TW:cs9k]:ZZ 像前面提到的那樣,sendmail可以作為一個MTA運行,因為它理解SMTP協議(V8 sendmail還理解ESMTP)。由於SMTP是一個面向連接的協議,因此客戶程序和服務程序(也稱為發送器和接收器)總是存在。SMTP客戶程序可以向SMTP服務程序投遞信件,SMTP服務程序將不斷地監聽計算機的SMTP端口。sendmail可以是一個SMTP客戶程序,也可以是一個SMTP 服務程序。當sendmail被MUA運行時,它成為一個SMTP客戶程序,並把客戶端SMTP通知給SMTP服務程序(不必是另一個sendmail程序);當系統引導並且sendmail以守護進程模式啟動時,它不停地運行,為新發來的郵件監聽著SMTP端口,這時sendmail就是一個服務程序了。
0`U bUqEJ sendmail所不做的一件事情是郵件的最終投遞。sendmail把這一任務留給了其他程序。sendmail是一個大型的、複雜的、利用超級用戶權限運行的程序,因此需要有一些方法來解決安全性的問題,有關安全性的問題在sendmail的過去已經發生過許多次。郵件投遞的額外複雜性是sendmail有待解決的最後一個問題。

wolf 發表於 2008-8-5 14:49

[b]4  配置Elm和Pine[/b]
HN7W!@/^[ R 配置好sendmall郵件系統後,就可以發送和接受郵件了。但是僅僅能夠收發郵件還不夠,還需要顯示郵件、管理郵箱的程序,因此還必須配置MUA 程序。在Linux/UNIX中有很多這樣的MUA程序,其中影響最大、應用最廣的是Elm和Pine。在Linux的各個版本都包含了這兩個郵件程序。下面介紹如何對它們進行正確的配置。
i]9B.Y,W'~ p 4.1  配置 Elm  nhx[F9T}v(l
Elm代表Electronic Mail,它的功能非常強大並且提供很好的幫助系統。在多數情況下,只要sendmail郵件系統能夠正常運行,就可以運行Elm程序。  
}%QF*fK)s_0H Elm的配置文件是/usr/lib/elm/elm,對於一般用戶來說,僅需修改此文件中與機器名和域名有關的選項。代碼清單8.l給出的elm.rc文件經過了刪節,僅保留了一般用戶要作修改的部分。
S G1F H;Co*BW3@ 代碼清單 8.1  elm.rc配置文件  
M{KBI         # Local hostname  D&ZA'\ j
        hostname=mymailer  C+fW,V)S0r3M/y;y
        #  -G:GS_0Z
        #  Domain name_  
Mw%wE,t"y@%N         hostdomain=.sw.edu.cn  
8Q+u*woc1~4s/s;}8@         #  0?5aHA,GECJ
        # Fully qualitifed domain name  
f)}4pyS,Q         hostfullname=mymailer.sw.edu.cn  
N(F#`k g+lJ         #  !rA]"n1qfz_
     F?(|9p l.s~
從上面的例子可以看出,配置語句的格式是:「變量=值」,看起來比較直觀。值得注意的是,城名前面必須加上一個圓點,否則會導致機器名出錯。  H{0vG s#f
缺省情況下,Elm程序使用ASCⅡ字符集,當它遇到不能識別的字符時,就調用系統進程metamail來顯示代碼。當進程metamail運行時,將減慢郵件程序Elm的運行速度。為了使Elm程序可以處理Linux系統使用的標準字符集,要在文件/usr/lib/elm/elm.rc中加人下面的語句:  displaycharset=iso-8859-l  
X6eY5S~@2d     另外,因為Elm程序不能正確處理ISO-8859-l字符集中的有些特殊字符,所以要在文件elm.rc中加入下面兩行:  #B?;Vy4r sG
        charset=iso-8859-l  JvV2S;B%{
        textencoding=8bit  
%Ml,l"W | 缺省情況下,系統將一個字節中最後一位去掉以產生7位的字符。第二行命令把系統設置成可以處理8位字符。  
8Zd|"yH$K8`.EX U Elm程序的配置信息被保存在文件/usr/lib/elm/elm.rc中和用戶主目錄的.elm/elm.rc文件中。這兩個文件是Elm程序運行時自動產生的,用戶不必直接去編輯這兩個文件。  
*@$SYJ'wXW     8.4.2  配置Pine  
5rL:oOz     Pine也是一個常用的郵件程序。和Elm一樣,Pine程序也通過一個配置文件來控制郵件程序的訪問和操作。Pine程序的配置可以引用系統變量的值,也可以由用戶定義。  
#q\Rb2E-O1x*}v     Pine程序可以通過修改文件.pinerc來配置。這個配置文件比較龐大。但一般用戶僅需關心該文件的三部分:(l)系統名和用戶標誌的配置;(2)郵箱的配置;(3)Pine程序屬性的配置。  )?;YP c;T
下面的代碼清單8.2節選了配置文件關於系統名和用戶標誌的配置部分。其中設置為空的項表示使用系統的缺省值。如果需要用戶定製,可以在等號右邊填寫。配置的第一項是  p't!]].@9QH"f5p
        personal-name=  5O9P@\6R#p0A
一般用登錄名(賬號名)即可,當然也可以填寫其他名字。其他配置如smtp-server、nntp-server、user-domain、inbox-path都可以用系統缺省值。在配置之前,認真地閱讀開頭的註釋部分是很有必要的。
Glm;P` 代碼清單8.2 .pinerc中系統名和用戶標誌的配置部分
nY,Xg1@!W e     # Updated by Pine(tm) 4.10,copyright 1989-1999 University of Washington. T U'wL3p"d
    #
7V:ZGIJ%] E7_$h     # Pine configuration file-custornize as needed.
}2_4h)g6xB     #
~C!wMV]0^|q f co     # This file sets the configuration iptions used by Pine and PC-Pine.If you
;_s(qX#W?Q(E(M/t9OF     # are using Pine on a Unix systern,there may be a systern-wide configuration
!n3A#I'DE/J(j(n,t     # file whick sets the defaults for these variables.There are comments in  
\ Q"h+T0V'|2J     # this file to explain each variable, but if you have questions about
3L zN5[3i A5N     # specific settings see the section on configuration options in the Pine
.J)M6~ Zk)I     # notes.On Unix,run pine-conf to see how system defaults have been set.
sp{'FHZ3k     # For variables that accept multiple values,list elements are separated
DI"?P gG&b[(X,GA     # by commas. A line beginning with a space or tab is considered to be a  9a%e/qEI'Y
    # continuation of the previous line. For a variable to be unset its value  
2p QM%e]5y     # must be blank. To set a variable to the empty string its value should  }'b7vR`6g{+gs
    # be」」.You can override systern defaults by setting a variable to the  
2Xzs,U:_4o     # empty string. Switch variables are set to either "yes" or "no",and CvsCn c&h
    # default to "no". 6t5w^[nT0aw
    # Lines beginning with "#"are comments,and ignored by Pine.
J'~c%F yF7m|@Ch W      E`;^6S*~
    # 配置用戶名,一般可以用戶登錄名(即用戶賬號)。 "T{:t^g*wf@a
    personal-name=your_login_name
&M)W0a)l5A"`      v*`t*fL,H
    # 設置用戶的域名.
7^ L MrqDpm.U\~     user-domain=
:l_b+G[ S.Yf:d       fV9y)t W
    # 設置發信SMTP服務器,缺省情況下使用sendmail. 6v^7?7km
    smtp-server=sendmail
N#O%A:a1w Yf       
c"Cj;N6t4oA W     # 設置郵遞新聞的NNTP服務器。
An&m8BHB8f"G(oL     rmtp-server= 4u GD X0t C
   
[~nG XGg)l(v6k # 設置(本地或遠程)INBOX的路徑。本地INBOX的路徑通常是/usr/spool/mail/$ USER.
`Vts(@ inbox-path=

wolf 發表於 2008-8-5 14:50

下面的代碼清單8.3是文件. pinerc中關於郵箱的配置部分。如果需要改變郵箱的操作時,可以在這裡修改。          代碼清單 8.3 .pinerc 中關於郵箱的配置部分
n4NY/Ht(vj1\T ^ V A`+M.Y8zG
[table=95%][tr][td][color=#ff0000]以下為引用的內容:[/color]N-Z%i;F%UP3g
   # 除INBOX以外,設置其他的用於接收郵件的目錄(文件夾)列表。例如,{host2}inbox, U6I/S&}&M
    # {host3}inbox等等。
JTTUz&P(f7\qW     # Syntax:optnl-lal,{optnl-imap-host-name}folder-path
;~M#];m6e%T7t     incoming-folders= Q8k M qYOa&b
     k7iq p@g;u
# 設置用於保存郵件的目錄(文件夾)列表。缺省情況下,使用列表中的第一個目錄。      
vC2u+[1R{5o@Ve 例# 如,Main {host1}mail/[],Desktop mail/[]等等。 *d |$fM(K4I?0H
    # Syntax:optnl-label{optnl-imap-hostname}optnl-directory-path[] ac*S%kf vl(m5o
    folder-collections= )l,Xg"wWG/gP
    # List,only needed if nntp-server not set,or news is on a different host r k mg(xv-r7r
    # than used for NNTP posting.Examples:News * []or News *{host3/nntp}[]
1nd$vY7LB*aSC     # Syntax:optnl-lable*{news-host/protoclo}[]
Z|/b;U$dk^h     news-collections= MI#q+b'Q b({na8l
     
[6MPqE Yt     # List of folder pairs; the first indicates a folder to archive,and the  `;{W"A4Px tw6oRq@
    # SeC0nd indicates the folder read mp in the first should 4J0nc/n ep#I.q
    # be moved to. T&J}(nm~N n6u$Ok
    incoming-archive-folders=
9o.?8P%e6O m      
i R3@w e+f??     # List of context and folder pairs,delimited by a space,to be offered for                                                                                 
[]k4s])Wk     # pruning each month.For example:{host1}mail/[]mumble
|"N[aNU     pruned-tolders= )N }%S'VDd5t:Ih
    # 設置保存已發送郵件消息的目錄(文件夾)。例如old-mail、{host2}sent-mail或""。
/\EF3e5QmnO     # Default:sent-mail(Unix)or SENTMAIL.MTX(PC)in default folder collection. zL*l`e?ot
    default-fcc=
A/t%A+cb+Z     # 設置保存郵件消息的目錄(文件夾)。例如,saved-messages或{host2}saved-mail或""。
#n&h/U4dZAU`v@ # Default:saved-messages(Unix) or SAVEMAIL (PC)in default folder collection.
:}]kM [;k8F*E default-saved-msg-folder=
I4p$}?.r!@(o     # 設置保存過期郵件消息的目錄(文件夾)。例如pm(使用保存郵件目錄(文件夾)列表中 )o_)Fm3k3z1F4jG d
    # 的第一個目錄)或{host4}pm(使用host4的主目錄)等等。
Q!t&V!i"D ? M     #Default:postponed-msgs(Unix)or POSIPOND.MTX(PC)in default folder collection.
(M'r0oI%L     postponed-folder= p1Y B/DAq7qe
    # 指定保存已讀郵件的目錄(文件夾)。
Hb|&e ?7G     read-message-folder = e^6?Di }2Oo
    # 規定存放信件表格的目錄(文件夾)。
8t+fF"x*u"N*O-Y R     form-letter-folder = M4^ Fz7[Vn
    # 指定簽名文件的路徑。缺省值是~/.signature。
#{%}o:t1S'vX     signature-file = 8K:C&EU.`w-z)L
    # 設置用戶全局/共享郵件地址簿的文件名和路徑。
@&xWA n0~*G f p     # Default: none
cAD9h'fE7@N"U     # Syntax: optnl -label path-name ^_8]4ul Y0G}
    global-address-book =
,f9jd|(R p     # 設置用戶私人郵件地址簿的文件名和路徑。 Z#L0Y4K$zd6Zg
    # 缺省值:~/. addressbook(Unix)或/ PINE/ ADDRBOOK(PC)
4J p5K^ E_L     # Syntax: optnl-label path-name
!l xE h2c];a address-boo k=
s-kSU`D~M     在配置文件.pinerc的最後部分是關於Pine程序屬性的設置。通過閱讀代碼清單8.4註釋,容易明白每個配置項的含義。
'@?sa2s7Y2r                         代碼清單8.4 .pinerc中Pine屬性的設置部分 W:e x5tG'\
    # 設置Pine的特性列表,例如:feature-list=select-without-confirm,
4w#Wln9`     # signature-at-bottom等等。 &H]Ep,y ` u
    # Default condition for all of the features is no-.
w%_w$mrz     feature-list = U8]Jm_:yL
    # Pine executes these keys upon startup(e.g.to view msg 13:i,j,1,3,CR,v)
O#@%Wt N;zz(@ a     initial-keystroke-list = 6m:o.ILP-e2J:yx?
    # Only show these headers(by default) when composing messages 6G?cP`8h@
    default-composer-hdrs = SS W:Sf)wH.O~
    # Add these customized headers(and possible default values)when composing
6T;HIJ+A0z     customized-hdrs = ce3bcxe`4_0ED
    # When viewing messages, include this list of headers
NV0E$ljC3D0F     viewer-hdrs =
}4]4hM$x5V     # Determines default folder name for Saves...
:HL!oh'{1{ L$[     # Choices:default-folder,by-sender,by-from,by-recipient,last-folder-used. 7}#I Oho&e}U
    # Default:"default-folder",i.e."saved-messages"(Unix)or"SAVEMAIL"(PC). 7t,UQIn U-N#T
    saved-msg-name-rule= A ~j/[$P(A1z6C.^
    # Detemines default name for Fcc...
"RT c.DO(FP ^     # Choices:default-fcc,by-recipient,last-fcc-used. -~/I @K&[-X?r.a iYG
    # Default:"default-fcc"(see also"default-fcc="variable.) #I2z#F N-|_
    fcc-name-rule=
2E/SD1V#U     # Sets presentation order of messages in Index. Choices:
} a*eZ0S3W7G     # subject,from,arrival,date,size.Default:"arrival". "ZP8Q7pZ:k mvo
    sort-key=
],ksVyST/_N     # Sets presentation order of address book entries.Choices:dont-sort, +P9ID I4k7@SO;i
    # fullname-with-lists-last,fullname,nickname-with-lists-last,nickname A Z;S]#Q"v7C;O2q
&nbs, p;   # Default:"fullname-with-lists-last". FB D3V$k v5r.I4W0YA M
    addrbook-sort-rule=
Z f:~2[;|+[ p4@     # Sets presentation order of folder list entries.Choices: ,p9v*U)z(EUr2K1F
    # 0p(E(q3LeB)o
    # Default:"alpha-with-directories-last". #CN'j$L&NS
    folder-sort-rule=
TS,_ l1q7iFQ     # Sets the default folder and collection lffered at the Goto Command's prompt. jS+Pv{ h
    goto-default-rule=
k.p(k4W,\#bx7_6|%P3{     # Sets message which cursor begins on.Choices:first-unseen,first-recent, h/W y D:v`J
    # first,last.Default:"first-unseen".
V/k,s4iA%{.I     incoming-startup-rule= ,AI&J2iM)W2P#W4jm)y
    # Reflects capabilities of the display you have.Default:US-ASCII. K:f7YW c2ZZ
    # Typical alternatives include ISO-8859-x(x is a number between 1 and 9). :_ Uf9lUk-PH
    character-set=
a+r*q8o2^4?     # Specifies the program invoked by^_in the Composer,
chUV4e'Vc&a     # or the"enable-alternate-editor-implicitly"feature.
U#X#DRl]3P     editor= Pe jSq
    # Specifies the program invoked by ^T in the Composer. X*r um.{hI
    speller= Kp.?_PB0bOb
    #  Specifies the column of the screen where the composer should wrap.
{~M0v%`@#{)i(ox}0?     composer-wrap-column=
%M$_uMH     #  SPecifies the string to insert when replying to a message. #FK/Bj)V;u6sx1SB$C
    reply-indent-string=
m tc)x.O:A;o+p     #  Specifies the introduction to insert when replying to message. .E/`t+~h9Oq
    reply-lisdin= 6G;w`FJ*t3c:o#j x
    #  Specifies the string to use when sending a message with no to or cc. "]F4Vy;s+P"w%e H
    empty-header-message= ONw?5Rg-vJ)}
    #  Program to view images(e.g. GIF or TIFF attachments).
M2|&g'H.NO4jJr)A$g     Image-viewer= Lm6^+B;C_2i6m
    #  If"user-domain"not set,strips hostname in FROM address.(Unix only) Oo2DL9M
    use-only-domain-name=
TP&JI2tQgg/s     #  Your default printer selection n%I ["P_v
    printer=
3W G bD.R:k     #  List of special Print commands g~ol&~B
    personal-print-command= @S i uM+Dd
    #  Which category default print command is in 2J3O)~ DT\-J
    personal-print-category= r7Mb6hOz
    #  Set by Pine;controls beginning-of-month sent-mail pruning. t(uT#P+T/~M%P0A
    last-time-prune-questioned=99.11
.yTy;ZO~+JNq W     #  Set by Pine;controls display of"new version"message. %x,q%J E9M:F
    last-version-used=4.10 VYR`wT(g$H u4J
    #  This names the path to an alternative program,and any necessary arguments,
m D {kHT1b     #  to be used in posting mail messages.Example: TL ?)\;Ig$T'FL@#g
    #                          /usr.lib/sendmail -oem -t -oi
+yAz.C+l;] U+U     #  or, "v8VJy,~GZ4AK1D;a
    #                          /usr/local/bin/sendit.sh i!nh:?+^
    #  The latter a script found in Pine distribution's contrib/util directory.
\F0jF#ny]YOpXg     #  NOTE:The program MUST read the message to be posted on standard input, UB+` QE
    #            AND operate in the style of sendmail's"-t"option.
%_"rg;e}_"ut9LR G sendmail-path=[/td][/tr][/table]

頁: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.