sendmail.cf 及 submit.cf 檔案

用途

包含 sendmail 指令的配置資訊。

說明

/etc/mail/sendmail.cf 配置檔及 /etc/mail/submit.cf 配置檔包含 sendmail command.These 檔案包括主機名稱及網域等資訊,以及 sendmail 規則集。

配置檔會執行下列功能:

  • 儲存執行中郵寄程式類型的相關資訊。
  • 定義 sendmail 指令如何在訊息中重新編寫位址。
  • 定義 sendmail 指令在下列環境中的運作方式:
    • 本端郵件遞送
    • 使用 TCP/IP 的區域網路遞送
    • 使用基本公用程式網路 (BNU) 進行遠端遞送

如果您的環境只包含這些類型的郵件傳送,您可以使用所提供的 /etc/mail/sendmail.cf 檔案或 /etc/mail/sendmail.cf 檔案,只要少量 (如果有的話) 變更即可。

附註: AIX® 版本 AIX 7 (含 7200-03 及更早版本) 已針對 sendmail 指令使用 sendmail.cf 配置檔。 從 AIX 版本 AIX 7 開始,已安裝 7200-04 兩個配置檔 sendmail.cfsubmit.cf 。 依預設, sendmail 指令會使用 submit.cf 配置檔。 為了與舊版 sendmail 指令相容,存在 sendmail.cf 檔案。 下列資訊同時適用於 sendmail.cfsubmit.cf 配置檔。

控制行

配置檔由一系列控制行組成,每一個控制行都以單一字元開始,定義如何使用其餘行。 以空格或 Tab 鍵開頭的行是接續行。 空白行及以 # (井號) 開頭的行是註解。 控制線用於定義:

下面將詳細討論這些控制線路類型中的每一種。

重新編寫規則

sendmail 指令會接收多種不同格式的位址,因為不同的郵寄程式會使用不同的格式來遞送郵件訊息。 sendmail 指令會將位址變更為遞送所使用郵寄程式之訊息所需的格式。 若要執行此轉換, sendmail 指令會使用配置檔中定義的一組重寫規則或 規則集。 重新編寫規則具有下列格式:

Snumber
Rbefore          after

其中number是大於或等於零的整數,指出這是哪一個規則集,且beforeafter是代表特定字元型樣的符號表示式。 開頭為R表示重新撰寫表示式before因此它具有與表示式相同的格式after. Sendmail 會掃描一組重新編寫規則,以尋找規則左側 (LHS) 的相符項。 當規則相符時,規則的右側 (RHS) 會取代位址。

附註: 之間必須至少有一個 TAB 字元 (ASCII 代碼 0x09)beforeafter/etc/mail/sendmail.cf 檔案及 /etc/mail/submit.cf 檔案的區段。 因此,任何將 TAB 字元轉換成一系列空格 (ASCII 碼 0x20) 的編輯器都不能用來編輯 sendmail.cfsubmit.cf 檔案。 例如, GNU eMacs 編輯器可能會毀損 sendmail.cf 檔案及 submit.cf 檔案,但 vi 編輯器不會。

使用 sendmail 指令安裝的 /etc/mail/sendmail.cf/etc/mail/submit.cf 檔案包含足夠的規則,可使用網域位址結構執行 BNU 及 TCP/IP 網路的轉換。 除非連接至使用不同定址方法的系統,否則您應該不需要變更這些規則。

讀取配置檔時,會執行格式為 $x 的巨集擴充。 Expansions of the form $&x are performed at run time, using a somewhat less general algorithm. 此表單僅適用於參照在執行時期變更的內部定義巨集 (例如 $h)。

重新編寫規則的左側 (LHS)

重寫規則的左側包含型樣。 一般單字直接相符。 使用錢幣符號來引進 Metasyntax。 metasymbols 為:

Metasymbol 意義
$* 符合零個以上記號
$+ 符合一或多個記號
$- 只符合一個記號
$=x 符合類別 x 中的任何詞組
$~x 比對不在類別 x 中的任何單字

如果有任何相符項,則會將它們指派給符號 $n ,以在右側進行取代,其中 n 是 LHS 中的索引。 例如,如果 LHS:

$-:$+

套用至輸入:

UCBARPA:linda

規則將會符合,而傳遞至 RHS 的值將會是:

$1  UCBARPA
$2  linda

重寫規則的右側 (RHS)

當重新編寫規則的左側相符時,會刪除輸入並由右側取代。 除非記號以錢幣符號開頭,否則會直接從 RHS 複製。 Metasymbols 為:

Metasymbol 意義
$n 從 LHS 替換無限期記號 n
$[名稱$] 標準化名稱
$(map key$@arguments $:default $) 一般性索引對映函數
$>n 「呼叫」規則集 n
$#郵寄程式 解析為郵寄程式
$@主機 指定主機
$:使用者 指定使用者

$n 語法會替換 LHS 上 $+$-$*$=$~ 相符項中的對應值。 它可以在任何地方使用。

在主機資料庫中查閱以 $[和 $] 括住的主機名稱,並以標準名稱取代。 例如, $[merlin] 可能變成 merlin.magician ,而 $[[128.32.130.2]$] 會變成 king.arthur

$( ... $) 語法是更一般的查閱形式; 它使用具名對映而非隱含對映。 如果找不到查閱,則會插入指出的預設值; 如果未指定預設值且沒有查閱相符項,則該值保持不變。 引數會傳遞至對映,以供可能使用。

$> n 語法會導致照常替換行的其餘部分,然後作為引數傳遞至規則集 n。 規則集 n 的最終值會變成此規則的替代。 $> 語法只能在右側的開頭使用; 前面只能有 $@ 或 $:。

$# 語法應該只在規則集零或規則集零的子常式中使用。 它會導致規則集的評估立即終止,並向 sendmail 發出位址已完全解決的信號。 完整語法如下:

$#mailer $@host $:user

這會指定引導郵寄程式所需的 {mailer, host, user} 3 值組。 如果郵寄程式是本端,則可以省略主機部分。 郵寄程式必須是單一字組,但主機和使用者可能是多組件。 如果郵寄程式是內建 IPC 郵寄程式,則主機可以是以冒號區隔的主機清單,以搜尋第一個工作位址,與 MX (機器交換) 記錄完全相同。 使用者稍後會由郵寄程式特定的封套重新編寫集重新編寫,並指派給 $u 巨集。 在特殊情況下,如果 $# 的值是 "local" ,且 $: 值的第一個字元是 "@" ,則會除去 "@" ,並在位址描述子中設定旗標,使 sendmail 不執行規則集 5 處理。

通常會重試符合的規則,亦即,規則會迴圈直到失敗為止。 RHS 之前也可能有 $@ 或 $: ,以變更此行為。 $@ 字首會使規則集傳回 RHS 的其餘部分作為值。 $: 字首會導致規則立即終止,但規則集會繼續; 這可用來避免繼續套用規則。 在繼續之前,會先除去字首。

$@ 和 $: 字首可以在 $> 規格之前。 例如:
R$+  $: $>7 $1

符合任何項目,將該項目傳遞至規則集 7 ,並繼續; $: 是避免無限迴圈的必要項目。

替代會依照說明的順序進行; 亦即,替換 LHS 中的參數、標準化主機名稱、呼叫 "subroutines" ,最後處理 $#、$@ 及 $:。

重新編寫規則集的語意

有五個重寫集具有特定的語意。

規則集三應該將位址轉換成「標準形式」。 此表單應該具有基本語法:
local-part@host-domain-spec

在使用任何位址執行任何動作之前, sendmail 會先套用規則集 3。

如果未指定 "@" 符號,則可以從傳送端位址 (如果在對應傳送端郵寄程式的郵寄程式定義中設定 C 旗標) 附加 host-domain-spec ("Rewrite set 語意" 中的方框 "D")。

規則集 0 在規則集 3 之後套用至將實際指定收件者的位址。 它必須解析為 {mailer, host, user} 三項值。 郵寄程式必須從配置檔定義在郵寄程式定義中。 主機定義至 $h 巨集,以在指定郵寄程式的 argv 擴充中使用。

IPC 郵寄程式

如果規則集零解析為 IPC 郵寄程式 (亦即,將 "[IPC]" 列為 M 配置行中「路徑」的郵寄程式) ,則會進行一些特殊處理。 在 "$@" 之後傳遞的主機名稱已執行 MX 擴充; 這會在 DNS 中尋找名稱以尋找替代遞送網站。

主機名稱也可以提供為帶點四軸,並以方括弧括住; 例如:

[128.32.149.78]

這會導致將數值直接轉換為 TCP/IP 主機位址。

在 "$@" 之後傳入的主機名稱也可以是以冒號區隔的主機清單。 每一個分別展開 MX ,並將結果連結成 (基本上) 一個長 MX 清單。 這裡的目的是針對專用內部網路建立未在 DNS 中發佈的「偽造」MX 記錄。

在最後一個特殊情況下,主機名稱可以用方括弧 ([]) 將字串傳入:
[any.internet.addr]
如果針對選取的遞送代理程式設定 F=0 旗標,則此表單會避免 MX 對映。
附註: 這僅適用於您有網路 防火牆 (控制外部網路與私密網路之間存取的系統或機器) 或其他主機將對所有郵件執行特殊處理的狀況,以便 MX 記錄指向閘道機器。 然後,此機器可以直接遞送至本端網域內的機器。 使用此特性直接違反 RFC 1123 5.3.5: 小節,不應輕易使用它。

sendmail.cf 檔案及 submit.cf 檔案中的巨集

sendmail 指令會解譯 /etc/mail/sendmail.cf 檔案及 /etc/mail/submit.cf 檔案中的巨集。 巨集是代表值或字串的符號。 巨集是由D/etc/mail/sendmail.cf 檔案及 /etc/mail/submit.cf 檔案中的指令。

D-定義巨集

巨集以單一字元或 {braces}中的單字來命名。 單一字元名稱可以從整個 ASCII 集中選取,但使用者定義巨集只能從大寫字母集中選取。 內部使用小寫字母和特殊符號。 以小寫字母或標點符號字元開頭的完整名稱保留給 sendmail使用,因此使用者定義的完整巨集名稱應該以大寫字母開頭。

巨集定義的語法如下:
Dxval

其中x是巨集的名稱 (可能是單一字元或大括弧中的單字) ,且val是它應該擁有的值。 給定的空格不應該實際屬於巨集值。

使用建構 $x 來插入巨集,其中 x 是要插入的巨集名稱。 此插補在讀取配置檔時完成,但 M 行除外。 The special construct $&x can be used in R lines to get deferred interpolation.

可以使用下列語法來指定條件式:
$?x text1 $| text2 $.

如果已設定巨集 $x ,則這會插入 text1 ,否則會插入 text2 。 可以省略 "else" ($|) 子句。

小寫巨集名稱保留為具有特殊語意,用來傳入或輸出 sendmail,並保留特殊字元以提供條件等。 大寫名稱 (即 $A 到 $Z) 特別保留給配置檔作者。

sendmail 會在內部定義及/或使用下列巨集,以針對郵寄程式或其他環境定義插入 argv 的值。 標示 - 的是傳入 sendmail的資訊,標示 = 的是傳入及傳入 sendmail的資訊,而未標示的巨集則會傳入 sendmail ,但不會在內部使用:

巨集 確立
$_ RFC1413-validation 及 IP 來源路徑 (V8.1 及以上版本)。
$a RFC822 格式的原始日期。
${auth_authen} 由鑑別決定的用戶端鑑別認證 (只有在成功時才設定)。 格式視使用的機制而定,可能只是 使用者user@realm,或類似 (僅限 SMTP AUTH)。
${auth_author} 授權身分,即 SMTP MAIL 指令的AUTH=參數 (如果提供的話)。
${alg_bits} 用於 TLS 連線的對稱加密演算法的金鑰長度上限 (以位元為單位)。 對於匯出控制演算法,這可能小於儲存在 ${cipher_bits}中的有效金鑰長度。
${addr_type} 目前正在重新編寫的位址類型。 此巨集最多包含三個字元,第一個字元是 Eh (表示封套/標頭位址) ,第二個字元是空格,第三個字元是 sr (表示寄件者/收件者位址)。
${auth_type} 用於 SMTP 鑑別的機制 (只有在成功時才設定)。
$b RFC822 格式的現行日期。
$(bodytype) ESMTP BODY 參數。
$B BITNET 中繼。
$c 中繼站數。
$(client_addr) 連接主機的 IP 位址。
${cert_issuer} 簽署所提供憑證 (憑證發證者) (僅限 STARTTLS) 之 CA (憑證管理中心) 的 DN (識別名稱)。
${cert_md5} 所呈現憑證的 MD5 雜湊 (僅限 STARTTLS)。
$(client_name) 連接主機的標準名稱。
$(client_port) 連接主機的埠名稱。
$(client_resolve) 保留 $(client_name)的 resolve 呼叫結果。
${cert_subject} 所呈現憑證的 DN (稱為憑證主體) (僅限 STARTTLS)。
$(currHeader) 以引號內的字串形式的標頭值。
${cipher} 用於連線的密碼組合,例如 EDH-DSS-DES-CBC3-SHA、EDH-RSA-DESCBC-SHA、 DES-CBC-MD5和 DES-CBC3-SHA (僅限 STARTTLS)。
${cipher_bits} 用於 TLS 連線之對稱加密演算法的有效金鑰長度 (以位元為單位)。
${client_connections} SMTP 伺服器中用戶端 IP 位址的開啟連線數。
${client_flags} 「 ClientPort選項」的「修飾元 = 部分」指定的旗標,其中旗標會以空格隔開,而大寫旗標會加倍。 亦即,在 ${client_flags}中, Modifier =hA 以 h AA表示,這是測試規則集中的旗標所需要的。
${client_ptr} 用戶端 IP 位址的 PTR 查閱結果。
附註: 當且僅當 ${client_resolve} 正常時,此與 ${client_name} 相同。 這僅定義在 SMTP 伺服器中。
${client_rate} 在 ConnectionRateWindowSize指定的時間間隔內,用戶端 IP 位址的送入連線數。
${client_resolve} 保留 ${client_name}的 resolve 呼叫結果。 可能的值為:
  • 確定: 已順利解決
  • FAIL: 永久查閱失敗
  • 偽造: 正向查閱不符合反向查閱
  • TEMP: 暫時查閱失敗
這僅定義在 SMTP 伺服器中。 sendmail 指令會對連接用戶端的 IP 位址執行主機名稱查閱。 接下來會查閱該主機名稱的 IP 位址。 如果用戶端 IP 位址未出現在該清單中,則會偽造主機名稱。 這會反映為 ${client_resolve}的值「偽造」,而且在 $_ 中也會顯示為 (可能是偽造的)
${cn_issuer} 簽署所呈現憑證之 CA 的 CN (通用名稱) (僅限 STARTTLS)。
附註: 如果無法適當地擷取 CN ,則會根據發生的錯誤,將它取代為下列其中一個字串:
BadCertificateContainsNUL. The CN contains a NULL character
BadCertificateTooLong CN is too long
BadCertificateUnknown CNcould not be extracted
在最後一個案例中,發生一些其他 (非特定) 錯誤。
${cn_subject} 所提供憑證 (僅限 STARTTLS) 的 CN (通用名稱)。 如需可能的取代項目,請參閱 ${cn_issuer}
${currHeader} 以引號括住的字串 (可能截斷為 MAXNAME) 的標頭值。 這個巨集只能在標頭檢查規則集中使用。
$C DECNet 中繼的主機名稱 (m4 技術)。
enrealThe 現行日期,採用 UNIX ® (ctime) (3) 格式。
$(daemon_addr) 常駐程式用來接聽連線的 IP 位址。 除非已設定 DaemonPort選項 ,否則這將是 0.0.0.0
$(daemon_family) 如果常駐程式正在接受網路連線,則這是網路系列。
$(daemon_flags) 常駐程式的旗標,如 DaemonPortOptions 的 Modifiers = part 所指定,其中旗標會以空格隔開,而大寫旗標會加倍。
$(daemon_info) 以字串形式顯示常駐程式的相關資訊。 例如, SMTP+queueing@00
$(daemon_name) 來自 DaemonPort選項 Name = 子選項的常駐程式名稱。 如果未使用此子選項,則預設值將設為常駐程式#,其中 # 是常駐程式號碼。
$(daemon_port) 常駐程式接受連線的埠。 除非設定 DaemonPortOptions ,否則這很可能設為預設值 25
$(deliveryMode) sendmail使用的現行遞送模式。
$e 已作廢。 已改用 SmtpGreeting訊息 選項。
$(envid) 原始 DSN 封套 ID。
$E X400 relay (unused) (m4 技術)。
$f 寄件者的位址。
$F 傳真中繼 (m4 技術)。
$g 相對於收件者的寄件者位址。
$h 收件者位址的主機部分。
${hdrlen} 儲存在 ${currHeader} 中的標頭值長度 (在可能的截斷之前)。 如果此值大於或等於 MAXNAME ,則已截斷標頭。
${hdr_name} 已呼叫現行標頭檢查規則集的標頭欄位名稱。 這對於預設標頭檢查規則集取得標頭名稱很有用; 巨集只適用於標頭檢查規則集。
$H 郵件中心 (m4 技術)。
$(hdrlen) 標頭值的長度,儲存在 $(currHeader)中。
$(hdr_name) 已呼叫現行標頭檢查規則集的標頭欄位名稱。
$i 佇列 ID。
$(if_addr) 送入連線介面的 IP 位址,除非它位於迴圈網路中。
${if_addr_out} 送出連線介面的 IP 位址,除非它位於迴圈網路中。 IPv6 位址會在位址之前加上 IPv6: 標籤。
${if_family} 送入連線介面的 IP 系列,除非它位於迴圈網路中。
${if_family_out} 送出連線介面的 IP 系列,除非它位於迴圈網路中。
$(if_name) 送入連線介面的名稱。
${if_name_out} 送出連線的介面名稱。
$j= 官方標準名稱。
$k UUCP 節點名稱 (V8.1 及以上版本)。
${load_avg} 現行負載平均值。
${msg_id} Message-Id: 標頭的值。
${msg_size} SIZE= 參數的值,通常是在收集訊息之前的訊息大小 (在 ESMTP 對話框中) ,之後由 sendmail 指令計算的訊息大小。
${nbadrcpts} 單一訊息的不正確收件者數目。
${nrcpts} 單一訊息的已驗證收件者數目。
附註: 由於收件者驗證在呼叫 check_rcpt 之後發生,因此此規則集中的值比預期的值少 1。
${time} 時間 (3) 函數的輸出,即自世界標準時間 (UTC) 1970 年 1 月 1 日 0 小時 0 分 0 秒以來的秒數。
${tls_version} 用於連線的 TLS/SSL 版本,例如,使用 STARTTLS 之後定義的 TLSv1、 SSLv3及 SSLv2; 。
${total_rate} 在連線-RateWindow大小指定的時間間隔內,送入連線的總數。
${verify} 所呈現憑證的驗證結果,僅在使用 (或嘗試) STARTTLS 之後才定義。 可能的值為:
  • 確定: 驗證成功。
  • No: Nocert p呈現。
  • NOT: 未要求憑證。
  • FAIL: 憑證已呈現但無法驗證,例如,遺漏簽署 CA。
  • NONE: 尚未執行 STARTTLS。
  • TEMP: 發生暫時錯誤。
  • PROTOCOL: 發生某個通訊協定錯誤。
  • 軟體 STARTTLS: 信號交換失敗,這是此階段作業的嚴重錯誤,電子郵件已排入佇列。
巨集 確立
$l 已作廢。 請改用 UnixFromLine 選項。
$L 本端使用者中繼 (m4 技術)。
$m DNS 網域名稱 (V8.1 及以上版本)。
$M 我們假冒的對象 (m4 技術)。
$(mail_addr) 提供給 SMTP MAIL 指令之位址的已解析三項值的位址部分。
$(mail_host) 來自 SMTP MAIL 指令所給定位址的已解析三項值的主機。
$(mail_mailer) 來自針對 SMTP MAIL 指令所給定位址的已解析三項值的郵寄程式。
$n 錯誤訊息寄件者。
$(ntries) 遞送嘗試次數。
$o 已作廢。 請改用 OperatorChars 選項。
$opMode 啟動作業模式 (V8.7 及以上版本)。
$p sendmail 程序 ID。
$q- 寄件者位址的預設表單。
$(queue_interval) -q 旗標中定義的佇列執行間隔。
$r 使用的通訊協定。
$R 不完整名稱的中繼 (m4 技術)。
$(rcpt_addr) 提供給 SMTP RCPT 指令之位址的已解析三項值的位址部分。
$(rcpt_host) 來自 SMTP RCPT 指令所給定位址的已解析三項值的主機。
$(rcpt_mailer) 來自針對 SMTP RCPT 指令所給定位址的已解析三項值的郵寄程式。
寄件者的主機名稱。
$S 智慧型主機 (m4 技術)。
$(server_addr) 現行送出 SMTP 連線的伺服器位址。
$(server_name) 現行送出 SMTP 連線的伺服器名稱。
$t 現行時間 (以秒為單位)。
$u 收件者的使用者名稱。
$U 要置換 $k 的 UUCP 名稱。
$v sendmail 程式的版本。
$V UUCP 中繼 (適用於類別 $= V) (m4 技術)。
$w 此主機的簡稱。
$W UUCP 中繼 (針對類別 $= W) (m4 技術)。
$x 寄件者的完整名稱。
$X UUCP 中繼 (適用於類別 $= X) (m4 技術)。
$y 收件者的起始目錄。
$z 控制 TTY 的名稱。
$Y 未分類主機的 UUCP 中繼。
$z 收件者的起始目錄。
$Z 此 m4 配置的版本 (m4 技術)。

可以使用三種日期類型。 $a$b 巨集採用 RFC 822 格式; $a 是從訊息的 "Date:" 行中擷取的時間 (如果有的話) ,而 $b 是現行日期和時間 (用於郵戳)。 如果在送入訊息中找不到 "Date:" 行,則 $a 也會設為現行時間。 巨集相當於 UNIX (ctime) 格式的 $b 巨集。 $t 巨集是現行時間 (以秒為單位)。

巨集 $w$j$m 設為此主機的身分。 Sendmail 會嘗試尋找主機的完整名稱 (如果可能的話); 其作法是呼叫 gethostname (2) 以取得現行主機名稱,然後將該主機名稱傳遞至 gethostbyname (3) ,它應該會傳回該主機名稱的標準版本。 假設這是成功的, $j 會設為完整名稱,而 $m 會設為名稱的網域部分 (第一個點之後的所有項目)。 如果您有層次 5 或更高層次的配置檔,則 $w 巨集會設為第一個單字 (第一個點之前的所有項目); 否則會設為與 $j相同的值。 如果標準化失敗,則配置檔必須將 $j 設為完整網域名稱。

$f 巨集是最初決定的寄件者 ID; 當郵寄至特定主機時, $g 巨集會設為相對於收件者的寄件者位址。 例如,如果使用者傳送至king@castle.com從機器vangogh.painter.com$f 巨集將vincent$g 巨集將vincent@vangogh.painter.com.

$x 巨集會設為傳送端的完整名稱。 這可以透過數種方式來決定。 它可以作為旗標傳遞至 sendmail。 它可以定義在 NAME 環境變數中。 第三個選項是標頭中 "Full-Name:" 行的值 (如果存在的話) ,第四個選項是 "From:" 行的註解欄位。 如果所有這些失敗,且訊息是在本端產生,則會在 /etc/passwd 檔案中查閱完整名稱。

傳送時, $h$u$z 巨集會設為收件者的主機、使用者和起始目錄 (如果在本端)。 前兩個分別從重新編寫規則的 $@$: 部分設定。

$p$t 巨集用來建立唯一字串 (例如,針對 "Message-Id:" 欄位)。 $i 巨集會設為此主機上的佇列 ID; 如果放入時間戳記行中,則有助於追蹤訊息。 $v 巨集會設為 sendmail的版本號碼; 這通常會放在時間戳記中,且經過證明對除錯很有用。

$c 欄位設為「躍點計數」,亦即,已處理此訊息的次數。 這可以由指令行上的 -h 旗標或計算訊息中的時間戳記來決定。

$r 欄位會設為用來與 sendmail 通訊的通訊協定,以及傳送端主機名稱。 可以使用 -p 指令行旗標來一起設定,也可以單獨使用 -M-oM 旗標來設定。

$_ 設為已驗證的傳送端主機名稱。 如果傳送端正在執行符合 RFC 1413 標準的 IDENT 伺服器,且接收端已開啟 IDENT 通訊協定,則它將包括該主機上的使用者名稱。

$(client_name)$(client_addr)$(client_port) 巨集會設為作為伺服器呼叫 sendmail 之連接主機的名稱、位址及埠號。 這些可以在 check_ * 規則集中使用 (使用 $& 延遲評估表單)。

變更網域名稱巨集

網域名稱巨集 DD指定本端主機群組的完整網域名稱。 網域名稱巨集的格式為DD後面最多接著四個以句點區隔的名稱,例如:
DDname1.name2.name3.name4

可以透過 主機名稱 指令自動設定此巨集。 sendmail 指令會讀取已使用 主機名稱 指令設定的內容,並使用它來起始設定主機和網域巨集及類別。 只有在您想要 sendmail 主機和網域名稱與 主機名稱 指令所設定的主機和網域名稱不同時,才需要變更配置檔巨集。

如果要變更網域名稱巨集,請執行下列動作:

  1. 輸入指令:
    vi /etc/mail/sendmail.cf
  2. 尋找以開頭的行DD.
  3. 取代下列項目DD網域名稱。 例如,如果您的網域名稱是newyork.abc.com,輸入:
    DDnewyork.abc.com
  4. 儲存檔案並結束編輯器。

變更主機名稱巨集

主機名稱巨集 Dw指定在您產生的所有訊息的回覆位址中使用的主機系統名稱。 主機名稱巨集的格式是 Dw ,後面接著這部機器的主機名稱,例如:

Dwhostname

依預設, sendmail 指令會讀取已使用 主機名稱 指令設定的內容,並使用它來起始設定主機及網域名稱巨集和類別。 只有在您想要 sendmail 指令主機及網域名稱不同於 主機名稱 指令所設定的名稱時,才變更配置檔巨集。

如果要變更主機名稱巨集,請執行下列動作:

  1. 輸入指令:
    vi /etc/mail/sendmail.cf
  2. 尋找以開頭的行Dw.
  3. 取代下列項目Dw使用您的主機名稱。 例如,如果您的主機名稱是brown,輸入:
    Dwbrown
  4. 儲存檔案並結束編輯器。
    附註: 如果已定義 Dw 巨集,您也必須定義 CW (hostname) 類別。

修改 sendmail.cf 檔案及 submit.cf 檔案

在修改 /etc/mail/sendmail.cf 檔案或 /etc/mail/submit.cf 檔案之前,請製作備份副本。 執行下列指令來執行此動作:
cp /etc/mail/sendmail.cf /etc/mail/sendmail.cf.working
cp /etc/mail/submit.cf /etc/mail/submit.cf.working

如果您所做的變更導致郵件系統無法正常運作,您可以回到使用 /etc/mail/sendmail.cf 檔案或您知道運作的 /etc/mail/submit.cf 檔案的副本。

您可以使用您喜愛的文字編輯器來修改安全檔案。 不過,有些編輯器會將定位點儲存成它們所代表的空格數,而不是定位點字元本身。 如果將定位點字元定義為規則集中的欄位分隔字元,這可能會導致非預期的結果。 請使用 vi 編輯器來避免此問題,或使用 J 選項變更欄位分隔字元。 (為了方便參照,這項討論假設您使用 vi 編輯器來修改配置檔。)

變更 /etc/mail/sendmail.cf 檔案或 /etc/mail/submit.cf 檔案中的任何資訊之後,您必須指示常駐程式重新讀取該檔案。 如需這些指示,請參閱 讓 Sendmail 常駐程式重新讀取配置資訊 一節。

讓 Sendmail 常駐程式重新讀取配置資訊

變更配置檔之後,請指示常駐程式重新讀取檔案。 如果您使用 startsrc 指令啟動 sendmail 指令,請輸入下列指令:

refresh -s sendmail
或者,如果您使用 /usr/sbin/sendmail 指令啟動 sendmail 常駐程式,請輸入下列指令:
kill -1 `cat /etc/mail/sendmail.pid`

這兩個指令都會導致常駐程式重新讀取 /etc/mail/sendmail.cf 檔案、 /etc/mail/submit.cf 檔案、 /etc/mail/aliases 檔案及 /etc/sendmail.nl 檔案。

別名資料庫

別名資料庫以兩種形式存在。 一種是文字格式,在檔案 /etc/mail/aliases中維護。 別名的格式如下:
name: name1, name2, ...
只能建立本端名稱的別名。 例如:
linda@cloud.ai.acme.org: linda@CS.

有想要的效果。 別名可以透過以空格或 Tab 鍵開始任何接續行來繼續。 空白行及以井號 (#) 開頭的行是註解。

第二個表單由新的資料庫管理程式 (NDBM) 或 Berkeley DB 檔案庫處理。 此表單位於檔案 /etc/mail/aliases.db (如果使用 NEWDB) 或 /etc/mail/aliases.dir/etc/mail/aliases.pag (如果使用 NDBM)。 這是 sendmail 實際用來解析別名的格式。 此技術用來增進效能。

服務開關會設定搜尋順序的控制項。 下列項目
AliasFile=switch:aliases
一律新增為第一個別名項目。 將使用不含類別的第一個別名檔名 (例如,前端沒有 nis ) 作為別名參數中 "files" 項目的檔案名稱。 例如,如果配置檔包含
AliasFile=/etc/mail/aliases
且服務交換器包含
aliases nis files nis

則會先在 NIS 資料庫中搜尋別名,然後在 /etc/mail/aliases中搜尋別名。

重建別名資料庫

可以執行下列指令來明確重建資料庫的 DB 或 DBM 版本:
newaliases
這相當於提供 sendmail -比 旗標:
/usr/sbin/sendmail -bi

如果在配置中指定 RebuildAliases 選項,當別名資料庫過期時, sendmail 會自動重建別名資料庫 (如果可能的話)。 在具有大型別名檔的大量載入機器上,自動重建可能是危險的。 如果重建資料庫可能需要超過重建逾時 (選項 AliasWait,通常是五分鐘) ,則數個處理程序可能會同時啟動重建處理程序。

如果您指定多個別名資料庫, -比 旗標會重建所有資料庫類型。 例如, II 瞭解它可以重建 NDBM 資料庫,但不能重建 NIS 資料庫。

別名資料庫的潛在問題

別名資料庫可能會發生一些問題。 它們都是從 sendmail 處理程序存取 DBM 版本所產生,而 DBM 版本僅部分建置。 在兩種情況下可能發生此情況: 一個處理程序在另一個處理程序重建資料庫時存取資料庫,或者在完成重建之前重建資料庫的處理程序當掉 (因為被結束或系統損毀)。

Sendmail 有三種技術可嘗試緩解這些問題。 首先,它會在重建資料庫時忽略岔斷; 這可避免有人中斷處理程序離開局部重建資料庫的問題。 其次,它會在重建期間鎖定資料庫來源檔,但在 NFS 上可能無法運作,或檔案無法寫入。 第三,在重建結束時,它會新增下列格式的別名:

@: @

(通常不合法)。 在 sendmail 將存取資料庫之前,它會檢查以確定此項目存在。

列出擁有者

如果傳送至特定位址 x時發生錯誤, sendmail 會尋找 擁有者-x 格式的別名來接收錯誤。 這通常適用於清單提交者無法控制清單本身維護的郵寄清單。 在此情況下,清單維護者會是清單的擁有者。 例如:

unix-wizards: linda@paintbox, wnj@monet, nosuchuser,
 sam@matisse
owner-unix-wizards: unix-wizards-request
unix-wizards-request: linda@paintbox

會導致linda@paintbox以取得當某人傳送至 Unix-精靈時由於併入下列項目而發生的錯誤:nosuchuser在清單上。

清單擁有者也會導致修改封套寄件者位址。 如果擁有者別名的內容指向單一使用者,則會使用這些內容。 否則,會使用別名本身的名稱。 因此,為了符合網際網路慣例, "owner-" 位址通常指向 "-request" 位址; 這會導致訊息以典型的網際網路慣例 (使用 "list-request" 作為回覆位址) 送出。

個別使用者轉遞 (.forward 檔案)

作為別名資料庫的替代方案,使用者可以在其起始目錄中放置名為 ". forward" 的檔案。 如果此檔案存在, sendmail 會將該使用者的郵件重新導向至 .forward 檔案中列出的位址清單。 例如,如果使用者 "kenly" 的起始目錄具有 .forward 檔案,內容如下:

kenly@ernie
joel@renoir

則任何到達 "kenly" 的郵件都會重新導向至指定的帳戶。

配置檔定義一連串要檢查的檔名。 依預設,這是使用者的 .forward 檔案,但可以使用 ForwardPath (J) 選項來定義為更一般。 如果您變更此選項,則必須將變更通知您的使用者基礎。

IDENT 通訊協定支援

UCB sendmail 支援 RFC 1413 中定義的 IDENT 通訊協定。 雖然這會加強電子郵件訊息作者的識別,方法是對原始系統執行「回呼」,以將特定 TCP 連線的擁有者包括在審核追蹤中,但這並不是完美的; 已決定的偽造者很容易違反 IDENT 通訊協定的安全。

附註: 作業系統不支援 IDENT 通訊協定。 在 /etc/mail/sendmail.cf 檔案中,或在 /etc/mail/submit.cf 檔案中, IDENT 逾時設為零 (0) ,以停用 IDENT。 如果您想要啟用 IDENT ,請修改 sendmail.cf 檔案及 submit.cf 檔案,並設定 IDENT 逾時。

下列說明摘錄自 RFC 1413:

6. 安全考量

此通訊協定傳回的資訊最多與提供它的主機或操作主機的組織一樣值得信任。 例如,開啟實驗室中的 PC 很少 (如果有任何控制項) ,以防止使用者讓此通訊協定傳回使用者想要的任何 ID。 同樣地,如果主機已受損,則傳回的資訊可能完全錯誤及誤導。

「識別通訊協定」不是要作為授權或存取控制通訊協定。 它最多提供一些 TCP 連線相關的其他審核資訊。 最糟糕的是,它可能提供誤導、不正確或惡意不正確的資訊。

強烈建議不要使用此通訊協定所傳回的資訊來進行審核。 具體而言,使用「識別通訊協定」資訊來進行存取控制決策,不論是作為主要方法 (即不進行其他檢查) 或作為其他方法的附屬項,都可能導致正常主機安全減弱。

識別伺服器可能會顯示使用者、實體、物件或處理程序的相關資訊,這些通常可能被視為專用。 「識別」伺服器提供的服務與某些電話公司所提供的 CallerID 服務大致類似,且適用於「識別」的許多相同隱私權考量及引數適用於 CallerID 服務。 如果您因為隱私權考量而不執行「finger」伺服器,則可能不想執行此通訊協定。

調整

視您網站的需求而定,您可能想要變更一些配置參數。 其中大部分是使用 sendmail.cf 檔案或 submit.cf 檔案中的選項來設定。 例如,行 "O Time-out.queuereturn=5d" 會將選項 "Timeout.queuereturn" 設為值 "5d" (五天)。

這些選項大部分都具有適用於大部分站台的預設值。 不過,具有非常高的郵件負載的網站可能會發現他們需要適當地調整它們,以適合其郵件負載。 尤其是遇到大量小型訊息 (其中許多訊息會遞送給許多收件者) 的網站,可能會發現它們需要調整處理佇列優先順序的參數。

所有舊版 sendmail 都有單一字元選項名稱。 雖然仍然接受舊的簡稱,但大部分新選項都沒有類似的簡稱。

逾時

所有時間間隔都是使用調整過的語法來設定。 例如, "10m" 代表十分鐘,而 "2h30m" 代表兩個半小時。 整套比例尺如下:

s
m
分鐘
h
小時
d
w

讀取逾時

逾時都具有選項名稱 "Time-out.suboption"。 可辨識的子選項、其預設值,以及 RFC 1123 5.3.2 小節所容許的最小值如下:

子選項 說明
阿科訥克 等待單一遞送嘗試成功的所有連線的整體逾時 [0 ,未指定]。 若為 0 ,則不會套用整體限制。 這可用來限制嘗試連接至可接受收件者電子郵件之主機長清單的總時間量。 此逾時不適用於 FallbackMXhost,亦即,如果時間已耗盡,則下次會嘗試 FallbackMXhost
AUTH SMTP AUTH 對話框中的回覆逾時 [10m,未指定]。
指令- 在伺服器 SMTP 中,等待另一個指令的時間。 [1h, 5m]。
連接 等待開啟 SMTP 連線 (連接 (2) 系統呼叫) 的時間 [0 ,未指定]。 如果為零,則使用核心預設值。 在任何情況下,此選項都無法將逾時延長到核心提供的時間,但它可以縮短逾時。 這是為了繞過提供極長連線逾時 (在一個案例中為 90 分鐘) 的核心。
控制 (control) 完成完整控制 Socket 交易的逾時 [2m,無]。
datablock- 等待讀取資料區塊 (亦即,訊息內文)。 [1h, 3m]。 這應該很長,因為它也適用於將輸入輸送到 sendmail 的程式,但不保證會迅速。
資料 等待點終止訊息的回覆。 [1h,10m]。 如果這比接收端遞送訊息實際所需的時間更短,則會產生重複。 這將在 RFC1047中進行討論。
資料- 等待 DATA 指令 [5m, 2m] 的回覆。
檔案開啟 開啟 .forward:include:檔案 [60s,無] 的逾時。
圖示 connect相同,不同之處在於它僅適用於起始嘗試連接至給定訊息 [0, unspecified] 的主機。 此期間應該非常短 (幾秒鐘)。 連接良好且可回應的主機將會立即提供服務。 慢速的主機不會在起始遞送嘗試中扣留其他遞送。
Ident- 等待 IDENT 查詢 [30s11, unspecified] 的回覆時發生逾時。
起始 等待起始 220 問候語訊息 [5m, 5m]。
海洛 等待來自 HELO 或 EHLO 指令 [5m, unspecified] 的回覆。 這可能需要主機名稱查閱,因此五分鐘可能是合理的下限。
主機狀態 在將主機視為過時 [30m,未指定] 之前,快取主機相關長狀態資訊 (例如,主機關閉) 的時間。
郵件- 等待 MAIL 指令 [10m, 5m] 的回覆。
雜項 等待細項 (但簡短) 指令 (例如 NOOP (無作業) 及 VERB (進入詳細模式)) 的回覆。 [2m,未指定]。
退出 等待 QUIT 指令的回覆 [2m,未指定]。
Rcpt- 等待 RCPT 指令 [1h, 5m] 的回覆。 這應該很長,因為它可能指向需要很長時間才能展開的清單 (請參閱下面的說明)。
rset 等待 RSET 指令的回覆 [5m,未指定]。
resolver.retrans 設定解析器重新傳輸時間間隔 (以秒為單位)。 同時設定 Timeout.resolver.retrans.firstTimeout.resolver.retrans.normal
resolver.retrans.first 設定第一次嘗試遞送訊息時的解析器重新傳輸時間間隔 (以秒為單位)。
resolver.retrans.normal 設定所有解析器查閱 (第一次遞送嘗試除外) 的重新傳輸時間間隔 (以秒為單位)。
resolver.retry 設定嘗試重新傳輸解析器查詢的次數。 同時設定 Timeout.resolver.retry.firstTimeout.resolver.retry.normal
resolver.retry.first 設定第一次遞送嘗試重新傳輸解析器查詢的嘗試次數。
resolver.retry.normal 設定嘗試重新傳輸解析器查詢以進行所有解析器查閱 (第一次遞送嘗試除外) 的次數。
starttls SMTP STARTTLS 指令的回覆及 TLS 信號交換 [1h,未指定] 的逾時值。

為了與舊配置檔相容,如果未指定子選項,則所有標示 - 的逾時都會設為指出的值。

訊息逾時

在佇列中停留幾天之後,訊息將逾時。 這是為了確保至少傳送者知道無法傳送訊息。 逾時通常設為五天。 如果訊息在佇列中的時間超過數小時 (假設您通常具有良好的連線功能; 如果您的訊息通常需要數小時才能傳送,則您不會想要執行此動作,因為這不會是異常事件) ,有時也會認為傳送警告訊息很方便。 這些逾時是使用配置檔中的 Timeout.queuereturn 和 Timeout.queuewarn 選項來設定 (先前都是使用 T 選項來設定)。

因為這些選項是廣域的,而且您無法知道網域外部的另一個主機將關閉多久,所以建議使用五天逾時。 這可讓收件者修正問題,即使問題發生在長週末的開頭。 RFC 1123 小節 5.3.1.1 指出此參數應該「至少 4-5 天」。

Timeout.queuewarn 值可以在 T 選項上 piggybacked ,方法是指出應該傳送警告訊息之前的時間; 兩個逾時以斜線區隔。 例如,這一行:

OT5d/4h

會導致電子郵件在五天後失敗,但會在四小時後傳送警告訊息。 這應該夠大,訊息已嘗試過數次。

佇列間隔

-q 旗標的引數指定次常駐程式執行佇列的頻率。 這通常設為 15 分鐘到 1 小時之間。 RFC 1123 5.3.1.1 小節建議至少為 30 分鐘。

在佇列執行期間分出

透過設定 ForkEach工作 (Y) 選項, sendmail 會在執行佇列時,在每一則個別訊息之前分出。 這將防止 sendmail 耗用大量記憶體,因此在記憶體不足環境中可能很有用。 不過,如果未設定 ForkEach工作選項,則 sendmail 會追蹤在佇列執行期間關閉的主機,這可大幅提高效能。

如果設定 ForkEach工作選項,則 sendmail 無法使用連線快取。

佇列優先順序

每一則訊息在第一次實例化時都會指派優先順序,由訊息類別 (由 Precedence: header 決定) 乘以「工作類別因素」的訊息大小 (以位元組為單位) 及乘以「工作收件者因素」的收件者數目組成。 使用優先順序來排序佇列。 優先順序較高的數字表示稍後在執行佇列時將會處理訊息。

包含訊息大小,因此大型訊息會相對於小型訊息受到懲罰。 訊息類別容許使用者透過在其訊息中包含 "Precedence:" 欄位來傳送「高優先順序」訊息; 在配置檔的 P 行中查閱此欄位的值。 因為收件者數目會影響訊息呈現給系統的負載量,這也會包含在優先順序中。

在配置檔中,可以分別使用 RecipientFactor (y) 和 ClassFactor (z) 選項來設定收件者和類別因素。 它們預設為 30000 (代表收件者因素) 和 1800 (代表類別因素)。 起始優先順序為:

pri = msgsize - (class times bold ClassFactor) + (nrcpt times bold 
RecipientFactor)

(請記住,此參數的較高值實際上表示將以較低優先順序處理工作。)

也可以使用 RetryFactor(Z) 選項所設定的「工作時間因素」,在每次處理工作 (即每次嘗試遞送工作時) 時調整工作的優先順序。 這會加上優先順序,因此通常會降低工作的優先順序,因為失敗多次的工作在未來可能會再次失敗。 RetryFactor 選項預設為 90000。

載入限制

如果系統負載平均值使用 QueueLA (x) 選項變得太高,則可以要求 Sendmail 將郵件排入佇列 (但無法遞送)。 當負載平均值超出 QueueLA 選項的值時,如果 QueueFactor (q) 選項除以現行負載平均值與 QueueLA 選項加 1 的差異,則遞送模式會設為 q (僅限佇列) ,亦即,如果下列情況,則訊息會排入佇列:

pri > { bold QueueFactor } over { LA - { bold QueueLA } + 1 }

QueueFactor 選項預設為 600000 ,因此每一個資料流量平均值都值得 600000 個優先順序點 (如上所述)。

在極端情況下, RefuseLA (X) 選項定義 sendmail 將拒絕接受網路連線的平均負載。 仍然接受本端產生的郵件 (包括送入的 UUCP 郵件)。

遞送模式

sendmail 可以在許多遞送模式中運作,由 DeliveryMode (d) 配置選項設定。 這些模式指定遞送郵件的速度。 合法模式為:

遞送模式 確立
i 以互動方式 (同步) 交付
B 在背景中交付 (非同步)
q 僅佇列 (不遞送)
D 延遲遞送嘗試 (不遞送)。

有一些權衡。 模式 提供寄件者最快速的意見,但可能會減緩部分郵寄程式的速度,因此幾乎不需要。 模式 b 會立即遞送,但如果您有郵寄程式需要很長時間來遞送訊息,則可能會導致大量處理程序。 模式 q 會將機器上的負載最小化,但表示遞送可能會延遲長達佇列間隔。 模式 與模式 q 相同,但它也會阻止所有早期對映查閱的運作; 它適用於「隨需應變撥號」網站,其中 DNS 查閱可能非常昂貴。 部分簡式錯誤訊息 (例如,host unknown during the SMTP protocol) 將使用此模式延遲。 模式 b 是預設值。

如果您以模式 q (僅限佇列)、 (延遲) 或 b (在背景中遞送) 執行, sendmail 不會在初次收到郵件時展開別名並遵循 .forward 檔案。 這會加速對 RCPT 指令的回應。 SMTP 伺服器無法使用模式

記載層次

可以為 sendmail設定記載層次。 使用標準配置表的預設值是層次 9。 層次如下:

記載層次 確立
0 記載下限。
1 嚴重系統故障及潛在安全問題。
2 失去通訊 (網路問題) 及通訊協定失敗。
3 其他嚴重失敗。
4 次要失敗。
5 訊息收集統計資料。
6 建立錯誤訊息、VRFY 及 EXPN 指令。
7 遞送失敗 (例如,主機或使用者不明)。
8 順利完成遞送及別名資料庫重建。
9 正在延遲的訊息 (例如,因為主機關閉)。
10 資料庫擴充 (別名、轉遞及 userdb 查閱)。
11 NIS 錯誤及工作結束處理程序。
12 記載所有 SMTP 連線。
13 記載不當的使用者 Shell、具有不當許可權的檔案,以及其他有問題的狀況。
14 拒絕的連線數。
15 記載所有送入及送出的 SMTP 指令。
20 個 日誌會嘗試執行已鎖定的佇列檔。 這些不是錯誤,但如果您的佇列似乎被阻塞,請注意這些可能很有用。
30 遺失鎖定 (僅當使用 洛克夫 而非 羊群時)。

檔案模式

檔案使用的模式視您想要的功能及您需要的安全層次而定。

sendmail 實際使用的資料庫由下列檔案代表:

/etc/mail/aliases.db
Berkeley DB 資料庫

這些檔案上的模式應該符合 /etc/mail/aliases的模式。 如果 別名 可寫入,但檔案無法寫入,使用者將無法透過實際資料庫反映他們想要的變更。 不過,如果 別名 是唯讀且 DBM 檔案是可寫入的,則稍微準確的使用者仍可以安排竊取郵件。

如果 DBM 檔案無法寫入,或您未啟用自動重建 (使用 AutoRebuild「別名」選項) ,則每次變更文字版本時必須小心重新建構別名資料庫:

newaliases

如果忽略或忘記此步驟,則會遺失任何預期的變更。

連線快取

在處理佇列時, sendmail 會嘗試保持最後幾個開啟的連線開啟,以避免啟動及關閉成本。 這僅適用於 IPC 連線。

嘗試開啟連線時,會先搜尋快取。 如果找到開啟的連線,則會透過傳送 RSET 指令來探測該連線是否仍在作用中。 如果失敗,這不是錯誤; 相反地,連線會關閉並重新開啟。

兩個參數控制連線快取。 ConnectionCacheSize (k) 選項定義允許同時開啟的連線數目。 如果設為零,則會盡快關閉連線。 預設值為 1。 這應該針對您的系統大小適當設定; 它將限制 sendmail 在佇列執行期間將使用的系統資源數量。 絕不將此設為高於 4。

ConnectionCache逾時 (K) 選項指定允許任何快取連線閒置的時間上限。 當閒置時間超出此值時,即會關閉連線。 此數目應該很小 (不到 10 分鐘) ,以防止您從其他主機取得太多資源。 預設值為五分鐘。

名稱伺服器存取權

如果您想要機器交換 (MX) 支援,則必須使用「網域名稱服務 (DNS)」。

ResolverOptions(I) 選項可讓您調整名稱伺服器選項。 指令行採用一系列的旗標,如所記載的解析器 (3) (刪除前導 " RES_")。 每一個前面可以有選用的 `+'或 `-'。 例如,這一行:

O ResolverOptions=+AAONLY -DNSRCH

開啟 AAONLY (僅接受授權性回答) 並關閉 DNSRCH (搜尋網域路徑) 選項。 大部分解析器檔案庫預設 DNSRCH、DEFNAMES 及 RECURSE 旗標開啟及所有其他旗標關閉。 您也可以包括 "HasWildcardMX" ,以指定有萬用字元 MX 記錄符合您的網域; 這會在標準化名稱時關閉 MX 比對,這可能導致不適當的標準化。

移動每位使用者的轉遞檔案

有些網站會從使用者工作站上的本端磁碟裝載每一個使用者的起始目錄,以便快速進行本端存取。 不過,結果是 .forward 檔案查閱緩慢。 在某些情況下,甚至可能因為檔案伺服器關閉,而不適當地在機器上遞送郵件。 如果您執行自動裝載器,效能可能特別差。

ForwardPath (J) 選項可讓您設定轉遞檔案的路徑。 例如,配置檔行:

O ForwardPath=/var/forward/$u:$z/.forward.$w

會先在 /var/forward中尋找與使用者登入同名的檔案。 如果找不到 (或無法存取) ,則會搜尋使用者起始目錄中的檔案 ".forward.machinename"。

如果您建立 /var/forward之類的目錄,它應該是模式 1777 (亦即,應該設定組合位元)。 使用者應該建立檔案模式 644。

可用空間

在具有 statfs (2) 系列中其中一個系統呼叫 (包括 statvfsustat) 的系統上,您可以使用 MinFreeBlocks (b) 選項來指定佇列檔案系統上的可用區塊數下限。 如果裝載佇列的檔案系統上可用的區塊數少於指出的數目,則 SMTP 伺服器會拒絕具有 452 錯誤碼的郵件。 這會邀請 SMTP 用戶端稍後重試。

注意: 請小心不要將此選項設得太高; 當郵件處理沒有困難時,可能會導致拒絕電子郵件。

最大訊息大小

為了避免系統因大型訊息而溢位, MaxMessage「大小」選項可以對任何一則訊息的大小設定絕對限制。 這將在 ESMTP 對話框中公佈,並在訊息收集期間進行檢查。

隱私權旗標

PrivacyOptions (p) 選項可讓您設定特定「隱私權」旗標。 實際上,其中許多並不提供您任何額外的隱私權,而只是在使用某些指令或新增額外標頭以指出可能的安全違規之前,堅持用戶端 SMTP 伺服器使用 HELO 指令。

此選項採用一系列旗標名稱; 最終隱私權是包含或包含那些旗標。 例如:

O PrivacyOptions=needmailhelo, noexpn

堅持在接受 MAIL 指令之前使用 HELO 或 EHLO 指令,並停用 EXPN 指令。

這些旗標在 RFC 1123 S 5.1.6中有詳細說明。

也傳送給我

通常, sendmail 會從任何清單擴充中刪除 (封套) 傳送端。 例如,如果 "linda" 傳送至包含 "linda" 作為其中一個成員的清單,則她將不會取得訊息的副本。 如果 -m (我也會) 指令行旗標,或如果在配置檔中設定了 MeToo (m) 選項,則會抑制此行為。

C 和 F-定義類別

詞組的類別可以定義為在重寫規則的左側符合,其中 "phrase" 是不包含空格字元的一連串字元。 例如,可以建立此網站的所有本端名稱的類別,以便可以刪除傳送給自己的嘗試。 這些可以直接定義在配置檔中,或從另一個檔案讀取。 類別在 {braces}中命名為單一字母或單字。 以小寫字母及特殊字元開頭的類別名稱保留供系統使用。 配置檔中定義的類別可以從一組簡稱的大寫字母中指定名稱,或從大寫字母開始指定完整名稱。
Ccphrase1 phrase2...
Fcfile
第一個表單定義類別 c ,以符合任何具名單字。 允許將它們分割成多行; 例如,兩種形式:
CHmonet ucbmonet
CHmonet
CHucbmonet

是相等的。 "F" 形式會從指名的檔案中讀取類別 c 的元素。

可以使用 $= 或 $~ 在規則中存取類別的元素。 $~ (不在類別中的相符項目) 只符合單一字組; 在此環境定義中,會忽略類別中的多字組項目。

類別 $=w 設為此主機已知的所有名稱集。 這可用來比對本端主機名稱。

類別 $=k 設為與 $k 相同,即 UUCP 節點名稱。

類別 $=m 會設為用來識別此主機的網域集,最初只有 $m。

類別 $=t 由 T 配置行設定為一組授信使用者。 如果您想要從檔案讀取授信使用者,請使用 Ft/file/ name

類別 $=n 可以設定為 MIME 主體類型的集合,這些類型永不可以是 8 到 7 位元編碼。 它預設為 "multipart/ssigned"。 訊息類型 "message/ *" 和 "multipart/ *" 永不直接編碼。 一律遞迴地處理多組件訊息。 訊息/* 訊息的處理由類別 $= s 控制。 類別 $=e 包含可以 8-> 7 位元編碼的 Content-Transfer-Encodings。 它預先定義為包含 "7bit"、"8bit" 及 "binary"。 類別 $=s 包含可遞迴處理的訊息子類型集。 依預設,它只包含 "rfc822"。 其他 "message/ *" 類型不能是 8-> 7 位元編碼。 如果包含 8 位元資料的訊息傳送至 7 位元主機,且該訊息無法編碼為 7 位元,則會被刪除為 7 位元。

三個類別 $= U、$= Y 及 $=Z 定義為說明需要使用 uucp 郵寄程式的主機。 具體而言, $=U 應該包含需要 uucp-old 郵寄程式的所有主機。 $=Y 應包含所有需要 uucp-new 郵寄程式的主機。 最後, $=Z 應該包含需要 uucp-udom 郵寄程式的所有主機。 每一個 uucp 主機都應該屬於其中一個類別。

Sendmail 可以編譯成在 F 行上容許 scanf (3) 字串。 這可讓您執行簡單的文字檔剖析。 例如,若要將系統 /etc/passwd 檔案中的所有使用者名稱讀取到類別中,請使用:
FL/etc/passwd %[^:]

它會讀取每一行直到第一個冒號。

變更主機名稱

Cw 包含本端主機的所有可能名稱。 它定義別名。 Cw 指定主機系統的名稱及所有別名。 如果您的系統對兩個不同的網路連線使用不同的名稱,請輸入這兩個名稱作為主機名稱類別的一部分。 如果您未同時定義這兩個名稱,則傳送至未定義名稱的郵件會傳回給寄件人。
CwCw alias aliasn... 

依預設, sendmail 指令會讀取已使用 主機名稱 指令設定的內容,並使用它來起始設定主機及網域名稱巨集和類別。 只有在您想要 sendmail 主機和網域名稱與 主機名稱 指令所設定的主機和網域名稱不同時,才變更配置檔巨集。

如果要變更主機名稱,請執行下列動作:

  1. 輸入指令:

    vi /etc/mail/sendmail.cf

    vi /etc/mail/submit.cf

  2. 尋找以開頭的行Dj and Dw.Dj and Dw置換以 "hostname" 設定的主機和網域名稱。
  3. 取代Dj and Dw具有新的主機名稱資訊。 例如,如果您的主機名稱是brown.newyork.abc.com你有一個化名brown2,輸入:
  4. 儲存檔案並結束編輯器。

使用檔案建立類別

若要定義其成員列在外部檔案中的類別 (一行一個成員) ,請使用以字母開頭的控制行F. 的語法F類別定義為:
FClass FileName [Format]

Class是符合下列任一字組的類別名稱:FileName.Filename是檔案的完整路徑名稱 (為了方便起見,您可能想要將檔案放置在 /etc/mail 目錄中)。Format是選用 scanf 子常式格式指定元,指出 FileName中類別元素的格式。 TheFormat指定元只能包含一個轉換規格。

M-定義郵寄程式

郵寄程式和介面定義在這一行中。 格式為:

Mname, {field=value}*

其中 name 是郵寄程式的名稱 (僅供內部使用) ,而 "field = name" 配對定義郵寄程式的屬性。 欄位如下:

欄位 說明
路徑 郵寄程式的路徑名稱
旗標 此郵寄程式的特殊旗標
寄件者 重新編寫寄件者位址的集合
收件者 重新編寫收件者位址的集
阿爾格夫 要傳遞給此郵寄程式的引數向量
埃奧爾 此郵件的行尾字串
Maxsize 此郵寄程式的訊息長度上限
maxmessages 每個連線遞送的訊息數上限
利內利姆 訊息內文中的行長度上限
目錄 郵寄程式的工作目錄
使用者 ID 要執行的預設使用者和群組 ID
nice 郵寄程式的 nice (2) 增量
字集 8 位元字元的預設字集
類型 MTS 類型資訊 (用於錯誤訊息)
等待 等待郵寄程式的時間上限
/ 郵寄程式的根目錄
佇列群組 郵寄程式的預設佇列群組。

只會檢查欄位名稱的第一個字元。

下列清單中的旗標可以在郵寄程式說明中設定。 任何其他旗標都可以自由使用,以有條件地將標頭指派給指定給特定郵寄程式的訊息。 以 - 標示的旗標不會由 sendmail 二進位解譯; 這些通常用來與 H 行的旗標部分產生關聯。 標示 = 的旗標會套用至寄件者位址的郵寄程式,而非一般收件者郵寄程式。

旗標 說明
A 執行延伸 SMTP (ESMTP) 通訊協定 (在 RFC 1651、1652 及 1653 中定義)。 如果 SMTP 問候語訊息包括單字 "ESMTP" ,則此旗標預設為開啟。
A 在別名資料庫中查閱位址的使用者部分。 通常只針對本端郵件程式設定此值。
B 在訊息結尾強制空白行。 這旨在解決某些版本的 /bin/mail 需要空白行,但本身不提供它的問題。 它通常不會在網路郵件上使用。
C 請勿在位址中包含註解。 只有在您必須處理因評論而混淆的遠端郵寄程式時,才應該使用此選項。 This strips addresses of the form "Phrase <address>" or "address (Comment)" down to just "address".
C= 如果從已設定此旗標的郵寄程式收到郵件,則標頭中沒有 at 符號 ("@") 的任何位址 在由規則集 3 重新編寫之後,將會有來自已開啟傳送者封套位址的 "@domain" 子句。 這容許郵件具有下列格式的標頭:
From: usera@hosta
To: userb@hostb, userc

自動重新編寫 (雖然 可靠) 為:

From: usera@hosta
To: userb@hostb, userc@hosta
D 請勿在 route-address 語法位址周圍包含角括弧。 這對於要將位址傳遞至 Shell (可能將角括弧解譯為 I/O 重新導向) 的郵寄程式很有用。
D- 此郵寄程式需要 "Date:" 標頭行。
E 此郵寄程式連接的成本很高,因此請盡量避免正常連接。 在佇列執行期間將會發生任何必要的連線。
E 訊息中以 "From" 開頭且帶有 `> ' 符號的跳離行。
F 郵寄程式想要 -f from 旗標,但僅當這是網路轉遞作業時 (亦即,如果執行使用者沒有特殊許可權,則郵寄程式將會發生錯誤)。
F- 此郵寄程式想要 "From:" 標頭行。
g 一般而言, sendmail 會依照 RFC 1123 的要求,使用空值回覆位址來傳送內部產生的錯誤訊息。 不過,部分郵寄程式不接受空值回覆位址。 必要的話,您可以設定 g 旗標,以防止 sendmail 遵循標準; 錯誤訊息將從 MAILER-DAEMON (實際上是 $n 巨集的值) 傳送。
h 在此郵寄程式的主機名稱中應該保留大寫。
i 在封套傳送端位址上執行「使用者資料庫」重新編寫。
I 此郵寄程式將對另一個 sendmail , 使用 SMTP ,因為它可以使用特殊通訊協定特性。 不需要此選項 (亦即,如果省略此選項,則傳輸仍會順利運作,雖然可能不會盡可能有效率)。
J 對收件者及寄件者執行「使用者資料庫」重新編寫。
k 一般而言,當 sendmail 透過 SMTP 連接至主機時,它會檢查以確定這不會意外地與 sendmail 配置錯誤或遠端網路介面設定迴圈模式時可能發生的主機名稱相同。 此旗標會停用迴圈檢查。 只能在非常特殊的情況下使用。
K 目前未實作。 保留用於區塊化。
l 此郵寄程式是本端 (亦即,將執行最終遞送)。
L 限制行長度,如 RFC821中所指定。 這個已淘汰的選項應該取代為 L= 郵件宣告。 基於歷史原因, L 旗標也會設定 7 旗標。
M 此郵寄程式可以在一個交易中傳送給相同主機上的多個使用者。 當 $u 巨集出現在郵寄程式定義的 argv 部分時,所有合格使用者將視需要重複該欄位。
M- 此郵寄程式想要 "Message-Id:" 標頭行。
n 請勿在訊息前面插入 UNIX-style "From" 行。
o 一律以收件者信箱的擁有者身分執行。 一般而言,在遞送網路郵件時, sendmail 會以本端產生郵件的寄件人或 "daemon" (實際上是 u 選項中指定的使用者) 身分執行。 大部分本端郵寄程式都需要正常行為,除非郵寄程式以常駐程式形式執行,否則不會容許設定封套傳送端位址。 如果設定 S 旗標,則會忽略此旗標。
p 在 SMTP "MAIL FROM:" 指令中使用 route-addr 樣式反向路徑,而不只是回覆位址; 雖然在 RFC821 區段 3.1中需要這樣做,但許多主機無法適當地處理反向路徑。 RFC 1123 不建議反向路徑。
P- 此郵寄程式想要 "Return-Path:" 一行。
q 驗證解析為此郵寄程式的位址 (SMTP VRFY 指令) 時,會產生 250 個回應,而不是 252 個回應。 這將表示位址是本端位址。
旗標 說明
r f相同,但會傳送 -r 旗標。
迴歸 從「安全」埠開啟 SMTP 連線。 除非在 UNIX 機器上,否則安全埠並不安全,因此不清楚這是否會新增任何內容。
s 在呼叫郵寄程式之前,請先除去位址中的引號字元 (" and \)。
S 在呼叫郵寄程式之前,請勿重設使用者 ID。 這將在以 root 使用者身分執行 sendmail 的安全環境中使用。 這可用來避免偽造位址。 如果也指定 U= 欄位,則此旗標會導致使用者 ID 一律設為該使用者和群組 (而不是將它保留為 root)。
u 在此郵寄程式的使用者名稱中應該保留大寫。
U This mailer wants UUCP-style "From" lines with the "remote from <host>" on the end.
w 使用者在此機器上必須具有有效帳戶 (getpwnam 必須成功)。 如果沒有,則會退回郵件。 這是取得 ". forward" 功能的必要項目。
x- 此郵寄程式想要 "Full-Name:" 標頭行。
X 基本上,此郵寄程式想要使用 RFC821; 中指定的隱藏點演算法,任何以點開頭的行都將在前面附加一個額外的點 (在另一端被刪除)。 這可確保訊息中含有點的行不會過早終止訊息。
z sendmail 與本端郵寄程式之間執行本端郵件傳送通訊協定 (LMTP)。 這是 RFC 2033 中定義的 SMTP 變式,專門設計用來遞送至本端信箱。
0 請勿透過 SMTP 來查閱主機的 Mx 記錄。
3 延伸轉換成的字元清單=XX轉換為時表示法Quoted-Printable包含 ASCII 與 EBCDIC 之間未完全對映的那些項目。 如果您在站上有 IBM® 大型主機,則非常有用。
5 如果找不到此位址的別名,請透過規則集 5 傳遞位址,以取得可能的替代解決方案。 這旨在將郵件轉寄至替代遞送點。
6 將標頭刪除為 7 位元。
7 將所有輸出刪除為 7 位元。 如果已設定 L 旗標,則這是預設值。 請注意,清除此選項不足以取得透過 sendmail傳遞的完整 8 位元資料。 如果已設定 7 選項,則基本上一律會設定此選項,因為在輸入時已除去第 8 個位元。 請注意,此選項只會影響未執行 8-> 7 位元 MIME 轉換的訊息。
8 如果已設定,則可接受將 8 位元資料傳送至此郵寄程式; 將略過一般嘗試執行 8-> 7 位元 MIME 轉換。
9 如果已設定,請執行限制 7-> 8 位元 MIME 轉換。 這些轉換僅限於文字/純文字資料。
: 請檢查位址是否開始 ":include:"。 如果有的話,請將它們轉換成 "* include*" 郵寄程式。
| 請檢查位址,以查看它們是否以 ` | ' 開頭。 如果有的話,請將它們轉換成 "prog" 郵寄程式。
/ 請檢查位址,以查看其開頭是否為 `/'。 如果有的話,請將它們轉換成 "* file*" 郵寄程式。
@ 在使用者資料庫中查閱位址。
% 除非使用下列其中一個-qI/-qR/-qS 佇列執行修飾元或 ETRN 要求選取佇列訊息,否則請勿嘗試在訊息的起始收件者或佇列上執行遞送。
附註: 層次 6 之前的配置檔會在名為 "local" 的郵寄程式上假設 ` A '、` w'、` 5 '、`:'、` | '、`/' 及 ` @' 選項。

具有特殊名稱 "error" 的郵寄程式可用來產生使用者錯誤。 (選用) 主機欄位是要傳回的結束狀態,而使用者欄位是要列印的訊息。 結束狀態可以是數值或 USAGE、NOUSER、NOHOST、UNAVAILABLE、SOFTWARE、TEMPFAIL、PROTOCOL 或 CONFIG 其中一個值,以傳回對應的 EX_ 結束碼。 例如,項目:

$#error $@ NOHOST $: Host unknown in this domain

在規則的 RHS 上,如果 LHS 相符,則會產生指定的錯誤,並傳回「主機不明」結束狀態。 它一律可用於 O、S 及 check_ ... 規則集,且無法使用 M 指令來定義。

必須在每個配置檔中定義名為 "local" 的郵寄程式。 這是用來遞送本端郵件,並以數種方式特殊處理。 此外,也可以定義其他三個名為 "prog"、"* file*" 及 "* include*" 的郵件程式,以分別調整對程式、檔案及 :include: 清單的訊息遞送。 它們預設為:

Mprog, P=/bin/sh, F=lsoDq9, T=DNS/RFC822/X-Unix, A=sh -c $u
M*file*, P=[FILE], F=lsDFMPEuq9, T=DNS/RFC822/X-Unix, A=FILE $u
M*include*, P=/dev/null, F=su, A=INCLUDE $u

「寄件者」重寫集和「收件者」重寫集可以是簡式規則集 ID ,也可以是兩個以斜線區隔的 ID 如果是這樣,則第一個重寫集會套用至封套位址,第二個重寫集會套用至標頭。 將任何值設為零會停用對應的郵寄程式特定重新編寫。

TheDirectory欄位是要嘗試的目錄路徑。 例如,定義D=$z:/會嘗試執行收件者的起始目錄,但如果無法使用,則會嘗試在檔案系統的根目錄中執行。 僅在 程式 郵寄程式上使用此選項,因為部分 Shell (例如 csh) 在無法讀取起始目錄時不會執行。 因為未獲授權使用者通常無法讀取佇列目錄,所以如果使用 csh Script 作為收件者,則它們可能會失敗。

TheUseridfield 指定要執行的預設使用者和群組 ID。 它會置換 DefaultUser 選項 q.v。 如果也指定 S 郵寄程式旗標,則在所有情況下都會執行使用者和群組 ID。 使用表單 user: group 來設定使用者和群組 ID。 這些變數之一可以是分別在 passwd 檔案中查閱的整數或符號名稱。

TheCharset將訊息轉換成 MIME 時使用欄位。 它是 Content-Type 中使用的字集: 標頭。 如果未設定,則會使用 DefaultCharset 選項。 如果未設定 DefaultCharset ,則值unknown-8bitOVF。 字集 欄位適用於 傳送者的 郵寄程式; 不是收件者的 郵寄程式。 例如: 如果封套傳送者位址位於本端網路,而接收者位於外部網路,則字集是從Charset=區域網路郵寄程式的欄位,而不是外部網路郵寄程式的欄位。

TheType欄位設定 MIME 錯誤訊息中使用的資訊類型 (如 RFC 1984 所定義)。 它包含三個以斜線區隔的值 :MTA 類型 (如何命名主機的說明)、位址類型 (電子郵件位址的說明) 及診斷類型 (錯誤診斷碼的說明)。 每一個必須是登錄值或開頭為X-. 預設值為dns/rfc822/smtp.

郵寄程式規格範例

  1. 如果要指定本端遞送郵寄程式,請輸入:
    Mlocal, P=/usr/bin/bellmail, F=lsDFMmn, S=10, R=20, A=mail $u
    郵寄程式稱為local。其路徑名稱為/usr/bin/bellmail. 郵寄程式使用下列旗標:
    項目 說明
    l 指定本端遞送。
    s 從位址中除去引號。
    DFM 需要Date:, From:,Message-ID:
    m 提供給多位使用者。
    n 不需要作業系統 From訊息開頭的 行。
    規則集 10 應該套用至訊息中的傳送端位址。 規則集 20 應該套用至收件者位址。 其他資訊已傳送至中的郵寄程式A欄位是單字 郵件 ,以及包含收件者名稱的單字。

H-定義標頭

sendmail 插入訊息中的標頭行格式由 H 行定義。 此行的語法是下列其中一項:

Hhname:htemplate

H[?mflags?]hname: htemplate

H[?${macro}?hname:htemplate

此規格中的接續行會直接反映在送出訊息中。 htemplate 是在插入訊息之前展開的巨集。 如果指定 mflags (以問號括住) ,則必須在郵寄程式定義中至少指定其中一個旗標,此標頭才會自動輸出。 如果其中一個標頭位於輸入中,則不論這些旗標為何,都會反映到輸出中。

部分標頭具有稍後將說明的特殊語意。

次要語法容許在讀取標頭時驗證標頭。 若要啟用驗證,請使用:

HHeader: $>Ruleset
HHeader: $>+Ruleset

針對指定的 標頭呼叫指出的 規則集 。 與其他 check_ * 規則集一樣,它可以傳回$#error拒絕訊息或$#discard以捨棄訊息。 標頭會被視為結構化欄位,因此除非使用第二個表單 $>+ ,否則在處理之前會先刪除註解 (以括弧括住)。

例如,下列配置行:
HMessage-Id: $>CheckMessageId

SCheckMessageId
R<$+@$+> $@OK
R$*      $#error $: Illegal Message-Id header

會拒絕具有下列任何形式的 Message-Id: 標頭的任何訊息標頭:

Message-Id: <>
Message-Id: some text
Message-Id: <legal test@domain> extra text

sendmail.cf 檔案及 submit.cf 檔案中的訊息標題

配置檔中以大寫字母 H開頭的行,定義訊息中使用的標頭格式。 的格式H指令為:

配置檔中以大寫字母 H開頭的行,定義訊息中使用的標頭格式。 的格式H控制線為:
H[?MailerFlags?]FieldName: Content

變數參數定義為:

參數 確立
MailerFlags 決定是否H使用行。 這是選用的參數。 如果您提供此參數,請以? 括住它 (問號)。 如果郵寄程式需要此控制行所定義的欄位 (如郵寄程式定義的旗標欄位中所指示) ,則H在格式化標題時併入控制行。 否則,H系統不處理控制線路。
FieldName 包含在標題資訊中顯示為欄位名稱的文字。 一般欄位名稱包括From:,To:,及Subject:.
Content 定義顯示在欄位名稱後面的資訊。 通常巨集會指定此資訊。

這些範例行來自一般配置檔:

範例 意義
H?P?Return-Path: <$g> 定義稱為的欄位Return-Path顯示 $g 巨集的內容 (相對於收件者的寄件者位址)。 The?P?部分指出只有在郵寄程式使用 P 旗標時才使用此行 (郵寄程式需要Return-Path行)。 只有在郵寄程式具有指出的旗標時,才會產生標頭。 如果標頭出現在輸入訊息中,則會以未變更的方式傳遞。
HReceived: $?sfrom $s $.by $j ($v/$Z) id $i; $b 定義稱為的欄位 Received此欄位包括:
$?sfrom $s $.
顯示文字from後面接著 巨集的內容 (如果已定義 s 巨集 (傳送者的主機名稱))。
by $j
顯示文字by後面接著 $j 巨集的內容 (特定位置的正式名稱)。
($v/$Z)
顯示 sendmail 指令的版本 ($v) 及配置檔的版本 ($Z) ,以括弧括住並以斜線區隔。
id $i;
顯示文字id後面接著 $i 巨集 (訊息的郵件佇列 ID) 和 a; (分號) 的內容。
$b
顯示現行日期。

O-設定選項

您可以從配置檔設定數個廣域選項。 這一行的語法如下:

O option=value

這會將選項 相等 設為 價值。 下表列出支援的選項。

選項 說明
AliasFile=spec , spec, ...

請指定可能的別名檔。 每一個規格都應該採用 類別:: 檔案 格式,其中 類別:: 是選用的,如果未包含,則預設為 隱含 。 視編譯 sendmail 的方式而定,有效的類別如下:

隱含
搜尋別名檔案類型的已編譯清單,以取得舊版相容性
hash
如果指定 NEWDB
dbm
如果指定 NDBM
內部符號表。 除非沒有其他資料庫查閱,否則通常不會使用
NIS
如果指定 NIS

如果提供規格清單, sendmail 會依序搜尋它們。

AliasWait=逾時 在啟動之前,最多等待 逾時 (預設為分鐘) ,讓 @:@ 項目存在於別名資料庫中。 如果它未在 逾時 間隔中出現,且也設定 AutoRebuild別名 選項,請重建資料庫。 否則,請發出警告。
AllowBogusHELO 容許不包含主機名稱的 HELO SMTP 指令。 設定此值違反 RFC 1123 區段 5.2.5,但必須與數個 SMTP 用戶端交互作業。 如果有值,仍會檢查其合法性。
BlankSub= c 將空白替代字元設為 c。 這個字元會取代位址中未加引號的空格。 如果未定義,它會預設為空格,且不會進行取代。
CACERTPath 含有 CA 憑證的目錄路徑。
CACERTFile 包含一個 CA 憑證的檔案。
CheckAliases 重建別名資料庫時驗證別名的 RHS。
CheckpointInterval= N 定義傳送至每一個 N 位址的佇列檢查點間隔。 如果未指定,預設值為 10。 如果您的系統在遞送至大型清單期間損毀,這會防止重新傳輸至最後一個收件者以外的任何收件者。
ClassFactor= 事實 指出的 事實或乘以訊息類別,然後從優先順序中扣除。 訊息類別由使用者標頭中的 優先順序: 欄位及配置檔中的 P 行決定。 具有較高 優先順序: 的訊息將優先使用。 如果未指定,預設值為 1800
ClientCert檔案 包含用戶端憑證的檔案。 當 sendmail 作為用戶端時,會使用此憑證。
ClientPort選項= 選項
設定用戶端 SMTP 選項。 選項是以逗點區隔的 key=value 配對。 已知金鑰如下:
連線的來源埠名稱/數目。 預設值是任何可用的埠。
位址
位址遮罩。 預設值為 INADDR_ANY。 可以是帶點表示法的數值位址或網路名稱。
系列
地址系列。 預設值為 INET
SndBuf大小
TCP 傳送緩衝區的大小。
RcvBuf大小
TCP 接收緩衝區的大小。
修飾元 (Modifier)
常駐程式的旗標。 可以是下列字元:
h
使用 HELO 指令的介面名稱
如果設定 h ,則會對 HELO/EHLO 指令使用對應於送出介面位址的名稱 (無論透過 連線 參數選擇還是透過預設值選擇)。
ClientKey檔案 包含屬於用戶端憑證之私密金鑰的檔案。
ColonOkInAddr
如果設定,則電子郵件位址中可接受冒號,例如:
 host:user
如果未設定,冒號會指出 RFC 822 群組建構的開頭,如下所示:
groupname: member1, member2, ... memberN;
一律可接受雙冒號,例如 in
nodename::user
並瞭解適當的 routeaddr 巢狀結構,例如:
<@relay:user@host>

為了舊版相容性,如果配置版本層次小於 6 ,這個選項預設為 on 。 不過,它必須設為 off ,才能與 RFC 822 完全相容。

ConnectionCache大小= N N 是一次將快取的開啟連線數上限。 如果未指定,預設值為 1。 這會延遲關閉現行連線,直到此 sendmail 呼叫連接至另一個主機或它終止為止。 將它設為 0 會導致立即關閉連線。 因為這會耗用檔案描述子,所以連線快取應該保持較小: 4 是實際的上限。
ConnectionCache逾時 = 逾時 逾時 是允許快取連線閒置的時間量上限。 如果超出此時間,則會立即關閉連線。 此值應該較小: 10 分鐘是實際上限; 預設值為 5 分鐘。 在 sendmail 使用快取連線之前,一律會傳送 RSET 指令來檢查連線。 如果失敗,它會重新開啟連線。 如果另一個端點逾時,則可避免您的端點失敗。
ConnectOnlyTo= address 可用於置換連線位址以進行測試。
ConnectionRate節流控制= N 如果已設定,則在一秒期間內不容許超過 N 個送入常駐程式連線。 這旨在壓縮尖峰,並容許負載平均檢查切入。 如果未指定,則預設值為 0 (無限制)。
ControlSocket名稱= 名稱 定義常駐程式管理的控制 Socket 名稱。 可以透過這個具名 Socket 來控制執行中的 sendmail 常駐程式。 可用的指令為: 幫助restart關機狀態狀態 指令會傳回常駐程式子項的現行數目、常駐程式子項的數目上限、佇列目錄的可用磁碟空間區塊,以及機器的平均負載 (以整數表示)。 如果未設定,則沒有可用的控制 Socket。
DaemonPort選項= 選項

設定伺服器 SMTP 選項。 DaemonPort選項 的每一個實例都會導致額外的送入 Socket。 選項為 key=value 配對。 已知金鑰如下:

名稱
常駐程式的使用者定義名稱。 預設值為 常駐程式#。 用於錯誤訊息及記載。

若要能夠在系統上傳送郵件但不接收郵件,請編輯配置檔:

# O DaemonPortOptions=Name=MTA

O DaemonPortOptions=NAME=NoMTA4, Family=inet, Addr=127.0.0.1

接聽埠的名稱/數目。 預設值為 smtp
位址
位址遮罩。 預設值為 INADDR_ANY。 這可以是帶點表示法的數值位址或網路名稱。
系列
地址系列。 預設值為 INET (IPv4)。 需要接受 IPv6 連線的 IPv6 系統應該新增其他 系列=inet6 DaemonPort 選項線路。
接聽
接聽佇列的大小。 預設值為 10
修飾元 (Modifier)
常駐程式的旗標。 可以是下列字元的順序 (不含定界字元):
a
一律需要鑑別。
b
連結至介面,透過該介面接收送出連線的郵件。
附註: 只有在外寄郵件可以透過送入連線的介面遞送至其目的地時,才使用 b 旗標。 不會嘗試捕捉因不正確地配置此參數而導致的問題。 它應該僅用於虛擬主機作業,其中每一個虛擬介面都可以連接至每一個可能的位置。 b 旗標可以透過 ClientPort 選項置換設定。 此外, sendmail 將在新的 Socket 上接聽配置檔中每次出現的 DaemonPortOptions 次指令。
c
執行主機名稱標準化 (.cf)。 可以在 sendmail.cf 檔案或 submit.cf 檔案中變更主機名稱標準化的預設值。 請參閱/user/samples/tcpip/sendmail/README 檔案中 FEATURE (nocanonify) 的說明文件。
f
需要完整主機名稱 (.cf)。 除非直接提交位址,否則無法使用 user@host 格式的位址。
u
容許不完整位址 (.cf) (包括寄件者位址)。
C
不執行主機名稱標準化。 可以在 sendmail.cf 檔案或 submit.cf 檔案中變更主機名稱標準化的預設值。 請參閱/user/samples/tcpip/sendmail/README 檔案中 FEATURE (nocanonify) 的說明文件。
E
不容許 ETRN (請參閱 RFC 2476)。
指定一律需要鑑別的訊息提交代理程式 (MSA) 的一種方法是:
O DeamonPortOptions=Name=MSA,Port=587,M=Ea
標示 (.cf) 的修飾元只有在標準配置檔中使用 (可透過 ${daemon_flags}取得) 時才有效,且無法從指令行使用。
DaemonPort選項= 選項
SndBuf大小
TCP 傳送緩衝區的大小。
RcvBuf大小
每個常駐程式的 TCP 接收緩衝區子項大小上限,請參閱 MaxDaemon子項
DeliveryMode
每個常駐程式的遞送模式,請參閱 DeliveryMode
refuseLA
每個常駐程式的 RefuseLA 。
delayLA
每個常駐程式的 DelayLA 。
queueLA
每個常駐程式的 QueueLA 。
DefaultAuth資訊 包含送出連線的預設鑑別資訊的檔名。 此檔案必須包含使用者 ID、授權 ID、密碼 (純文字) ,以及要在個別行上使用的領域,且只能由 root (或授信使用者) 讀取。 如果未指定領域,則會使用 $j
DefaultChar設定= 字集 當具有 8 位元字元但不是 MIME 格式的訊息轉換為 MIME (請參閱 EightBit模式 選項) 時,必須在 Content-Type: 標頭中包含字集。 此字集通常是從郵寄程式描述子的 字集 = 欄位設定。 如果未設定,則會使用此選項的值。 如果未設定此選項,則會使用值 unknown-8bit
DataFileBufferSize= 臨界值 在記憶體型佇列資料檔變成磁碟型之前,以位元組為單位設定 臨界值 。 預設值為 4096 個位元組。
DeadLetterDrop= file 定義全系統 dead.letter 檔案的位置,先前寫在 /usr/tmp/dead.letter。 如果未設定此選項,則 sendmail 將不會嘗試儲存至系統層面的 dead.letter 檔案,以防它無法將郵件退回給使用者或郵差。 相反地,它會重新命名 QF 檔案。
DefaultUser= user:group 將郵寄程式的預設使用者 ID 設為 user: group。 如果省略 groupuser 是使用者名稱 (相對於數值使用者 ID) ,則會使用該使用者的 /etc/passwd 檔案中列出的預設群組作為預設群組。 使用者 都可以是數值。 郵寄程式定義中沒有 S 旗標的郵寄程式將以這個使用者身分執行。 未指定時,預設值為 1:1。 該值也可以作為符號使用者名稱提供。
DeliveryMode= x
以模式 x交付。 合法模式為:
i
以互動方式 (同步) 交付。
b
在背景中遞送 (非同步)。
q
只將訊息排入佇列 (在佇列執行期間遞送)。
d
延遲遞送及所有對映查閱 (在佇列執行期間遞送)。
如果未指定任何選項,則預設為 b ; 如果已指定但未提供引數,則為 (例如, OD 相當於 奧迪)。 -v 指令行旗標會將此設為
附註: 基於內部原因,如果啟用可以拒絕或刪除收件者的 milter ,則 無法運作。 在該情況下,模式會變更為 b
DialDelay= 休眠時間 如果在設定呼叫之前開啟連線,則隨選撥號網路連線可以看到逾時。 如果設為間隔,且第一次嘗試連線時連線逾時,則 sendmail 會休眠此時間量,然後再試一次。 這應該會讓您的系統有時間建立與服務提供者的連線。 單位預設為秒,因此 DialDelay=5 會使用 5 秒延遲。 如果未指定,則預設值為 0 (不重試)。
DontBlameSendmail = option , option , ...

為了避免因 world-and group-writable 檔案及目錄所導致的可能破解嘗試, sendmail 會在開啟其大部分支援檔案時執行偏執檢查。 不過,如果系統必須使用群組可寫入 /etc 目錄來執行,則必須關閉此檢查。 請注意,關閉此檢查將使您的系統更容易遭到攻擊。 引數是關閉檢查的個別選項:

安全
沒有特殊處理。
AssumeSafe
假設 奇 own 呼叫限制為 root。 因為部分系統設定為允許一般使用者將其檔案提供給部分檔案系統上的其他使用者,所以 sendmail 通常無法假設給定的檔案是由擁有者所建立,特別是當它位於可寫入目錄時。 如果您知道系統上的檔案 giveaway 受限,則可以設定此旗標。
ClassFileInUnsafeDirPath
讀取類別檔 (使用配置檔中的 F 行) 時,容許位於不安全目錄中的檔案。
DontWarnForwardFileInUnsafeDirPath
防止記載不存在轉遞檔案的不安全目錄路徑警告。
 
ErrorHeaderInUnsafeDirPath
容許 ErrorHeader 選項中指定的檔案位於不安全目錄中。
FileDeliveryToHard鏈結
容許遞送至固定鏈結的檔案。
FileDeliveryToSym鏈結
容許遞送至符號鏈結的檔案。
ForwardFileInUnsafeDirPath
容許不安全目錄中的 .forward 檔案。
ForwardFileInUnsafeDirPath安全
容許位於不安全目錄中的 .forward 檔案包括程式及檔案的參照。
 
ForwardFileIngroupWritableDirPath
容許群組可寫入目錄中的 .forward 檔案。
GroupWritableAliasFile
容許群組可寫入別名檔。
GroupWritableDirPath安全
變更 不安全的目錄 的定義,以將群組可寫入目錄視為安全。 全域可寫入目錄一律不安全。
GroupWritableForwardFile安全
接受群組可寫入 .forward 檔案。
GroupWritableIncludeFile安全
接受群組可寫入 :include: 檔案。
HelpFileinUnsafeDir路徑
容許 HelpFile 選項中指定的檔案位於不安全的目錄中。
IncludeFileInUnsafeDirPath
容許不安全目錄中的 :include: 檔案。
 
IncludeFileInUnsafeDirPath安全
容許位於不安全目錄中的 .forward 檔案包括程式及檔案的參照。
IncludeFileIngroupWritableDirPath
容許群組可寫入目錄中的 :include: 檔案。
InsufficientEntropy
即使未適當地植入 OpenSSL 的 PRGN ,也請嘗試使用 STARTTLS。
LinkedAliasFileInWritableDir
容許別名檔是可寫入目錄中的鏈結。
LinkedClassFileInWritableDir
容許類別檔是可寫入目錄中的鏈結。
LinkedForwardFileInWritableDir
容許 .forward 檔案是可寫入目錄中的鏈結。
LinkedIncludeFileInWritableDir
容許 :include: 檔案是可寫入目錄中的鏈結。
LinkedMapInWritableDir
容許對映檔是可寫入目錄中的鏈結。
LinkedServiceSwitchFileInWritableDir
即使目錄可寫入,也容許服務切換檔案成為鏈結。
 
MapInUnsafeDir路徑
在不安全的目錄中容許對映 (例如 雜湊btreedbm 檔案)。
NonRootSafeAddr
如果 sendmail 不在執行中,請勿將檔案和程式交付標示為不安全。
RunProgramInUnsafeDirPath
執行位於可寫入目錄中的程式。
RunWritable程式
執行群組可寫入或全域可寫入的程式。
TrustSticky位元
如果在目錄上設定組合位元,則容許群組或全域可寫入目錄。 請勿在不允許在目錄上使用組合位元的系統上設定此項。
WorldWritableAliasFile
接受全域可寫入的別名檔。
WriteMapToHard鏈結
容許寫入固定鏈結的對映。
WriteMapToSym鏈結
容許寫入屬於符號鏈結的對映。
 
WriteStatsToHard鏈結
容許狀態檔成為固定鏈結。
WriteStatsToSym鏈結
容許狀態檔成為符號鏈結。

安全 是預設值。 上面說明這些旗標的詳細資料。 不建議使用此選項。

DontExpand名稱 標準指出郵件訊息中使用的所有主機位址必須完全標準。 例如,如果您的主機名為 Cruft.Foo.ORG ,且其別名也為 FTP.Foo.ORG,必須隨時使用名稱 Cruft.Foo.ORG 。 這是在主機名稱標準化期間施行 ($[... $] 查閱)。 如果設定此選項,則會忽略通訊協定,並使用錯誤的名稱。 不過, IETF 正在朝向變更此標準,因此行為可能變成可接受。 請注意,主機下游仍然可以將位址重新撰寫成真正的標準名稱。
DontInit群組 如果設定的話, sendmail 會避免使用 initgroups (3) 呼叫。 如果您正在執行 NIS ,則會導致循序掃描 groups.byname 對映,這會導致您的 NIS 伺服器在大型網域中嚴重超載。 其成本是針對使用者找到的唯一群組將是其主要群組 (密碼檔中的群組) ,這將使檔案存取許可權稍微受限。 對沒有群組清單的系統沒有影響。
DontProbe介面 Sendmail 通常會在機器啟動時尋找所有作用中介面的名稱,並將其名稱新增至已知主機別名的 $=w 類別。 如果您有大量虛擬介面,或如果 DNS 反向查閱緩慢,這可能很耗時。 這個選項會關閉探測。 不過,您必須確定透過某個其他機制,在 $=w 類別中包含所有變式名稱。
DontPrune路徑 Sendmail 會在傳送錯誤訊息時嘗試刪除任何不必要的明確路徑 (如 RFC 1123 S 5.2.6中所討論)。 例如,將錯誤訊息傳送至 <@known1,@known2,@known3:user@unknown>時, sendmail 將會除去 @known1,@known2 ,以便儘可能直接遞送。 不過,如果設定 RR 選項,則會停用此選項,而且郵件會傳送至路徑中的第一個位址,即使知道稍後的位址也一樣。 如果您在防火牆後面被捕,這可能很有用。
DoubleBounce位址 = error-address 如果傳送錯誤訊息時發生錯誤,請將錯誤報告傳送至指出的位址。 這稱為 雙彈跳 ,因為它是嘗試傳送另一個錯誤退件時發生的錯誤退件。 位址是在遞送時展開的巨集。 如果未設定,則預設為 postmaster
項目 說明
EightBit模式= 動作
設定 8 位元資料的處理。 有兩種八位元資料:
  • 使用 BODY=8BITMIME ESMTP 宣告或 -B8BITMIME 指令行旗標宣告為 8 位元的資料
  • 未宣告的 8 位元資料,這是剛好是 8 位元的輸入。
有三個基本作業可能發生:
  • 未宣告的 8 位元資料可以自動轉換為 8BITMIME。
  • 未宣告的 8 位元資料可以依現狀傳遞,不需要轉換成 MIME。
  • 宣告的 8 位元資料可以轉換為 7 位元,以傳輸至 non-8BITMIME 郵寄程式。

可能的動作為:

s
拒絕未宣告的 8 位元資料 (嚴格)。
m
將未宣告的 8 位元資料轉換成 MIME (MIME)。
p
傳遞未宣告的 8 位元資料 (pass)。

在所有情況下,視需要將適當宣告的 8BITMIME 資料轉換為 7BIT 。

ErrorHeader= 檔案或訊息 在錯誤訊息前面附加指出的訊息。 如果它以斜線 (/) 開頭,則會假設它是包含訊息之檔案的路徑名稱,這是建議的設定。 否則,它是文字訊息。 錯誤檔案可能包含本端郵差的名稱、電子郵件位址及/或電話號碼,該郵差可以為一般使用者提供協助。 如果選項遺漏或為空值,或它所命名的檔案不存在或無法讀取,則不會列印任何訊息。
ErrorMode=x

使用模式 x來刪除錯誤。 x 的值如下:

p
列印錯誤訊息 (預設值)。
q
無訊息,只提供結束狀態。
m
郵件回送錯誤。
w
寫回錯誤 (如果使用者未登入,則為郵件)。
e
傳回郵件錯誤,並一律提供零結束狀態。
.llbackMXhost= fallbackhost 如果指定的話, fallbackhost 會像每個主機上的極低優先順序 MX 一樣運作。 這預期由網路連線功能不佳的網站使用。 由於暫時位址失敗 (例如 DNS 失敗) 而無法遞送的訊息也會移至 FallBackMX 主機。
FallBackSmartHost= 主機名稱 如果指定的話,則會在每一部主機的最後努力中使用 FallBackSmartHost
FastSplit 如果設為大於零的值 (預設值為 1) ,則在起始排序位址時,即第一次遞送嘗試時,會暫停對位址的 MX 查閱。 這通常會導致更快的封套分割,除非 MX 記錄在本端 DNS 快取中隨時可用。
ForkEach工作 如果已設定,請在個別處理程序中遞送從佇列執行的每一個工作。 如果您記憶體不足,請使用此選項,因為在處理佇列時,預設值會耗用大量記憶體。
ForwardPath= 路徑 設定用於搜尋使用者 .forward 檔案的路徑。 預設值為 $z/.forward。 使用自動裝載器的部分網站可能偏好將此變更為 /var/forward/$u ,以搜尋與系統目錄中使用者同名的檔案。 它也可以設為一連串以冒號區隔的路徑。 Sendmail 會在它可以順利且安全地開啟的第一個檔案上停止。 例如,
/var/forward/$u:$z/.forward
會先在 /var/forward/username 中搜尋,然後在 ~username/.forward中搜尋,但前提是第一個檔案不存在。
HelpFile= 檔案 指定 SMTP 的說明檔。 如果未指定檔名,則會使用 helpfile
HoldExpensive 如果送出的郵寄程式標示為昂貴,請不要立即連接。 這需要在中編譯佇列,因為它將取決於實際傳送郵件的佇列執行處理程序。
HostsFile= 路徑 指定主機資料庫的路徑,通常是 /etc/hosts。 只有在 sendmail 正在標準化位址時,以及只有在 檔案 位於 主機 服務交換器項目時,才會諮詢此選項。 尤其是在查閱主機位址時,絕不會使用這個檔案; 這是在系統 gethostbyname (3) 常式的控制下。
HostStatusDirectory= 路徑 設定長期主機狀態資訊的位置。 設定後,所有 sendmail 處理程序將共用主機狀態的相關資訊 (例如主機已關閉或不接受連線)。 通常,此資訊僅保留在單一佇列執行中。 此選項需要至少為 1 的連線快取才能運作。 如果選項以前導 /開頭,則它是絕對路徑名稱; 否則,它是相對於郵件佇列目錄。 想要持續主機狀態的站台建議值為 .hoststat,它是佇列目錄的子目錄。
IgnoreDots 忽略送入訊息中的點。 這在讀取 SMTP 郵件時一律停用,因此一律接受點。
LDAPDefaultSpec= 規格 設定 LDAP 對映的預設對映規格。 該值應該只包含 LDAP 特定設定,例如 -h host -p port -d bindDN。 除非個別對映規格置換設定,否則這些設定將用於所有 LDAP 對映。 在定義任何 LDAP 對映之前,應該先設定此選項。
LogLevel= n 將記載層次設為 n。 預設為 9
Mxvalue 將巨集 x 設為值。 這僅適用於從指令行使用。 -M 旗標是偏好的。
MatchGECOS GECOS 欄位上容許模糊比對。 如果設定此旗標,且一般使用者名稱查閱失敗 (亦即,沒有具有此名稱的別名,且 getpwnam 失敗) ,請在密碼檔中循序搜尋 GECOS 欄位中的相符項目。 這也需要在編譯期間開啟 MATCHGECOS 。 不建議使用此選項。
附註: 只對 NIS 模組和系統中的本端使用者執行模糊比對。
MaxAlias遞迴= N N 是別名遞迴的深度上限。 預設值為 10
MaxDaemon子項= N 如果設定,當 sendmail 有超過 N 個子項處理來信或自動佇列執行時,將會拒絕連線。 這不會限制送出連線的數目。 如果未設定,則子項數目沒有限制; 系統負載平均值將控制此情況。

如果使用預設 DeliveryMode (背景) ,則 sendmail 可能會建立幾乎無限制的子項數目 (視交易數目及郵件接收及郵件遞送的相對執行時間而定)。 如果應該施行限制,則必須使用背景以外的 DeliveryMode 。 如果未設定,則子項數目沒有限制,亦即,系統負載平均值會控制此項。

MaxHeaders長度= N N 是所有標頭總和的長度上限。 這可用來防止阻斷服務攻擊。 預設值為無限制。
MaxHop計數= N 中繼站數上限。 已處理超過 N 次的訊息會假設在迴圈中且被拒絕。 預設值為 25
MaxMessage大小= N 指定要在 ESMTP EHLO 回應中通告的訊息大小上限。 大於 N 的訊息將被拒絕。
MaxMimeHeaderLength = N [/M] 將某些 MIME 標頭欄位值的長度上限設為 N 個字元。 如果指定 M ,則採用參數的特定標頭將使用 M 而非 N。 如果未指定 M ,則這些標頭將使用 N的一半。 依預設,這些值為 0,表示未執行任何檢查。
MaxQueueRunSize= N N 是將在單一佇列執行中處理的工作數目上限。 如果未設定,則沒有大小限制。 如果您有非常大的佇列或非常短的佇列執行間隔,這可能是不穩定的。 不過,因為會執行佇列目錄順序中的前 N 個工作 (而不是 N 最高優先順序工作) ,所以應該盡可能將其設為高值,以避免遺失在佇列目錄中發生延遲的工作。
附註: 這個選項也會限制 郵件所列印的項目數。 也就是說,如果 MaxQueueRunSize 設為大於零的值 N ,則每個佇列群組只會列印 N 個項目。
MaxRecipientsPerMessage = N

SMTP 交易中每個訊息將接受的收件者數目上限。 如果未設定,則每個封套的收件者數目沒有限制。

附註: 將此設得太低會干擾從使用 SMTP 進行起始提交的 MUA 傳送郵件。
MeToo 即使我在別名擴充中,也要傳送給我。 此選項已淘汰,將從未來版本中移除。
MinFree區塊數= N 在透過 SMTP 接受電子郵件之前,在保留佇列檔案的檔案系統上至少設定 N 個可用區塊。 如果空間不足, sendmail 會對 MAIL 指令提供 452 回應,並邀請寄件者稍後重試。
MinQueue經歷時間= 經歷時間 不要處理任何佇列中少於所指示時間間隔的工作。 這會藉由經常處理佇列而不經常嘗試工作來對系統產生負擔,以提升系統回應性。 預設單位是分鐘。
MustQuote字元= s 設定在 phrase <address> 語法的詞組部分的完整名稱中使用時必須以引號括住的字元清單。 預設值為 '.。 字元 @,;:\()[] 一律會新增至此清單。
NoRecipient動作

當您收到沒有有效收件者標頭 (例如 To:Cc:Bcc:) 的訊息時要採取的動作。 它可以是:

在未修改的情況下傳遞訊息,這違反通訊協定。
新增至
新增 To: 標頭,其中包含它可以在封套中找到的任何收件者 (可能公開 Bcc: recipients)。
新增至未公開
新增標頭 To: undisclosed-recipients:; ,使標頭成為合法,而不揭露任何內容。
新增-密件副本
新增空的 Bcc: header。
OldStyle標頭 假設標頭可能採用以空格區隔名稱的舊格式。 這實際上會開啟調適性演算法: 如果任何收件者位址包含逗點、括弧或角括弧,則會假設逗點已存在。 如果此旗標未開啟,則只會以逗點區隔名稱。 標頭一律在名稱之間以逗點輸出。 預設為 off
OperatorChars= 字元清單 視為運算子的字元清單,即定界記號的字元。 所有運算子字元本身都是記號; 非運算子字元的序列也是記號。 空格字元會區隔記號,但不是記號本身。 例如, AAA.BBB 有三個記號,但 AAA BBB 有兩個。 如果未設定, OperatorChars 會預設為 .:@[]"。 此外,字元 "()<>,;" 一律是運算子。 請注意,在任何規則集之前,必須在配置檔中設定 OperatorChars
PidFile= 檔名 設定 pid 檔案的 檔名 。 預設值為 PATHSENDMAILPID。 檔名在開啟之前已巨集展開。
PostmasterCopy= postmaster 如果設定,則會將錯誤訊息副本傳送至指名的 郵差。 只會傳送失敗訊息的標頭。 不會傳送由具有負優先順序的訊息所產生的錯誤。 因為大部分錯誤都是使用者問題,所以在大型網站上這不是好主意,而且可能包含隱私權違規。 位址是在遞送時展開的巨集。 預設為 no postmaster copies
PrivacyOptions= opt , opt , ...

設定隱私權選項。 這些是堅持更嚴格遵循 SMTP 通訊協定的方法。 選項可以是下列其中一項:

公用 (public)
容許開啟存取權。
Needmailhelo
MAIL之前,請先堅持 HELOEHLO 指令。
內克斯彭赫洛
EXPN之前,請先堅持 HELOEHLO 指令。
noexpn
不容許 EXPN,意指動詞。
尼德夫菲埃洛
VRFY之前,請先堅持 HELOEHLO 指令。
諾弗爾菲
不容許 VRFY
諾恩
不容許 ETRN
noverb
不容許 VERB
restrictmailq
限制 郵件 指令。 如果 郵件 受限,則只有與佇列目錄相同的群組中的人員才能列印佇列。
restrictqrun
限制 -q 指令行旗標。 如果佇列執行受限,則只有 root 及佇列目錄的擁有者可以執行佇列。
無收據
不傳回成功 DSN。
無回
不傳回具有 DSN 之訊息的內文。
戈阿瓦
不容許 SMTP 狀態查詢。 設定 無收據restrictmailqrestrictqrun諾恩無回以外的所有旗標。
authwarnings
X-鑑別-警告: 標頭放置在訊息中。 「鑑別警告」會針對可能指出嘗試盜用郵件系統 (例如使用非標準佇列目錄) 的各種狀況新增警告。
選項 說明
ProcessTitle字首= 字串 ps 清單上顯示的程序標題前面加上 。 將處理巨集字串。
QueueDirectory= dir 使用指名的 迪爾 作為佇列目錄。 若要使用多個佇列,請提供以星號結尾的值。 例如,輸入 /var/spool/mqueue/q* 將使用 /var/spool/mqueue 中以 q 開頭的所有目錄或目錄符號鏈結作為佇列目錄。 當 sendmail 正在執行時,請勿變更佇列目錄結構。
QueueFactor= factor 在對映函數中使用 因素 作為乘數,以決定何時只將工作排入佇列,而不執行它們。 此值除以現行負載平均值與負載平均值限制 (QueueLA 選項) 之間的差異,以決定將傳送的訊息優先順序上限。 預設值為 600000
QueueLA= LA 當系統負載平均值超出 LA時,只會將訊息排入佇列,不要嘗試傳送它們。 預設為 8 乘以系統上線上的處理器數目 (如果可以判定的話)。
QueueSort順序= 演算法

設定用於排序佇列的 演算法 。 只會使用值的第一個字元。 合法值如下:

主機
依第一個收件者的第一個主機名稱排序。 更好地利用連線快取,但可能傾向於處理傳送至單一主機的低優先順序訊息,而不是傳送至數個主機的高優先順序訊息; 它可能不應用於慢速網路鏈結。
filename
依佇列檔名稱排序。 在啟動佇列執行之前,節省讀取所有佇列項目的額外負擔。
時間
依提交時間訂購。 不應該使用,因為它容許大型大量郵件在較小的個人郵件之前離開。 可能適用於具有非常快速連線的特定主機。
優先順序
依訊息優先順序排序。 此為預設值。
QueueTimeout= 逾時 不要使用。 使用 Timeout.queuereturn
RandFile 包含隨機資料的檔案名稱或 Socket 名稱 (如果使用 EGD 的話)。 必要的字首 egd:file: 會指定類型。 如果未設定編譯旗標 HASURANDOM ,則 STARTTLS 需要此檔名 (請參閱 /user/samples/tcpip/sendmail/README)。
ResolverOptions= options
設定解析器選項。 可以使用 + 來設定值,並使用-來清除值。 可用的旗標如下:
  • 除錯
  • aaonly
  • 烏謝夫茨
  • 主要
  • 因特茨
  • 遞迴
  • defnames
  • Stayopen
  • dnsrch
可以指定字串 HasWildcardMX (不含 +-) ,以在執行名稱標準化時關閉與 MX 記錄的比對。
附註: 在舊版中,這個選項指出名稱伺服器已回應,以便接受位址。 這已取代為檢查是否在主機服務的服務交換器項目中列出 DNS 方法。
RrtImpliesDsn 如果設定此選項,則 ReturnReceipt-To: 標頭會導致 DSN 的要求傳送至封套傳送者,如 RFC1891所要求,而不是傳送至標頭中給定的位址。
RunAs使用者= 使用者 使用者參數可以是使用者名稱 (在 /etc/passwd中查閱) 或數值使用者 ID。 任一表單都可以附加 :groupgroup 可以是數值或符號。 如果設為非零/非 root 值,則在啟動之後不久, sendmail 會變更為此使用者 ID。 這可避免特定類別的安全問題。 不過,這表示所有 .forward:include: 檔案都必須可供指出的使用者讀取,且所有要寫入的檔案都必須可供 user寫入。 此外,除非設定選項 DontBlameSendmail =NonRootAddrSafe ,否則所有檔案和程式交付都會標示為不安全,在此情況下,會以 使用者身分執行遞送。 它也與 SafeFile環境 選項不相容。 它實際上可能不會對一般系統上的安全增加太多,而且實際上可能會降低安全,因為必須放寬其他檔案許可權。 不過,在防火牆及其他使用者沒有帳戶且別名檔受到良好限制的地方,它可能很有用。
RecipientFactor= 事實 指出的 事實或新增至每一個收件者的優先順序,從而降低工作的優先順序。 此值會懲罰具有大量收件者的工作。 預設為 30000
RefuseLA= LA 當系統平均負載超出 LA時,拒絕送入的 SMTP 連線。 預設值為 12 乘以系統上線上的處理器數目 (如果可以判定的話)。
RetryFactor= 事實 每次處理工作時,都會將 事實或新增至優先順序。 每次處理工作時,其優先順序會因所指出的值而降低。 在大部分環境中,這應該是正數,因為已關閉的主機可能會關閉很長時間。 預設值為 90000
SafeFile環境= dir 如果設定此選項,在執行任何檔案寫入之前, sendmail 會對指出的目錄執行 chroot (2) 呼叫。 如果使用者指定的檔名以 迪爾開頭,則在寫入之前會除去該部分路徑名稱。 例如,如果 SafeFile環境 變數設為 /safe ,則 /safe/logs/file/logs/file 的別名實際上會指出相同的檔案。 此外,如果設定此選項, sendmail 將拒絕遞送至符號鏈結。
SaveFrom行 行儲存在標頭前面。 它們會被假設為冗餘且被捨棄。
SendMime錯誤 如果已設定,請以 MIME 格式傳送錯誤訊息 (如需詳細資料,請參閱 RFC2045 和 RFC1344 )。 如果已停用, sendmail 將不會傳回 DSN 關鍵字以回應 EHLO ,且不會如 RFC1891中所述執行「遞送狀態通知」處理。
ServerCert檔案 包含伺服器憑證的檔案。 當 sendmail 作為伺服器時,會使用此憑證。
ServerKey檔案 包含屬於伺服器憑證之私密金鑰的檔案。
ServiceSwitch檔案= 檔名 如果您的主機作業系統具有服務交換器摘要,則會諮詢該服務,並忽略此選項。 否則,這是提供用來實作特定服務之方法清單的檔案名稱。 語法是一連串的行,每一行都是一連串的單字。 第一個單字是服務名稱,後面的單字是服務類型。 sendmail 直接諮詢的服務是 別名主機。 服務類型可以是 DNS尼斯檔案。 必須先在中編譯適當的支援,然後才能參照服務。 如果未指定 ServiceSwitch檔案 ,則會預設為 /etc/mail/service.switch。 如果該檔案不存在,則預設參數為
aliases       files
hosts         dns nis files
預設檔案為 /etc/mail/service.switch
SevenBit輸入 將輸入刪除為七個位元,以與舊系統相容。 這應該是不必要的。
SingleLineFromHeader 如果已設定,則會將具有內嵌新行的 來源: 行解除折到一行。 這是為了解決 Lotus Notes 中顯然無法瞭解合法包裝的 RFC822 標頭的錯誤。
SingleThread遞送 如果已設定,用戶端機器將永不嘗試同時開啟與單一伺服器機器的兩個 SMTP 連線,即使在不同的處理程序中也是如此。 也就是說,如果另一個 sendmail 已在與某個主機交談,則新的 sendmail 將不會開啟另一個連線。 雖然這會減少另一部機器上的負載,但可能會導致郵件延遲。 例如,如果某個 sendmail 正在遞送巨型訊息,則其他 sendmail 處理程序甚至無法傳送小型訊息。 此外,每個連線也需要另一個檔案描述子 (針對鎖定檔) ,因此您可能必須減少 ConnectionCacheSize 選項,以避免耗盡每個處理程序檔案描述子。 需要 HostStatusDirectory 選項。
SmtpGreeting訊息 = 訊息 指定 SMTP 伺服器啟動時要列印的 訊息

預設為 $j Sendmail $v ready at $b

StatusFile= 檔案 具名 檔案中的日誌摘要統計資料。 如果未指定檔名,則會使用 statistics 。 如果未設定,則不會儲存摘要統計資料。 此檔案的大小不會增加。 可以使用 mailstats (8) 程式來列印它。
SuperSafe 一律實例化佇列檔,即使您要嘗試立即遞送。在任何情況下, Sendmail 一律會在將控制權交還給用戶端之前實例化佇列檔。 這應該一律設定。
TempFile模式= 模式 指定佇列檔的檔案模式。 依預設會以八進位來解譯它。 預設值為 0600
Timeout.type= 逾時 設定 逾時 值。 如需相關資訊,請參閱 讀取逾時
TimeZone規格= tzinfo 將當地時區資訊設為 tzinfo。 如果未設定此項,則會清除 TZ 環境變數,並使用系統預設值。 如果設定但為空值,則會使用使用者的 TZ 變數。 如果設定且非空值,則 TZ 變數會設為此值。
TrustedUser= 使用者 user 參數可以是使用者名稱 (在 /etc/passwd中查閱) 或數值使用者 ID。 檔案所有權及啟動常駐程式的授信使用者。 如果已設定,則產生的別名資料庫及控制 Socket (如果已配置) 將自動由這個使用者擁有。
TryNullMXList 如果此系統是給定主機的 best (亦即最低喜好設定) MX ,則其配置規則應該偵測此狀況,並將郵件轉遞至 UUCP 資訊來源、將其視為本端,等等,以特別處理該狀況。 不過,在某些情況下,例如在具有網際網路防火牆的情況下,您可能想要嘗試直接連接至該主機,就好像它完全沒有 MX 記錄一樣。 設定此選項會導致 sendmail 嘗試此動作。 不幸的是,您配置中的錯誤可能診斷為「主機不明」或「訊息逾時」,而不是更有意義的內容。 不建議使用此選項。
UnixFrom行= fromline 定義當 sendmail 必須新增 UNIX-style From 行 (例如,開頭為 From<space>user的行) 時所使用的格式。 預設為 From $g $d。 除非您的系統使用不同的信箱格式,否則請勿變更此項目。
UnsafeGroup寫入 如果設定的話,群組可寫入的 :include:.forward 檔案會被視為不安全,它們將無法參照程式或直接寫入檔案。 全域可寫入 :include:.forward 檔案一律不安全。
UserDatabaseSpec = udbspec 使用者資料庫規格。
詳述 以「詳細」模式執行。 如果已設定此選項, sendmail 會調整選項 HoldExpensiveDeliveryMode ,讓所有郵件完全在單一工作中遞送,讓您可以看到整個遞送程序。 絕不應在配置檔中設定 詳細 選項; 它只供指令行使用。
XscriptFileBufferSize = 臨界值 在記憶體型佇列記錄檔變成磁碟型之前,定義 臨界值 (以位元組為單位)。 預設值為 4096 個位元組。

所有選項都可以使用 -O-o 旗標在指令行上指定,但大部分會導致 sendmail 放棄其 setuid 許可權。 不會導致此情況的選項有 SevenBit輸入EightBitModeMinFreeBlocksCheckpointIntervalDeliveryModeErrorModeIgnoreDotsSendMimeErrorsLogLevelOldStyleHeadersPrivacyOptionsSuperSafeVerboseQueueSortOrderMinQueueAgeDefaultCharSetDialDelayNoRecipientActionColonOkInAddrMaxQueueRunSizeSingleLineFromHeaderAllowBogusHELO。 實際上,指令行上給定的 PrivacyOptions 會新增至配置檔中已指定的那些選項,且無法重設。 此外,在定義 rs 巨集時,也會將 M (定義巨集) 視為安全。

P-優先順序定義

"Precedence:" 欄位的值可以使用 P 控制行來定義。 此欄位的語法如下:
Pname=num

在 "Precedence:" 欄位中找到名稱時,訊息類別會設為num。 數字越高表示優先順序越高。 小於零的數字具有特殊內容,如果在處理期間發生錯誤,則不會傳回訊息內文; 這預期用於「大量」郵件,例如透過郵寄清單。 預設優先順序為零。 例如,預設優先順序清單為:

  • Pfirst-class=0
  • Pspecial-delivery=100
  • Plist=-30
  • Pbulk=-60
  • Pjunk=-100

V-配置版本層次

為了提供與舊配置檔的相容性,已新增 V 這一行來定義配置檔的基本語意。 這是 的長期支援。 在未來版本中可能會移除這些相容性特性。

附註: 配置版本 層次 與配置檔版本 數字無關。 例如,版本 number 8.9 配置檔使用版本 level 8 配置。

「舊」配置檔定義為版本層次 1。

版本層次 2 檔案會進行下列變更:

  1. 如果可辨識名稱,則主機名稱標準化 ($[... $]) 會附加點。 這可讓配置檔判斷是否發生相符的情況。 這會使用 -a. 來起始設定主機對映 旗標。 您可以透過明確宣告對映,將它重設為任何其他值。
  2. 在整個處理期間,預設主機名稱延伸是一致的。 在處理中的某些點期間,透過新增本端網域名稱,版本層次 1 配置已關閉網域延伸。 版本層次 2 配置包含尾端點,指出名稱已經是標準名稱。
  3. 非別名的本端名稱會透過新的識別規則集 5 傳遞。 這可用來附加本端中繼。 透過使用 @ 符號作為字首 (例如, @vikki) 來解析本端名稱,可以防止此情況。 將會透過規則集 5 傳遞解析為本端郵寄程式且使用者名稱為 vikki 的項目,但 @vikki 的使用者名稱將會除去 @ 字首,不會傳遞至規則集 5 ,但會被視為與前一個範例相同。 例外是這可能用來實作一個原則,其中傳送至 vikki 的郵件由中央中心處理,但傳送至 vikki@localhost 的郵件會直接遞送。

版本層次 3 檔案容許 # 在所有行上起始註解。 異常狀況為反斜線跳出 # 記號及 $# 語法。

版本層次 4 檔案相當於層次 3 檔案。

版本層次 5 檔案會將 $w 的預設定義變更為主機名稱的第一個元件。

版本層次 6 配置檔會將許多本端處理選項 (亦即,別名化及符合 | 字元開頭的位址) 變更為郵寄程式旗標。 這可讓您對特殊本端處理程序進行精細控制。 版本層次 6 檔案也可能使用長選項名稱。 在具有較低版本號碼的配置檔中, ColonOkInAddr 選項 (容許位址本端部分中有冒號) 預設為 on 。 配置檔需要額外的「智慧」,才能適當地處理 RFC 822 群組建構。

版本層次 7 配置檔使用新的選項名稱來取代舊巨集。

選項 舊巨集
$e 變成 SmtpGreeting訊息
$1 變成 UnixFrom行
$o 變成 OperatorChars

在第 7 版之前,已採用 F= q 旗標 (SMTP VRFY 指令使用回覆值 250 而非 252)。

版本層次 8 配置檔容許規則集行左側的 $#

版本層次 9 配置檔容許在規則集中使用括弧,這表示它們不會被視為註解而被移除。

V 行可能有一個選用的 /vendor 變數,指出配置檔使用供應商特定的修改。 您可以使用/Berkeley以指出檔案使用 Berkeley sendmail 用語。

K-金鑰檔宣告

可以使用下列這一行來定義特殊對映:
Kmapname mapclass arguments

mapname 是在重新編寫規則中用來參照此對映的名稱。 mapclass 是對映類型的名稱; 這些會編譯成 sendmail。 引數會根據類別來解譯; 通常會有單一引數來命名包含對映的檔案。

使用下列語法來參照對映:
$( map key $@ arguments $: default $)

其中可以省略引數或預設部分之一或兩者。 $@ 引數可能出現多次。 指出的索引鍵和引數會傳遞至適當的對映函數。 如果它傳回值,則會取代輸入。 如果未傳回值且已指定預設值,則預設值會取代輸入。 否則,輸入不會變更。

在取代對映值或預設值期間,對應引數會取代字串 "%n" (其中 n 是數字)。 引數零一律是資料庫索引鍵。 例如,規則:
R$- ! $+     $: $(uucp $1 $@ $2 $: %1 @ %0 . UUCP $)
在 (使用者定義) UUCP 對映中查閱 UUCP 名稱。 如果找不到,它會將它轉換成 ". UUCP" 形式。 資料庫可能包含如下記錄:
decvax       %1@ %0.DEC.COM
research     %1@%0.ATT.COM
附註: 預設條款永不執行此對映。
同時具有名稱及類別 "host" 的內建對映是主機名稱標準化查閱。 因此,語法如下:
$(host hostname$)
等於:
$[hostname$]

有許多已定義的類別。

類別 說明
dbm 使用 ndbm(3) 程式庫進行資料庫查閱。 Sendmail 必須在定義 NDBM 的情況下編譯。
btree 使用 btree 介面對 Berkeley DB 程式庫進行資料庫查閱。 Sendmail 必須在定義 NEWDB 的情況下編譯。
hash 使用 Berkeley DB 程式庫的雜湊介面來查閱資料庫。 Sendmail 必須在定義 NEWDB 的情況下編譯。
NIS NIS 查閱。 Sendmail 必須在定義 NEWDB 的情況下編譯。
LDAP LDAP X500 目錄查閱。 Sendmail 必須在定義 LDAPMAP 的情況下編譯。 對映支援 ldapsearch 程式的大部分標準引數及指令行引數。 依預設,如果單一查詢符合多個值,除非設定 -z (值分隔字元) 對映旗標,否則只會傳回第一個值。 此外, -1 對映旗標會將多值傳回視為沒有相符項。
ldapx LDAP X500 目錄查閱。 Sendmail 必須使用已定義的 LDAPMAP 進行編譯。 對映支援 ldapsearch 程式的大部分標準引數及指令行引數。
文字 文字檔查閱。 文字檔的格式由 -k (索引鍵欄位號碼)、 -v (值欄位號碼) 及 -z (欄位定界字元) 旗標所定義。
內部符號表查閱。 內部用於別名化。
隱含 真的應該稱為「別名」。 這是用來取得別名檔的預設查閱,如果未指定別名檔的類別,則這是預設值。
使用者 使用 getpwnam(3)來查閱使用者。 -v 旗標可用來指定要傳回的欄位名稱 (雖然通常只用來檢查使用者是否存在)。
主機 標準化主機網域名稱。 給定主機名稱,它會呼叫名稱伺服器來尋找該主機的標準名稱。
bestmx 傳回給定作為索引鍵之主機名稱的最佳 MX 記錄。 一律偏好現行機器。 例如,如果現行機器是列為最低喜好設定 MX 記錄的其中一個主機,則保證會傳回它。 這可用來找出此機器是否為 MX 記錄的目標,並在該基礎上接受郵件。 如果提供 -z 旗標,則會傳回所有 MX 名稱 (以給定的定界字元區隔)。
順序 ` K ' 行上的引數是對映清單; 產生的對映會依序搜尋引數對映,直到找到所指出索引鍵的相符項為止。 例如,如果索引鍵定義為:
Kmap1 ...
Kmap1 ...
Kseqmap sequence map1 map2

然後,針對 "seqmap" 的查閱會先在 map1中執行查閱。 如果找到,它會立即傳回。 否則,相同的金鑰會用於 map2。

syslog 金鑰透過 syslogd(8)記載。 查閱會傳回空字串。
switch 很像「序列」對映,但對映的順序是由服務交換器所決定。 引數是要查閱的服務名稱; 來自服務交換器的值會附加至對映名稱,以建立新的對映名稱。 例如,請考量索引鍵定義:
Kali switch aliases
與服務交換器項目一起使用:
aliases    nis files

這會導致對對映 "ali" 進行查詢,以依該順序來搜尋名為 "ali.nis" 和 "ali.files" 的對映。

引用 除去雙引號 (") 從名稱。 它不會除去反斜線,如果產生的字串包含不可掃描的語法,則不會除去引號 (亦即,基本錯誤如不平衡角括弧; 不會勾選更準確的錯誤,例如不明主機)。 嘗試接受來自系統 (例如 DECNet) 的郵件時,會使用此目的,這些系統通常會引用奇數語法,例如:
"49ers::ubell"
一般用法可能如下:
Kdequote dequote
...
R$-        $: $(dequote $1 $)
R$- $+     $: $>3 $1 $2
   
必須小心防止非預期的結果; 例如,
"|someprogram < input > output"

將會刪除引號,但結果可能不是預期的結果。 幸運的是,這些案例很少見。

regex K 行上的對映定義包含正規表示式。 任何索引鍵輸入都會使用 POSIX 正規表示式常式 regcomp ()regerr ()regexec ()來與該表示式進行比較。如需正規表示式比對的相關資訊,請參閱這些常式的文件。 如果使用 -m 旗標,則不會重新編寫金鑰。 如果沒有它,則會捨棄金鑰,或者如果使用 -s ,則會以子字串相符項取代金鑰,以 $| 或以 -d 旗標指定的字串定界。 可用於對映的旗標如下:
-n
-f
區分大小寫
-b
基本正規表示式 (預設值為延伸)
-s
子字串相符
-d
設定用於 -s 的定界字元
-a
附加字串至索引鍵
-m
僅符合,不取代/捨棄值

-s 旗標可以包括選用參數,可用來在查閱結果中選取子字串。 例如,-s1,3,4.

程式 K 行上的引數是程式的路徑名稱,以及要傳遞的任何起始參數。 當呼叫對映時,會將金鑰新增至起始參數,並以預設使用者/群組 ID 來呼叫程式。 標準輸出的第一行會傳回作為查閱的值。 這有許多潛在的安全問題和糟糕的效能。 只有在絕對必要時才使用它。
巨集 (macro)
設定或清除巨集值。 若要設定巨集,請傳遞值作為對映查閱中的第一個引數。 若要清除巨集,請不要在對映查閱中傳遞引數。 對映一律會傳回空字串。 一般用法的範例包括:
Kstorage macro

...

# set macro ${MyMacro{ to the ruleset match
R$+                  $:$(storage {MyMacro} $@ $1 $) $1
# set macro ${MyMacro} to an empty string
R$*                  $:$(storage {MyMacro} $@ $) $1
# set macro ${MyMacro}
R$-                  $:$(storage {MyMacro} $) $1
阿里思

執行簡式算術運算。 作業提供為索引鍵,目前支援 +, -, *, /, l (小於) 及 = 。 這兩個運算元會以引數形式提供。 查閱會傳回比較的計算結果 (True 或 False) ,否則會傳回整數值。 會忽略對映圖可能使用的所有選項。 一個簡單的範例是:

Kcomp arith

...

Scheck_etrn
R$*          $: $(comp l $@ $&{load_avg} $@ 7 $) $1
RFALSE       $# error ...

其中大部分接受為引數相同的選用旗標及檔名 (或 NIS 的對映名稱; 檔名是資料庫路徑的根目錄,因此會新增適用於資料庫類型的 .db 或其他副檔名,以取得實際資料庫名稱)。 已知旗標如下:

旗標 說明
-o 指出此對映是選用的。 也就是說,如果無法開啟它,則不會產生任何錯誤,且 sendmail 會像對映存在但卻是空的一樣運作。
-N, -O 如果未指定 -N-Osendmail 會使用調適性演算法來決定是否在金鑰結尾尋找空值位元組。 它從嘗試兩者開始; 如果找到任何具有空值位元組的索引鍵,則絕不會在沒有空值位元組的情況下重試,反之亦然。 如果指定 -N ,則絕不會在沒有空值位元組的情況下嘗試; 如果指定 -O ,則絕不會嘗試空值位元組。 設定其中一個可以加快相符的速度,但永遠不需要。 如果同時指定 -N-Osendmail 將永遠不會嘗試任何相符項。 也就是說,一切都將看似失敗。
-a x 在成功符合時附加字串 x 。 例如,預設主機對映會在成功的相符項上附加點。
-T x 在暫時失敗時附加字串 x。 例如,如果傳回 DNS 查閱,則會附加 xserver failed或 NIS 查閱找不到伺服器。 如需相關資訊,請參閱 -t 旗標。
-f 在查閱索引鍵之前,請不要將大寫與小寫摺疊。
-m 僅符合 (不取代值)。 如果您只關心索引鍵的存在,而不關心值 (例如在搜尋 NIS 對映 "hosts.byname" 時可能發生的情況) ,則此旗標會阻止對映替換值。 不過, -a 引數仍會附加在相符項上,如果相符項失敗,仍會採用預設值。
-k keycol 索引鍵直欄名稱 (適用於 NIS) 或號碼 (適用於文字查閱)。
-v 瓦爾科爾 值直欄名稱 (適用於 NIS) 或數字 (適用於文字查閱)。
-z 德利姆 直欄定界字元 (用於文字查閱)。 它可以是單一字元或特殊字串 "\n" 或 "\t" 之一,以分別指出換行或 Tab 鍵。 如果完全省略,則直欄分隔字元是任何空格序列。
-T 通常,當對映嘗試執行查閱但伺服器失敗 (例如, sendmail 無法聯絡任何名稱伺服器-這與在對映中找不到的項目 相同) 時,正在處理的訊息會排入佇列等待未來處理。 -t 旗標會關閉此行為,讓暫時失敗 (伺服器關閉) 當作永久失敗 (找不到項目) 來運作。 它對於 DNS 查閱特別有用,因為另一個名稱伺服器配置錯誤可能會在您的機器上造成問題。 請小心避免「彈跳」郵件,因為如果再嘗試一次,就會正確解決該郵件。 一般策略是將這類郵件轉寄至另一個郵件伺服器。
-d 在延遲遞送模式下不執行查閱。 依預設,會針對 主持人 對映設定此旗標。
-S 宇宙 在順利完成對映查閱之後,用來取代空格字元的字元。 這對於 正規表示式syslog 地圖特別有用。
-q 在查閱之前,請勿先取消引用索引鍵。
-是 重建別名檔時, -是 旗標會導致合併文字版本中的重複項目。 例如,下列兩個項目:
list:     user1,user2
list:     user3

會被視為是下列單一項目:

list:     user1,user2,user3

下列其他旗標僅存在於 LDAP 對映中:

旗標 說明
-r 不要自動追蹤轉介。 Sendmail 必須與 -dLAP_轉介 一起編譯,才能使用此旗標。
-n 僅擷取屬性名稱。
-r 代雷夫 將別名取消參照選項設為下列其中一項: never總是搜尋尋找
-s 範圍 將搜尋範圍設為下列其中一項: 基礎 (一個層次) 或 (子樹狀結構)。
-h 主持人 LDAP 伺服器主機名稱。
-b 基礎 LDAP 搜尋基準。
-p LDAP 服務埠。
-l 提米利米特 LDAP 查詢的時間限制。
-Z 錫澤利姆特 LDAP 查詢的大小 (相符數) 限制。
-d 識別名稱 用來登入 LDAP 伺服器的識別名稱。
-M 方法 向 LDAP 伺服器鑑別的方法。 應該是下列其中一項: LDAP_AUTH_NONELDAP 授權簡式LDAP_AUTH_KRBV4
-P passwordfile 此檔案包含 LDAP_AUTH_SIMPLE 鑑別方法的秘密金鑰,或 LDAP_AUTH_KRBV4的 Kerberos 通行證檔案名稱。
-1 只有在找到單一相符項時,才強制 LDAP 搜尋成功。 如果找到多個值,則會將搜尋視為找不到相符項。
dbm 對映會將字串 .pag.dir 附加至給定的檔名; 兩個資料庫型對映會附加 .db。 例如,地圖規格
Kuucp dbm -o -N /usr/lib/uucpmap

指定類別 "dbm" 的選用對映 "uucp"; 它一律在每一個字串的結尾有空值位元組,且資料位於 /usr/lib/uucpmap. {dir , pag}。

指令和運算元

指令和運算元 說明
C XWord1 Word2... 定義可用來符合重寫規則左側的單字類別。 類別指定元 (X) 可以是 ASCII 字集的任何大寫字母。 小寫字母及特殊字元保留供系統使用。
D XValue 定義巨集 (X) 及其相關聯的 價值。 巨集指定元可以是 ASCII 字集的任何大寫字母。 小寫字母及特殊字元保留供系統使用。
F XFileName [格式] 使用選用的 scanf 格式指定元,從 FileName 變數讀取類別 (X) 的元素。 格式指定元只包含一個轉換規格。 FileName 變數中的每一行會讀取一個類別號碼。
H [?MFlags?]HeaderName: HeaderTemplate 定義 sendmail 指令插入訊息中的標頭格式。 接續行是定義的一部分。 在插入訊息之前, HeaderTemplate 是巨集展開的。 如果指定 MFlags ,且在郵寄程式定義中至少包含其中一個指定的旗標,則此標頭會自動寫入輸出訊息。 如果標頭出現在輸入訊息中,則不論 MFlags 變數為何,都會將它寫入輸出訊息。
M 姓名, [欄位=價值] 定義「郵件」程式,其中 姓名 變數是「郵件」程式的名稱,而 欄位=價值 配對定義郵寄程式的屬性。
O x[價值] 將選項設為 x. 的值 如果選項是值選項,您也必須指定 價值 變數。 也可以從指令行選取選項。
附註: 如需有效值,請參閱 O-設定選項
P Name = Number 定義的值Precedence:標頭欄位。 當在訊息中找到 姓名 變數時Precedence:欄位,則訊息的優先順序會設為 數字 變數。 數字越高表示優先順序越高。 負數表示未傳回錯誤訊息。 預設 數字 為 0。
R LeftHand側邊 RightHand側邊註解 定義重新編寫規則。 此指令的三個欄位以一或多個 Tab 字元區隔。 如果使用空格字元作為欄位分隔字元,則必須設定選項 JJ 選項容許空格及定位點區隔重新編寫規則的左右兩側。 J 選項容許使用以空格取代標籤的編輯器來修改重新編寫規則。
S x 將目前定義的規則集設為指定的數目 (x)。 如果規則集定義啟動多次,新定義會改寫舊的。
T User1 User2 ... 定義系統管理者的使用者 ID。 這些 ID 有權使用 -f 旗標來置換寄件者位址。 每一行可以指定多個 ID。

檔案

項目 說明
/etc/mail/sendmail.cf 指定 sendmail.cf 檔案的路徑。
/etc/mail/submit.cf 指定 submit.cf 檔案的路徑。
/etc/passwd 包含基本使用者屬性。
/etc/mail/aliases 包含 sendmail 指令的別名定義。