sendmail 在它的配置中使用相當復雜的規則系統。在你掌握許多配置竅門之前,通過手工寫一個 sendmail.cf
文件很不常見并且耗費大量時間。如果你對此感興趣,你可以停止閱讀本文而去看 O'Reilly 的 "Bat Book" 。
取代使用手工配置的方法,我們使用 m4
宏處理器將預定義好的文件生成你的配置文件,這些預定義文件隨 sendmail 的發行版本一并提供。
請看文件 sendmail.mc
的第一行:
include(/usr/lib/sendmail.cf/m4/cf.m4) VERSIONID(`sendmail.mc - roessler@guug.de') OSTYPE(debian) define(`ALIAS_FILE',`/etc/mail/aliases')
在第一行, cf.m4
被包含進來。這個 m4 宏文件包含了其它部分將用到的許多宏定義。 確定你提供的路徑是正確的 -
在我們這個例子中提供的這個路徑是Debian GNU/Linux的典型路徑。 OSTYPE
宏被用來給出一些非常有用的當前配置的缺省值。
如果你不是使用Debian系統,你可以將這里的 "debian" 換成 "linux" 。 ALIAS_FILE
告訴 sendmail 到哪里去找到 aliases 文件。
以下几行告訴 sendmail 使用 genericstable
特點和到哪里去找到使用該特點的配置文件:
FEATURE(masquerade_envelope) FEATURE(genericstable, `hash -o /etc/mail/genericstable') GENERICS_DOMAIN_FILE(`/etc/mail/genericsdomain')
masquerade_envelope
特點告訴 sendmail 去實現郵頭重寫到郵件的信封 傳送者。
這是一個外部郵件投遞系統將用來直接投遞失敗報告和警告郵件的郵件地址。generics*
文件將在下面解釋。
現在,我們必須定義一個所謂 smart 主機,就是將要負責為你的系統傳送外部郵件的主機。 注意:這台主機有可能不是你的ISP的POP和IMAP服務器。 如果對此不太清楚,聯系你的ISP供應商。 主配置文件的代碼如下:
define(`SMART_HOST',`mail-out.your.provider')
請替換 mail-out.your.provider 成你的ISP的主機地址。
最后兩行包含 "mailer" 定義,sendmail 根據這些定義才能知道如何處理不同類型的郵件:
MAILER(local) MAILER(smtp)
為了從這個 sendmail.mc
生成 sendmail.cf
文件,輸入以下命令 (作為 root 用戶):
# m4 sendmail.mc > _sendmail.cf # mv -f _sendmail.cf sendmail.cf
注意我們使用的技朮:將 m4
的輸出寫入一個臨時文件,再轉移到合適的地方。這將幫助我們避免sendmail讀入只寫了一部分的配置文件。
首先,我們必須告訴sendmail哪些地址將被認為是本地地址(然后將被重寫)。這很簡單:只要將你的機器的完整主機名放入文件 /etc/mail/genericsdomain
。
為了取得你的機器的完整主機名,輸入以下命令:
$ hostname -f
現在,讓我們看一下重寫表:
/etc/mail/genericstable
。這個文件由被空格分開的兩列組成。第一列包含本地地址,第二列包含替換后的郵件地址。
文件看起來如下:
harry harryx@your.isp maude maudey@her.isp root fredx@your.isp news fredx@your.isp
注意每一個本地機器上的賬號都要有一行,這樣自動生成的外發郵件能帶上正確的頭信息。
為了性能的考慮, sendmail 并不直接使用這個文本文件,而是用“哈希”版本替代。為了生成這個版本,輸入以下命令:
# makemap -r hash genericstable.db < genericstable
注意: genericstable
指定的重寫規則將不 作用在本地郵件或你從外部接收到的郵件 - 這種轉換只使用在從你本地機器通過你的ISP主機發往外部的郵件。
別名文件包含只對你本地郵件有效的附加本地名字。這對管理員賬號象 root
非常有用,從你的系統接收自動轉換來的郵件。
/etc/mail/aliases
可能如下所示:
root: fred news: root postmaster: root mail: root www: root nobody: /dev/null MAILER-DAEMON: nobody
這個例子將路由送往 root
, news
, postmaster
, mail
, 和 www
用戶的本地郵件到 fred
,
而送往 nobody
和 MAILER-DAEMON
的郵件將重定向到 /dev/null
。
就象 genericstable
, aliases
可能包含許多 項。因此,就象我們上面所說的,sendmail直接使用文本文件將效率低下。
aliases
采用和 genericstable
同樣的機制:生成一個哈希數據庫。
取代直接使用 makemap
,這次你可以輸入命令 newaliases
。它將自動處理所需的一切。