msmtp - An SMTP client
- 發郵件模式
(預設):
-
msmtp [option...] [--] recipient...
msmtp [option...] -t [--] [recipient...]
- 伺服器訊息模式:
-
msmtp [option...] --serverinfo
- 遠端訊息佇列模式:
-
msmtp [option...] --rmqs=
host|@domain| #queue
在預設的發郵件模式下,msmtp
從標準輸入讀取郵件,然後把它送給SMTP
伺服器處理
當處於伺服器訊息模式下,msmtp
會顯示SMTP
伺服器的有關資訊
而當它處於遠端訊息佇列模式時,msmtp
將為主機或者域發出RMQS
請求,或者向SMTP
伺服器發出佇列請求
這裡使用標準的sendmail
退出狀態程式碼,就像在
sysexits.h 中定義的那樣
想快速上手,可跳到EXAMPLES
部分
這裡的選項將覆蓋配置檔案中的相同選項
他們在某些地方與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
忽略。
-B
type, -bm, -F
name, -G, -h
N, -i, -L
tag, -m, -n,
-O
option=value, -o
x value, -v
通常,全域性配置檔案和(或)使用者配置檔案包含了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"
帳號
如果全域性配置檔案存在並可讀,會呼叫檔案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 代表
傳送成功)
配置檔案 (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
[email protected]
auth on
user joe.smith
password secret
# A second mail address at the same freemail service
account freemail2 : freemail
from
[email protected]
# The SMTP server of the provider.
account provider
host mail.provider.example
from
[email protected]
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=[email protected]
set envelope_from=yes
envelope_from=yes 讓Mutt 用msmtp的
-f
引數。這樣msmtp
會選擇符合
[email protected]
的第一個帳號
你也可以選用
-a 引數
set sendmail="/path/to/msmtp -a my-account"
或者從命令列中設定所有內容
set sendmail="/path/to/msmtp --host=mailhub -f [email protected]
--tls"
如果你有多個郵件帳號,並且想讓Mutt
用
-f
引數讓你可以在帳號之間輕鬆切換,把下面幾行加到Mutt
配置檔案中去
macro generic "<esc>1" ":set
from=[email protected]"
macro generic "<esc>2" ":set
from=[email protected]"
macro generic "<esc>3" ":set
from=[email protected]"
在mail 中用上msmtp (Using msmtp with mail)
定義一個預設帳號,然後把下面一行放在
~/.mailrc 中
set sendmail="/path/to/msmtp"
- SYSCONFDIR/msmtprc
- 全域性配置檔案。用
--version
找出系統中的SYSCONFDIR
在哪裡
- ~/.msmtprc
- 使用者配置檔案
- ~/.netrc
- 檔案.netrc
包含了登入資訊。如果在配置檔案中沒有找到密碼資訊的話,msmtp
會在提
示使用者輸入之前先找這個檔案。
.netrc 的用法在 netrc(5) 或
ftp(1) 中能找到
- $USER, $LOGNAME
- 在構造信件來源地址時,這些變數會覆蓋使用者的登入名。如果未指定$USER,就用$LOGNAME
- $TMPDIR
- 建立臨時檔案的地方。如果未設定就用系統預設定義
僅當用到 -t/--read-recipients
選項時,才會建立臨時檔案。這個檔案用於快取郵件頭,不包括郵件本身,所以檔案不
會太大
msmtp was written by Martin Lambers <
[email protected]>.
Other authors are listed in the AUTHORS file in the source distribution.
mutt(1),
mail(1),
sendmail(8),
netrc(5) or
ftp(1)
"Nickel Cobalt" <
[email protected]>
2007/05/01
"Nickel Cobalt" <
[email protected]>
http://cmpp.linuxforum.net
本頁面中文版由中文 man
手冊頁計劃提供。
中文 man 手冊頁計劃:
https://github.com/man-pages-zh/manpages-zh