概要 (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)
- 配置选项 (Configuration options)
- 发件模式的选项 (Options
specific to sendmail mode)
以下选项可用,但兼容的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.
"Nickel Cobalt" <angelerosster@gmail.com>
"Nickel Cobalt" <angelerosster@gmail.com>
《中文MAN-PAGE计划》
http://cmpp.linuxforum.net
跋
本页面中文版由中文
man 手册页计划提供。
中文 man
手册页计划:https://github.com/man-pages-zh/manpages-zh