MSMTP(1)

NAME
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)

    --version
        顯示版本資訊。這些資訊包括TLS/SSL 庫資訊（如果有），用於驗證的庫以及這些庫 所支援的驗證方式，還有預設的全域性配置檔案和使用者配置檔案資訊

    --help
        顯示幫助

    -P, --pretend
        顯示使用的配置資訊，但不真正執行什麼操作。密碼將會以 *** 的形式顯示

    -d, --debug
        顯示很多除錯資訊，包括與SMTP 伺服器的所有會話。小心使用這個選項（潛在風險）： 所有輸出沒經過什麼處理，密碼可能以一種極易解碼的方式被顯示出來

改變操作模式選項 (Changing the mode of operation)

    -S, --serverinfo
        顯示SMTP 伺服器的資訊並退出。資訊中包含了所有支援的特性，如郵件大小限制、 驗證方式、TLS、DSN 等等。如果伺服器支援TLS 的話，還有TLS 證書資訊

    --rmqs=(host|@domain|#queue)
        為指定的主機或者域傳送一個開啟遠端訊息佇列的請求，或者向SMTP 伺服器傳送佇列 請求，並退出

配置選項 (Configuration options)

    -C, --file=filename
        用指定的檔案代替~/.msmtprc 作為使用者配置檔案

    -a, --account=account_name
        用指定的帳號代替"default" 欄位中的帳號。這個帳號的設定能以命令列選項的方式進行 更改。但這個選項不能與 --host 合用

    --host=hostname
        用命令列指定一個SMTP 伺服器，不用配置檔案中的任何資料。這個選項不能與 --account 選項合用

    --port=number
        設定要連線的埠。參看下面 port 命令

    --timeout=(off|seconds)
        設定網路超時。參看下面 timeout 命令。為了相容老版本，--connect-timeout 作為這個選項的別名

    --protocol=(smtp|lmtp)
        設定所用的協議。參看下面 protocol 命令

    --auth[=(on|off|method)]
        開啟或關閉驗證，也可隨意選擇一個驗證方式。參看下面 auth 命令

    --user=[username]
        設定或清空用於驗證的使用者名稱。參看下面 user 命令

    --tls[=(on|off)]
        開啟或關閉TLS 加密。參看 tls 命令

    --tls-starttls[=(on|off)]
        開啟或關閉TLS 加密的STARTTLS 。參看下面 tls_starttls 命令

    --tls-trust-file=[file]
        設定或清空TLS 加密的trust file。參看下面 tls_trust_file 命令

    --tls-key-file=[file]
        設定或清空TLS 加密的key file。參看下面 tls_key_file 命令

    --tls-cert-file=[file]
        設定或清空TLS 加密的cert file。參看下面 tls_cert_file 命令

    --tls-certcheck[=(on|off)]
        開啟或關閉TLS 加密的證書檢驗。參看下面 tls_certcheck 命令

    --tls-force-sslv3[=(on|off)]
        強制使用SSLv3。參看下面 tls_force_sslv3 命令

    --domain=[string]
        設定SMTP EHLO (or LMTP LHLO)命令的引數。參看 domain 命令

發件模式的選項 (Options specific to sendmail mode)

    --auto-from[=(on|off)]
        開啟或關閉automatic envelope-from addresses。預設關閉。參看下面 auto_from 命令

    -f, --from=address
        設定envelope-from address。僅當 auto_from 關閉時才有用
        如果未用 --account 或 --host 指定帳號，這個選項會選擇第一個擁有給 定envelope-from address 的帳號。看看 from 命令。如果沒找到符合條件的帳號 ，就用"default"

    --maildomain=[domain]
        為生成的envelope-from addresses 指定一個域。僅當 auto_from 開啟時才有用。 參看下面 maildomain 命令

    -N, --dsn-notify=(off|cond)
        設定或清空DSN notification conditions。參看下面 dsn_notify 命令

    -R, --dsn-return=(off|ret)
        設定或清空 DSN notification amount。參看下面 dsn_return 命令。注意為 相容sendmail ，hdrs 被定義成 headers 的別名

    --keepbcc[=(on|off)]
        是否保留Bcc header。參看下面 keepbcc 命令

    -X, --logfile=[file]
        設定或清除log file。參看下面 logfile 命令

    --syslog[=(on|off|facility)]
        是否啟用syslog。參看下面 syslog 命令

    -t, --read-recipients
        從郵件的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 中將只有使用者名稱，而不含域名。

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

--account=id
    用給定帳號。命令列選項會覆蓋配置檔案中的設定

--host=hostname
    只用來自命令列的選項，不用配置檔案中的

--from=address
    從全域性或使用者配置檔案中選擇與 from 命令指定的地址匹配的envelop-from 地址。 只有 --account 和 --host 都沒有設定時才用得到這個選項

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

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

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

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

命令說明如下：

defaults
    設定defaults。接下去的設定命令將當前配置檔案中的所有帳號指定預設值

account name [:account[,...]]
    開始定義新帳號，填充預設值
    如果有逗號和預先定義好的帳號名跟在account 後面，所有列表中的帳號會擁有同樣的 設定，並填充預設值

host hostname
    郵件傳送目的地SMTP 伺服器，引數可以是主機名或者網路地址。每個帳號都必須包含 這個命令

port number
    SMTP 伺服器監聽埠。預設埠會從你作業系統的service database 中獲取。對於 SMTP 來說，服務名是"smtp" (預設埠25)，除非使用不帶STARTTLS 的TLS ，在此種 情況下服務名是"ssmtp"(445)。對於LMTP，服務名是"lmtp"

timeout (off|seconds)
    設定或清除網路超時(以秒計)。off 參數列示不設超時，這意味著使用作業系統 預設的超時設定
    為與老版本相容， connect_timeout 可作為這條命令的別名

protocol (smtp|lmtp)
    設定所用的協議，目前只支援SMTP 和LMTP，預設SMTP。想知道預設埠，看上面的 port 命令

auto_from [(on|off)]
    是否允許automatic envelope-from。預設不允許。開啟時，會生成類似user@domain 形 式的envelope-from。 user 部分將以 $USER 代替，如果不行，就用 $LOGNAME 代替，再不行的話，就用當前登入的使用者名稱。domain 部分能用 maildomain 設定。如果maildomain 未設好，envelope-from 中將只有使用者名稱，而 不含域名。關閉時，，envelope-from 必須明確指定

from envelope_from
    設定envelope-from，僅當 auto_from 關閉時才有用

maildomain [domain]
    設定envelope 域名部分。僅當 auto_from 開啟時才有用，域名可以為空

auth [(on|off|method)]
    這條命令控制是否允許SMTP 驗證。你沒有必要自己來設定驗證方式，只要用了 on 引數，msmtp 會為你選擇一個最佳方案(看下面)。
    你可能需要用 user 命令來設定一個使用者名稱，用 password 命令設定一個 密碼。如果不指定密碼，而msmtp 執行時發現在驗證時又需要密碼，msmtp 會試著從 ~/.netrc 中找一個，如果不行的話，msmtp 會提示你輸入一個
    支援的驗證方式有 plain, cram-md5, digest-md5, gssapi, external, login, and ntlm 。注意由於可能缺少下面的驗證庫，你 會有一個或多個驗證方式不能用。用 --version 選項看看支援哪些方法。
    plain 和 login 把你的驗證資訊在網上以明文傳輸，因此應該僅把它們和 tls 命令一起用。
    如果不自己選擇方式的話，msmtp 會選擇SMTP 伺服器支援的最安全的方式，安全指你的 資訊在網上不會以明文傳送。在TLS 加密連線下任何一種驗證方式都是安全的。如果不 用TLS ，只有gssapi,digest-md5,cram-md5 and ntlm 是安全的。
    external 方法比較特殊：真正的驗證操作位於SMTP 協議之外，傳送TLS 客戶端 證書(看 tls_cert_file 命令)就是個典型例子。external 只確認這次驗 證對於給定的使用者是否成功，如果不給使用者名稱的話，就只確認驗證是否成功。[注：總之 它就把具體驗證和加密的事情全推給了外面程式，與msmtp 無關了]。msmtp 不會選這種 驗證方式，你必須親自指定。

user [username]
    設定用於SMTP 驗證的使用者名稱，引數為空時清除使用者名稱。證驗操作必須用 auth 命 令啟用

password [secret]
    設定用於SMTP 驗證的密碼，引數為空時清除密碼。證驗操作必須用 auto 命令 啟用。如果不指定密碼，而驗證操作又需要密碼，msmtp 會試著從 ~/.netrc 中找一個， 如果不行的話，msmtp 會提示你輸入一個

ntlmdomain [domain]
    設定用於 ntlm 驗證方式的域名，預設不用域名(等同於空引數)。但有些伺服器好 像要的，即便給出的是任意字串

tls [(on|off)]
    是否允許TLS/SSL 加密連線。不是每個伺服器都支援TLS ，但有了TLS，可以防止有人偷聽 與SMTP 的對話。除非用 tls_certcheck 命令關閉伺服器證書驗證，否則每次都要 完備性檢查。為全面發揮TLS/SSL 效力，推薦用 tls_trust_file 命令(看下面)

tls_starttls [(on|off)]
    預設狀態下，TLS 加密以STARTTLS SMTP 命令啟用。關閉後，TLS 加密會立即啟動(這是 有名的SMTP tunneled through TLS/SSL)。預設埠是465
    為相容老版本， tls_nostarttls 作為 tls_starttls off 的別名

tls_trust_file [file]
    這條命令啟用嚴格的伺服器證書驗證。這個檔案必須包含一個或多個以PEM 格式存在的受 信任的證書序號產生器構(CAs)。空引數會關閉這個特性。msmtp 通過受信檔案驗證伺服器的 可靠性

tls_key_file [file]
    與 tls_cert_file 命令一起，使msmtp 在需要時發一份客戶端證書給SMTP 服務 器。這個檔案必須包含PEM 格式證書的私鑰。空引數會關閉這個特性

tls_cert_file [file]
    與 tls_key_file 命令一起，使msmtp 在需要時發一份客戶端證書給SMTP 伺服器。 這個檔案必須包含PEM 格式的證書。空引數會關閉這個特性

tls_certcheck [(on|off)]
    當TLS 啟用時，預設對伺服器證書進行完備性檢查。如果沒有檢查未通過，會取消TLS 連線。
    為相容老版本， tls_nocertcheck 作為 tls_certcheck off 的別名

tls_force_sslv3 [(on|off)]
    強制使用TLS/SSL 的SSLv3 版本。可能在一些用SSL 的老舊伺服器上有用。不過萬不得 已，別用這個

dsn_notify (off|condition)
    設定在哪在情況下，郵件系統應該傳送DSN (Delivery Status Notification)資訊。 off 引數明確關閉DSN 請求，這意味著讓郵件決定什麼時候發DSN 資訊，預設如 此。 condition 可以是 never ，從不傳送請求。或者是以逗號(沒有空 格！)分隔的一個或多個下列引數： failure 失敗時傳送， delay 延遲時 傳送， success 成功時傳送。SMTP 伺服器必須支援DSN 才行。

dsn_return (off|amount)
    在一封郵件中允許返回多少DSN 資訊。 off 明確關閉DSN 請求，這意味著讓郵件 系統決定，預設如此。 amount 可以是 headers 只返回資訊頭，full 返回郵件全部內容。SMTP 伺服器必須支援DSN 才行

domain argument
    用來設定SMTP EHLO(or LMTP LHLO)命令的引數。預設是 localhost (笨方法，但 有效)。其它可能的選擇有：郵件地址的域名部分(provider.example for joe@provider. example)，或者如果可能的話給出你主機的完整域名

keepbcc [(on|off)]
    當傳送郵件時是否保留Bcc header 資訊，預設不保留。

logfile [file]
    不給引數會關閉記錄，預設如此。
    當選擇一個logfile 時，msmtp 會為每一封指定logfile 帳號的郵件新增一行記錄
    記錄中會包含如下資訊：日期、時間、SMTP 伺服器名字、是否用TLS、是否驗證、用於 驗證的使用者名稱(僅當用了驗證後)、信件來自哪裡、收件人地址、發出去的郵件大小(僅 當傳送成功時)、SMTP 狀態程式碼、SMTP 錯誤資訊(僅當傳送失敗且錯誤資訊可得時)、 錯誤資訊(僅當傳送失敗且錯誤資訊可得時)、退出程式碼(來自 sysexits.h；EX_OK 代表 傳送成功)
    如果檔案是一短橫(-)，msmtp 就把記錄資訊輸出至標準輸出

syslog [(on|off|facility)]
    是否允許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)

SYSCONFDIR/msmtprc
    全域性配置檔案。用 --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