MSMTP(1) General Commands Manual MSMTP(1)

msmtp - An SMTP client

概要 (SYNOPSIS)

發郵件模式 (預設):
msmtp [option...] [--] recipient...
msmtp [option...] -t [--] [recipient...]
伺服器訊息模式:
msmtp [option...] --serverinfo
遠端訊息佇列模式:
msmtp [option...] --rmqs=host|@domain|#queue

描述 (DESCRIPTION)

在預設的發郵件模式下,msmtp 從標準輸入讀取郵件,然後把它送給SMTP 伺服器處理
當處於伺服器訊息模式下,msmtp 會顯示SMTP 伺服器的有關資訊
而當它處於遠端訊息佇列模式時,msmtp 將為主機或者域發出RMQS 請求,或者向SMTP 伺服器發出佇列請求

退出狀態 (EXIT STATUS)

這裡使用標準的sendmail 退出狀態程式碼,就像在 sysexits.h 中定義的那樣 想快速上手,可跳到EXAMPLES 部分

選項 (OPTIONS)

這裡的選項將覆蓋配置檔案中的相同選項
他們在某些地方與sendmail 相容

一般選項 (General options)
顯示版本資訊。這些資訊包括TLS/SSL 庫資訊(如果有),用於驗證的庫以及這些庫 所支援的驗證方式,還有預設的全域性配置檔案和使用者配置檔案資訊
顯示幫助
顯示使用的配置資訊,但不真正執行什麼操作。密碼將會以 *** 的形式顯示
顯示很多除錯資訊,包括與SMTP 伺服器的所有會話。小心使用這個選項(潛在風險): 所有輸出沒經過什麼處理,密碼可能以一種極易解碼的方式被顯示出來
改變操作模式選項 (Changing the mode of operation)
顯示SMTP 伺服器的資訊並退出。資訊中包含了所有支援的特性,如郵件大小限制、 驗證方式、TLS、DSN 等等。如果伺服器支援TLS 的話,還有TLS 證書資訊
為指定的主機或者域傳送一個開啟遠端訊息佇列的請求,或者向SMTP 伺服器傳送佇列 請求,並退出
配置選項 (Configuration options)
用指定的檔案代替~/.msmtprc 作為使用者配置檔案
用指定的帳號代替"default" 欄位中的帳號。這個帳號的設定能以命令列選項的方式進行 更改。但這個選項不能與 --host 合用
用命令列指定一個SMTP 伺服器,不用配置檔案中的任何資料。這個選項不能與 --account 選項合用
設定要連線的埠。參看下面 port 命令
設定網路超時。參看下面 timeout 命令。為了相容老版本,--connect-timeout 作為這個選項的別名
設定所用的協議。參看下面 protocol 命令
開啟或關閉驗證,也可隨意選擇一個驗證方式。參看下面 auth 命令
設定或清空用於驗證的使用者名稱。參看下面 user 命令
開啟或關閉TLS 加密。參看 tls 命令
開啟或關閉TLS 加密的STARTTLS 。參看下面 tls_starttls 命令
設定或清空TLS 加密的trust file。參看下面 tls_trust_file 命令
設定或清空TLS 加密的key file。參看下面 tls_key_file 命令
設定或清空TLS 加密的cert file。參看下面 tls_cert_file 命令
開啟或關閉TLS 加密的證書檢驗。參看下面 tls_certcheck 命令
強制使用SSLv3。參看下面 tls_force_sslv3 命令
設定SMTP EHLO (or LMTP LHLO)命令的引數。參看 domain 命令
發件模式的選項 (Options specific to sendmail mode)
開啟或關閉automatic envelope-from addresses。預設關閉。參看下面 auto_from 命令
設定envelope-from address。僅當 auto_from 關閉時才有用
如果未用 --account--host 指定帳號,這個選項會選擇第一個擁有給 定envelope-from address 的帳號。看看 from 命令。如果沒找到符合條件的帳號 ,就用"default"
為生成的envelope-from addresses 指定一個域。僅當 auto_from 開啟時才有用。 參看下面 maildomain 命令
設定或清空DSN notification conditions。參看下面 dsn_notify 命令
設定或清空 DSN notification amount。參看下面 dsn_return 命令。注意為 相容sendmail ,hdrs 被定義成 headers 的別名
是否保留Bcc header。參看下面 keepbcc 命令
設定或清除log file。參看下面 logfile 命令
是否啟用syslog。參看下面 syslog 命令
從郵件的To, Cc, Bcc headers 處提取收件人地址,而不從命令列讀入
--
從這以後的引數均被認為是收件人地址,即使以 '-' 開頭。這標誌著選項列表結束了

以下選項可用,但相容的sendmail 忽略。
-Btype, -bm, -Fname, -G, -hN, -i, -L tag, -m, -n, -O option=value, -ox value, -v

用法 (USAGE)

通常,全域性配置檔案和(或)使用者配置檔案包含了SMTP 伺服器以及如何與之通訊的所有信 息。但是,幾乎所有的選項也可以在命令列上配置

SMTP 伺服器的資訊以 accounts 方式組織在一起。每個帳號描述了一臺SMTP 服 務器的主機名、驗證設定、TLS 設定等等。每個配置檔案能定義多個帳號

在發件模式,必須要有一個envelope-from,這被作為原始發件人傳送給SMTP 伺服器。 當 auto_from 開啟時,Envelope-from 的地址也能自動生成,或者也能明確地 用 form--from 設定。auto_from 能生成形如 user@domain 這樣的地址。user 部分將以 $USER 代替,如果不行,就用 $LOGNAME 代替,再不行的話,就用當前登入的使用者名稱。domain 部分能用 maildomain 設 定。如果maildomain 未設好,envelope-from 中將只有使用者名稱,而不含域名。

使用者能選擇用哪個帳號,以下方法三選一:

用給定帳號。命令列選項會覆蓋配置檔案中的設定
只用來自命令列的選項,不用配置檔案中的
從全域性或使用者配置檔案中選擇與 from 命令指定的地址匹配的envelop-from 地址。 只有 --account--host 都沒有設定時才用得到這個選項

如果以上選項一個都沒用到,又或者用了 --from 但沒有一個帳號與 from 命令的結果匹配,那就使用"default" 帳號

配置檔案 (CONFIGURATION FILES)

如果全域性配置檔案存在並可讀,會呼叫檔案SYSCONFDIR/msmtprc,SYSCONFDIR 依賴於你的 系統。用 --version 可以找到用了哪個目錄
如果使用者配置檔案存在並可讀,就呼叫它(預設是~/.msmtprc )。使用者配置中的帳號會覆蓋 全域性配置中的相同帳號。除了擁有者的讀寫權外,決不給配置檔案其它多餘的許可權。無論 哪個配置檔案中的設定都可以用命令列選項更改

配置檔案是個普通文字而已,忽略空行和註釋行(以'#'開頭)
其它行必須包含一條命令以及可能的引數
如果引數的第一個或最後一個有空白,要用雙引號(")括起來
如果檔案的第一個字元是"~",將會用$HOME 代替。如果命令能接受一個 on 引數, 它也會接受空引數並預設它是 on 引數。
命令的集合形成groups 。每組以 account 命令開頭,接著是SMTP 伺服器的設定

想快速上手,可跳到EXAMPLES 部分

命令說明如下:

設定defaults。接下去的設定命令將當前配置檔案中的所有帳號指定預設值
開始定義新帳號,填充預設值
如果有逗號和預先定義好的帳號名跟在account 後面,所有列表中的帳號會擁有同樣的 設定,並填充預設值
郵件傳送目的地SMTP 伺服器,引數可以是主機名或者網路地址。每個帳號都必須包含 這個命令
SMTP 伺服器監聽埠。預設埠會從你作業系統的service database 中獲取。對於 SMTP 來說,服務名是"smtp" (預設埠25),除非使用不帶STARTTLS 的TLS ,在此種 情況下服務名是"ssmtp"(445)。對於LMTP,服務名是"lmtp"
設定或清除網路超時(以秒計)。off 引數表示不設超時,這意味著使用作業系統 預設的超時設定
為與老版本相容, connect_timeout 可作為這條命令的別名
設定所用的協議,目前只支援SMTP 和LMTP,預設SMTP。想知道預設埠,看上面的 port 命令
是否允許automatic envelope-from。預設不允許。開啟時,會生成類似user@domain 形 式的envelope-from。 user 部分將以 $USER 代替,如果不行,就用 $LOGNAME 代替,再不行的話,就用當前登入的使用者名稱。domain 部分能用 maildomain 設定。如果maildomain 未設好,envelope-from 中將只有使用者名稱,而 不含域名。關閉時,,envelope-from 必須明確指定
設定envelope-from,僅當 auto_from 關閉時才有用
設定envelope 域名部分。僅當 auto_from 開啟時才有用,域名可以為空
這條命令控制是否允許SMTP 驗證。你沒有必要自己來設定驗證方式,只要用了 on 引數,msmtp 會為你選擇一個最佳方案(看下面)。
你可能需要用 user 命令來設定一個使用者名稱,用 password 命令設定一個 密碼。如果不指定密碼,而msmtp 執行時發現在驗證時又需要密碼,msmtp 會試著從 ~/.netrc 中找一個,如果不行的話,msmtp 會提示你輸入一個
支援的驗證方式有 plain, cram-md5, digest-md5, gssapi, external, login, and ntlm 。注意由於可能缺少下面的驗證庫,你 會有一個或多個驗證方式不能用。用 --version 選項看看支援哪些方法。
plainlogin 把你的驗證資訊在網上以明文傳輸,因此應該僅把它們和 tls 命令一起用。
如果不自己選擇方式的話,msmtp 會選擇SMTP 伺服器支援的最安全的方式,安全指你的 資訊在網上不會以明文傳送。在TLS 加密連線下任何一種驗證方式都是安全的。如果不 用TLS ,只有gssapi,digest-md5,cram-md5 and ntlm 是安全的。
external 方法比較特殊:真正的驗證操作位於SMTP 協議之外,傳送TLS 客戶端 證書(看 tls_cert_file 命令)就是個典型例子。external 只確認這次驗 證對於給定的使用者是否成功,如果不給使用者名稱的話,就只確認驗證是否成功。[注:總之 它就把具體驗證和加密的事情全推給了外面程式,與msmtp 無關了]。msmtp 不會選這種 驗證方式,你必須親自指定。
設定用於SMTP 驗證的使用者名稱,引數為空時清除使用者名稱。證驗操作必須用 auth 命 令啟用
設定用於SMTP 驗證的密碼,引數為空時清除密碼。證驗操作必須用 auto 命令 啟用。如果不指定密碼,而驗證操作又需要密碼,msmtp 會試著從 ~/.netrc 中找一個, 如果不行的話,msmtp 會提示你輸入一個
設定用於 ntlm 驗證方式的域名,預設不用域名(等同於空引數)。但有些伺服器好 像要的,即便給出的是任意字串
是否允許TLS/SSL 加密連線。不是每個伺服器都支援TLS ,但有了TLS,可以防止有人偷聽 與SMTP 的對話。除非用 tls_certcheck 命令關閉伺服器證書驗證,否則每次都要 完備性檢查。為全面發揮TLS/SSL 效力,推薦用 tls_trust_file 命令(看下面)
預設狀態下,TLS 加密以STARTTLS SMTP 命令啟用。關閉後,TLS 加密會立即啟動(這是 有名的SMTP tunneled through TLS/SSL)。預設埠是465
為相容老版本, tls_nostarttls 作為 tls_starttls off 的別名
這條命令啟用嚴格的伺服器證書驗證。這個檔案必須包含一個或多個以PEM 格式存在的受 信任的證書註冊機構(CAs)。空引數會關閉這個特性。msmtp 透過受信檔案驗證伺服器的 可靠性
tls_cert_file 命令一起,使msmtp 在需要時發一份客戶端證書給SMTP 服務 器。這個檔案必須包含PEM 格式證書的私鑰。空引數會關閉這個特性
tls_key_file 命令一起,使msmtp 在需要時發一份客戶端證書給SMTP 伺服器。 這個檔案必須包含PEM 格式的證書。空引數會關閉這個特性
當TLS 啟用時,預設對伺服器證書進行完備性檢查。如果沒有檢查未透過,會取消TLS 連線。
為相容老版本, tls_nocertcheck 作為 tls_certcheck off 的別名
強制使用TLS/SSL 的SSLv3 版本。可能在一些用SSL 的老舊伺服器上有用。不過萬不得 已,別用這個
設定在哪在情況下,郵件系統應該傳送DSN (Delivery Status Notification)資訊。 off 引數明確關閉DSN 請求,這意味著讓郵件決定什麼時候發DSN 資訊,預設如 此。 condition 可以是 never ,從不傳送請求。或者是以逗號(沒有空 格!)分隔的一個或多個下列引數: failure 失敗時傳送, delay 延遲時 傳送, success 成功時傳送。SMTP 伺服器必須支援DSN 才行。
在一封郵件中允許返回多少DSN 資訊。 off 明確關閉DSN 請求,這意味著讓郵件 系統決定,預設如此。 amount 可以是 headers 只返回資訊頭,full 返回郵件全部內容。SMTP 伺服器必須支援DSN 才行
用來設定SMTP EHLO(or LMTP LHLO)命令的引數。預設是 localhost (笨方法,但 有效)。其它可能的選擇有:郵件地址的域名部分(provider.example for joe@provider. example),或者如果可能的話給出你主機的完整域名
當傳送郵件時是否保留Bcc header 資訊,預設不保留。
不給引數會關閉記錄,預設如此。
當選擇一個logfile 時,msmtp 會為每一封指定logfile 帳號的郵件新增一行記錄
記錄中會包含如下資訊:日期、時間、SMTP 伺服器名字、是否用TLS、是否驗證、用於 驗證的使用者名稱(僅當用了驗證後)、信件來自哪裡、收件人地址、發出去的郵件大小(僅 當傳送成功時)、SMTP 狀態程式碼、SMTP 錯誤資訊(僅當傳送失敗且錯誤資訊可得時)、 錯誤資訊(僅當傳送失敗且錯誤資訊可得時)、退出程式碼(來自 sysexits.h;EX_OK 代表 傳送成功)
如果檔案是一短橫(-),msmtp 就把記錄資訊輸出至標準輸出
是否允許syslog 。facility 可以是LOG_USER、LOG_MAIL、LOG_LOCAL0...LOG_LOCAL7 諸多策略中的一個,預設是LOG_USER。
每次msmtp 透過含有這條命令的帳號發郵件時,它均會在syslog 服務中以選定的策略追 加一條記錄
記錄中會包含如下資訊:日期、時間、SMTP 伺服器名字、是否用TLS、是否驗證、用於 驗證的使用者名稱(僅當用了驗證後)、信件來自哪裡、收件人地址、發出去的郵件大小(僅 當傳送成功時)、SMTP 狀態程式碼、SMTP 錯誤資訊(僅當傳送失敗且錯誤資訊可得時)、 錯誤資訊(僅當傳送失敗且錯誤資訊可得時)、退出程式碼(來自 sysexits.h;EX_OK 代表 傳送成功)

範例 (EXAMPLES)

配置檔案 (Configuration file)

# Set default values for all following accounts.
defaults
tls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile ~/.msmtp.log

# A freemail service
account freemail
host smtp.freemail.example
from joe_smith@freemail.example
auth on
user joe.smith
password secret

# A second mail address at the same freemail service
account freemail2 : freemail
from joey@freemail.example

# The SMTP server of the provider.
account provider
host mail.provider.example
from smithjoe@provider.example
auth on
user 123456789
password my_password

# Set a default account
account default : provider

在Mutt 中使用msmtp (Using msmtp with Mutt)

為msmtp 建立一個配置檔案,然後把下面幾行加到Mutt 配置檔案中去
set sendmail="/path/to/msmtp"
set use_from=yes
set realname="Your Name"
set from=you@example.com
set envelope_from=yes
envelope_from=yes 讓Mutt 用msmtp的 -f 引數。這樣msmtp 會選擇符合you@example.com 的第一個帳號
你也可以選用 -a 引數
set sendmail="/path/to/msmtp -a my-account"
或者從命令列中設定所有內容
set sendmail="/path/to/msmtp --host=mailhub -f me@example.com --tls"

如果你有多個郵件帳號,並且想讓Mutt 用 -f 引數讓你可以在帳號之間輕鬆切換,把下面幾行加到Mutt 配置檔案中去
macro generic "<esc>1" ":set from=you@example.com"
macro generic "<esc>2" ":set from=you@your-employer.example"
macro generic "<esc>3" ":set from=you@some-other-provider.example"

在mail 中用上msmtp (Using msmtp with mail)

定義一個預設帳號,然後把下面一行放在 ~/.mailrc 中
set sendmail="/path/to/msmtp"

檔案/系統環境 (FILES / ENVIRONMENT)

全域性配置檔案。用 --version 找出系統中的SYSCONFDIR 在哪裡
~/.msmtprc
使用者配置檔案
~/.netrc
檔案.netrc 包含了登入資訊。如果在配置檔案中沒有找到密碼資訊的話,msmtp 會在提 示使用者輸入之前先找這個檔案。 .netrc 的用法在 netrc(5)ftp(1) 中能找到
$USER, $LOGNAME
在構造信件來源地址時,這些變數會覆蓋使用者的登入名。如果未指定$USER,就用$LOGNAME
$TMPDIR
建立臨時檔案的地方。如果未設定就用系統預設定義
僅當用到 -t/--read-recipients 選項時,才會建立臨時檔案。這個檔案用於快取郵件頭,不包括郵件本身,所以檔案不 會太大

作者 (AUTHORS)

msmtp was written by Martin Lambers <marlam@marlam.de>.
Other authors are listed in the AUTHORS file in the source distribution.

參看 (SEE ALSO)

mutt(1), mail(1), sendmail(8), netrc(5) or ftp(1)

"Nickel Cobalt" <angelerosster@gmail.com>

2007/05/01

"Nickel Cobalt" <angelerosster@gmail.com>

《中文MAN-PAGE計劃》

http://cmpp.linuxforum.net

本頁面中文版由中文 man 手冊頁計劃提供。
中文 man 手冊頁計劃:https://github.com/man-pages-zh/manpages-zh

2006-11