Scroll to navigation

MSMTP(1) General Commands Manual 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)
顯示版本信息。這些信息包括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