命令行手册

Man » mail 手册在线 - 详细的 mail man 页面在线文档

🌍
mail, mailx, Mail — 发送和接收邮件

概要

mail  [-dEIinv]  [-a  header] [-b bcc-addr] [-c cc-addr] [-r from-addr] [-s subject] [--] to-addr
...
mail [-dEIiNnv] -f [file]
mail [-dEIiNnv] [-u user]

描述

mail 是一个智能邮件处理系统,其命令语法类似于 ed(1),
其中行被替换为消息。

选项如下:

-a      在命令行中指定额外的标头字段,例如“X-Loop:foo@bar”等。
它也可以用于覆盖 Mail 在每封外发邮件中默认添加的 MIME 标头,请参阅下面的“字符集和 MIME”。 如果字符串包含空格,则必须使用引号。
此参数可以多次指定,然后将标头连接起来。

-b bcc-addr

发送密送副本给 bcc-addr。

-c cc-addr

发送抄送给用户列表。 cc-addr 应该是逗号分隔的名称列表。

-d      导致 mail 输出各种有用的调试信息。

-E      不要发送带有空正文的消息。

-f      使用替代邮箱。 如果没有指定文件,则默认使用用户的 mbox。
退出时,mail 会将未删除的消息写回到此文件。

-I      强制 mail 以交互模式运行,即使输入不是终端。 尤其是用于发送邮件时使用的特殊 ~ 字符,仅在交互模式下可用。

-i      忽略 tty 中断信号。 当通过嘈杂的电话线使用 mail 时,这非常有用。

-N      在读取邮件或编辑邮件文件夹时,禁止初始显示消息标头。

-n      禁止在启动时读取 /etc/mail.rc。

-r from-addr

在消息和信封中使用 from-addr 作为发件人地址。 覆盖启动文件中的任何发件人选项。

-s subject

在命令行中指定主题(仅使用 -s 标志后的第一个参数作为主题;请小心使用引号来包含空格的主题)。

-u user

等效于:

$ mail -f /var/mail/user

除了进行锁定之外。

-v      详细模式。 传递的详细信息将显示在用户的终端上。

--      选项结束。 任何进一步的参数都将被视为直接收件人地址。

注意:出于安全原因,强烈建议在需要从不受信任的来源(例如 Web 表单)发送邮件的脚本中使用 -- 分隔符。

启动操作

在启动时,mail 将执行系统命令文件 /etc/mail.rc 中的命令,除非明确使用 -n 选项禁止。 接下来,执行用户个人命令文件 ~/.mailrc 中的命令。 然后,mail 检查其命令行选项,以确定用户是否请求发送新消息或检查邮箱中的现有消息。


发送邮件

要向一个或多个收件人发送消息,可以使用带有收件人名称作为参数的 mail 命令。然后,您需要输入您的消息,并在行首输入 control-D ('^D')。下文“回复或创建邮件”描述了一些可用的 mail 功能,以帮助您撰写信件。

阅读邮件

在正常使用中,mail 命令不带任何参数,它会从邮件服务器中获取您的邮件,然后打印出每条消息的单行标题。当前消息最初设置为第一条消息(编号为 1),可以使用 print 命令(可以简写为 p)来打印。在消息之间移动类似于在 ed(1) 中在行之间移动;您可以使用 +- 向前和向后移动,或者直接输入消息编号以直接移动到该消息。

处理邮件

检查完消息后,您可以删除 (d) 或回复 (r) 消息。删除操作会导致 mail 程序忘记该消息。这不是不可逆的;可以通过输入其编号来撤消删除 (u),或者可以通过输入 exit 命令 (x) 来中止邮件会话。但是,已删除的消息通常会消失,再也无法看到。

指定消息

诸如 printdelete 之类的命令可以接受消息编号列表作为参数,以便一次应用于多个消息。因此,delete 1 2 会删除消息 1 和 2,而 delete 1-5 会删除消息 1 到 5。

消息也可以使用以下类别来选择:

*   所有消息
$   最后一条消息
:d  已删除的消息
:n  新消息
:o  旧消息
:r  已读的消息
:u  未读的消息

因此,top 命令(打印消息的前几行)可以用于 top *,以打印所有消息的前几行。

回复或创建邮件

您可以使用 reply 命令来设置对消息的回复,并将其发送回发送者。然后,您输入的内容,直到文件结尾,将定义消息的内容。在您撰写消息时,mail 会特别处理以波浪号 ('~') 开头的行。例如,输入 ~m(单独一行)会将当前消息的副本放入回复中,并将其右移一个制表位(请参阅 indentprefix 变量)。其他转义字符将设置主题字段,添加或删除消息的收件人,并允许您转到编辑器以修改消息或转到 shell 以运行一些命令。(这些选项在下面的摘要中给出。)


结束邮件处理会话

您可以使用 quit (q) 命令结束邮件会话。已检查的消息将被保存到您的 mbox 文件中,除非它们已被删除,在这种情况下,它们将被丢弃。未检查的消息将被放回邮局(请参阅上面的 -f 选项)。

个人和系统范围的邮件列表

也可以创建个人邮件列表,例如,您可以将邮件发送到“cohorts”,并将其发送给一组人。可以通过在您的主目录中的 .mailrc 文件中放置如下行来定义这些列表:

alias cohorts bill ozalp jkf mark kridle@ucbcory

当前列表可以通过 mail 中的 alias 命令显示。可以通过编辑 /etc/aliases 来创建系统范围的邮件列表(请参阅 aliases(5));这些列表使用不同的语法。在 mail 中发送邮件时,个人别名将在发送给其他人的邮件中扩展,以便收件人可以回复。系统范围的别名在发送邮件时不会扩展,但任何返回到机器的回复都将扩展系统范围的别名,因为所有邮件都通过 MTA。

收件人地址规范

收件人地址(“To”、“Cc”或“Bcc”标题字段中的任何一个)在设置 expandaddr 选项时会进行扩展。

地址可以按如下方式扩展:

以管道字符(‘|’)开头的地址被视为要运行的命令。 紧跟在 ‘|’ 之后的命令将以消息作为其标准输入来执行。

以加号(‘+’)开头的地址被视为一个文件夹。

包含斜杠(‘/’)字符但没有感叹号(‘!’)、百分号(‘%’)或 @ 字符的地址也被视为一个文件夹。

如果以上情况都不适用,则收件人被视为本地或网络邮件地址。

如果未设置 expandaddr 选项(默认设置),则不执行任何扩展,并且收件人被视为本地或网络邮件地址。

字符集和 MIME

通常,邮件不处理不同的字符集或任何其他 MIME 功能。特别是,它在显示或发送邮件时不会执行任何字符集之间的转换。

但是,从 2017 年 4 月开始,作为 Debian 的扩展,此版本的 mail 在每个传出的邮件中添加了一些 MIME 标头,以指示邮件作为 8 位纯文本数据发送,该数据使用从当前区域设置 (7) 设置中检测到的字符集编码。可以使用 -a 命令行选项来覆盖这些标头,例如: $ mail -a 'Content-Type: text/plain; charset="ISO-8859-1"' 设置指示旧版字符编码的标头。

摘要

(改编自“邮件参考手册”。)

每个命令都单独在一行中键入,并且可以在命令单词之后使用参数。不必完全键入命令 - 使用与键入的前缀匹配的第一个命令。对于接受消息列表作为参数的命令,如果未提供消息列表,则使用下一个向前消息,该消息满足该命令的要求。如果没有向前消息,则搜索将向后进行,如果没有符合条件的任何消息,mail 将键入“没有适用的消息”并中止该命令。


-       打印前一条消息。如果给定数字参数 n,则转到第 n 条前一条消息并打印它。

=       打印当前选定的消息编号。

?       打印命令的简短摘要。

! 执行以下 shell(参见 sh(1) 和 csh(1))命令。

alias   (a) 不带参数时,打印所有当前定义的别名。带一个参数时,打印该别名。带多个参数时,创建新的别名或更改旧的别名。

alternates
(alt) alternates 命令在您拥有多个机器上的帐户时非常有用。它可以用于通知邮件,列出的地址实际上是您。当您回复消息时,邮件不会将消息的副本发送到 alternates 列表中列出的任何地址。如果带有无参数的 alternates 命令,将显示当前的 alternates 集合。

chdir   (cd 或 ch) 如果给定,则将用户的当前工作目录更改为指定的目录。如果没有给出目录,则更改为用户的登录目录。

copy    (c) copy 命令与 save 命令执行相同的操作,除了它不会在您退出时将使用的消息标记为删除。

delete  (d) 接受消息列表作为参数,并将它们全部标记为已删除。已删除的消息不会保存到 mbox 中,并且对于大多数其他命令不可用。

dp      (也为 dt)删除当前消息并打印下一条消息。如果没有下一条消息,邮件会显示“没有更多消息”。

edit    (e) 接受消息列表,并依次将文本编辑器指向每个消息。从编辑器返回后,将重新读取消息。

exit    (ex 或 x) 立即返回 shell,而不修改用户的系统邮箱、mbox 文件或 -f 中的编辑文件。

file    (fi) 与 folder 相同。

folder  (fo) folder 命令切换到新的邮件文件或文件夹。不带参数时,它会告诉您当前正在读取哪个文件。如果您提供一个参数,它将写入您在当前文件中所做的更改(例如删除),并读取新的文件。一些特殊约定被识别为名称。# 表示前一个文件,% 表示您的系统邮箱,%user 表示用户的系统邮箱,& 表示您的 mbox 文件,+folder 表示文件夹目录中的一个文件。

folders

列出文件夹目录中的文件夹名称。


from    (f) 接收一个消息列表,并打印它们的邮件头。

headers
(h) 列出当前窗口中的邮件头。要查看下一组或上一组邮件头,请参阅 z 命令。

help    与 ? 同义。

hold    (ho,或者 preserve) 接收一个消息列表,并标记其中的每个消息,以便将其保存在用户的系统邮箱中,而不是保存在 mbox 中。不会覆盖删除命令。

ignore  将指定的邮件头字段添加到忽略列表中。忽略列表中的邮件头字段在您打印消息时不会显示在终端上。可以使用 Type 和 Print 命令来打印消息的全部内容,包括忽略的字段。如果执行 ignore 命令时不带任何参数,它将列出当前设置的忽略字段。

inc     合并在阅读邮件期间到达的所有新消息。新消息将添加到消息列表的末尾,并且当前消息将重置为第一个新消息。这不会重新编号现有的消息列表,也不会导致对已进行的所有更改进行保存。

list    (l) 列出有效的邮件命令。

mail    (m) 接收一个或多个登录名和分发组名作为参数,并向这些人发送邮件。

mbox    指示在您退出时,将消息列表发送到您主目录中的 mbox 文件中。如果未设置 hold 选项,则这是默认操作。

more    (mo) 接收一个消息列表,并在该列表上调用分页器。

next    (n)(类似于 + 或 CR)转到序列中的下一个消息并显示它。如果带有参数列表,则显示下一个匹配的消息。

preserve
与 hold 同义。

Print   (P) 类似于 print,但也会打印忽略的邮件头字段。请参阅 print、ignore 和 retain。

print   (p) 接收一个消息列表,并将每个消息打印到用户的终端上。

quit    (q) 终止会话,将所有未删除、未保存的消息保存到用户登录目录中的 mbox 文件中,保存所有标记为 hold 或 preserve 的消息或从未在用户的系统邮箱中引用的消息,并从用户的系统邮箱中删除所有其他消息。如果在会话期间收到新邮件,则会显示消息“您有新邮件”。如果在使用 -f 标志编辑邮箱文件时使用,则将重写编辑文件。将返回到 shell,除非重写编辑文件失败,在这种情况下,用户可以使用 exit 命令退出。

Reply   (R) 回复发送者。不会回复原始消息的其他收件人。

reply   (r) 接收一个消息列表,并向指定消息的发送者和所有收件人发送邮件。默认消息不得删除。

respond
与 reply 同义。

retain  将指定的邮件头字段添加到保留列表中。只有保留列表中的邮件头字段在您打印消息时才会显示在终端上。所有其他邮件头字段都将被抑制。可以使用 Type 和 Print 命令来打印消息的全部内容。如果执行 retain 命令时不带任何参数,它将列出当前设置的保留字段。

save    (s)  接受一个消息列表和一个文件名,并将每个消息依次追加到文件末尾。
文件名用引号括起来,然后回显行数和字符数到用户的终端。

saveignore
saveignore 的作用类似于 print 和 type 命令中的 ignore,即标记的头部字段将在使用 save 命令或自动保存到 mbox 时被过滤掉。

saveretain
saveretain 的作用类似于 save 中的 save,类似于 print 和 type 命令中的 retain。标记的头部字段是使用 save 命令或自动保存到 mbox 时要保存的唯一字段。saveretain 优先于 saveignore。

set     (se) 不带参数时,打印所有变量的值。否则,设置选项。参数的形式为 option=value(等号前后没有空格),或者 option。引号可以放置在赋值语句的任何部分,以引用空格或制表符,例如,set
indentprefix="->"。

shell   (sh) 调用交互式 shell。

size    接受一个消息列表,并打印每个消息的字符大小。

source  source 命令从文件中读取命令。

top     接受一个消息列表,并打印每个消息的前几行。打印的行数由变量 toplines 控制,默认为五行。

Type    (T) 与 Print 命令相同。

type    (t) Print 的同义词。

unalias
接受由 alias 命令定义的名称列表,并丢弃已记住的用户组。组名不再具有任何意义。

undelete
(u) 接受一个消息列表,并将每个消息标记为未删除。

unread  (U) 接受一个消息列表,并将每个消息标记为未读。

unset   接受一个选项名称列表,并丢弃其已记住的值;set 命令的反向操作。

visual  (v) 接受一个消息列表,并在每个消息上调用显示编辑器。

write   (w) 类似于 save,但仅保存消息正文(不包括头部)。
对于诸如通过消息系统发送和接收源代码等任务非常有用。

xit     (x) exit 的同义词。

z       mail 以窗口的形式显示消息头部,如 headers 命令中所述。您可以使用 z 命令将 mail 的注意力移动到下一个窗口。此外,您可以使用 z- 移动到上一个窗口。

波浪线/转义符

以下是波浪线转义符的摘要,这些转义符在编写消息时用于执行特殊功能。波浪线转义符仅在行首时才被识别。名称“波浪线转义符”有些用词不当,因为实际的转义字符可以由选项 escape 设置。


~bname ...

将给定的名称添加到抄送收件人列表中,但不在“抄送”行中显示这些名称(“密送”抄送)。

~cname ...

将给定的名称添加到抄送收件人列表中。

~d 从你的主目录中读取 dead.letter 文件,并将其内容添加到消息中。

~e 调用文本编辑器来编辑到目前为止收集的消息。在编辑会话结束后,你可以继续将文本附加到消息中。

~Fmessages

与 \~f 相同,但包含所有消息头。

~fmessages

将指定的消息读取到正在发送的消息中。如果没有指定消息,则读取当前消息。当前正在忽略的消息头(由 ignore 或 retain 命令控制)不会被包含。

~h 编辑消息头字段,逐个输入每个字段,并允许用户附加文本到末尾,或者使用当前终端的擦除和删除字符来修改该字段。

~Mmessages

与 \~m 相同,但包含所有消息头。

~mmessages

将指定的消息读取到正在发送的消息中,并以制表符或 indentprefix 变量的值进行缩进。如果没有指定消息,则读取当前消息。当前正在忽略的消息头(由 ignore 或 retain 命令控制)不会被包含。

~p 打印到目前为止收集的消息,前面加上消息头字段。

~q 放弃正在发送的消息,如果设置了 save 选项,则将消息复制到主目录中的 ~/dead.letter 文件中。
~Rstring

使用字符串作为“回复”字段。

~rfilename
~<filename

将指定的文件读取到消息中。

~sstring

使指定的字符串成为当前主题字段。

~tname ...

将给定的名称添加到直接收件人列表中。

~v 调用备用编辑器(由 VISUAL 选项定义)来编辑到目前为止收集的消息。通常,备用编辑器将是一个屏幕编辑器。当你退出编辑器后,你可以继续将文本附加到消息的末尾。

~wfilename

将消息写入指定的文件中。

~x 放弃正在发送的消息。即使设置了 save 选项,也不会将消息复制到 ~/dead.letter 文件中。

~? 打印一个简短的波浪线转义符摘要。

~!command

执行指定的 shell 命令,然后返回到消息。

~|command

通过管道将消息传递到命令中进行过滤。如果命令没有输出或异常终止,则保留消息的原始文本。命令 fmt(1) 经常用作命令,以重新调整消息的格式。

~:mail-command
~_mail-command

执行给定的邮件命令。但是,并非所有命令都允许。

~~string

将文本字符串插入到消息中,并在前面加上一个 \~。如果你更改了转义字符,则应该将该字符加倍,以便发送它。

~. 模拟输入中的文件结束符。

邮件选项

可以通过在 .mailrc 文件中设置选项(使用 set 和 unset 命令)来更改 mail 的行为。选项可以是二进制的,在这种情况下,只有是否设置了它才有意义;或者可以是字符串,在这种情况下,实际值也很重要。二进制选项包括以下内容:


append  导致保存在 mbox 中的消息被附加到末尾,而不是添加到开头。
这应该始终设置(也许在 /etc/mail.rc 中)。

ask, asksub
导致 mail 在您发送每条消息时提示您输入主题。如果您只回车,则不会发送主题字段。

askbcc  导致在每条消息的末尾提示您输入其他密送收件人。回车表示您对当前列表满意。

askcc   导致在每条消息的末尾提示您输入其他抄送收件人。回车表示您对当前列表满意。

autoinc
导致新邮件在到达时自动合并。设置此选项类似于在每次提示时执行 inc 命令,不同之处在于新邮件到达时当前消息不会被重置。

autoprint
导致 delete 命令的行为类似于 dp;因此,在删除一条消息后,下一条消息将自动显示。

debug   设置二进制选项 debug 与在命令行中指定 -d 相同,并导致 mail 输出各种有用的调试信息。

dot 二进制选项 dot 导致 mail 将单独的一行句点解释为正在发送的消息的终止符。

expandaddr
导致 mail 扩展消息收件人地址,如“收件人地址规范”部分所述。

from    导致 mail 在消息头的“From:”字段中使用指定的发送者地址。该地址的简化版本也用于消息信封。
如果未设置,则消息将不包含显式发送者地址,并且将由 MTA 添加默认值,通常为“user@host”。可以通过在命令行中指定 -r 标志来覆盖此值。

hold    此选项用于默认情况下将消息保留在系统邮箱中。

ignore  导致来自您终端的中断信号被忽略并回显为 @ 符号。

ignoreeof
与 dot 相关的选项是 ignoreeof,它使 mail 拒绝接受 control-D 作为消息的结尾。ignoreeof 也适用于 mail 命令模式。

keep    设置此选项会导致 mail 在系统邮箱为空时截断系统邮箱,而不是删除它。

keepsave
使用 save 命令保存的消息通常不会在退出时保存在 mbox 中。使用此选项可保留这些消息。

metoo   通常,当扩展的组包含发送者时,发送者将被从扩展中删除。设置此选项会导致将发送者包含在组中。

noheader
设置 noheader 选项与在命令行中提供 -N 标志相同。

nosave  通常,当您使用两个中断字符(通常是 control-C)中止消息时,mail 会将部分信件复制到您主目录中的 dead.letter 文件中。设置二进制选项 nosave 可以防止这种情况发生。

quiet  禁止在首次调用时打印版本信息。

Replyall 反转 reply 和 Reply 命令的含义。

searchheaders

如果设置了此选项,则消息列表规范的形式为“/x:y”,它将扩展到所有在 header 字段“x”中包含子字符串“y”的消息。字符串搜索不区分大小写。如果省略“x”,它将默认为“主题”header 字段。形式为“/to:y”是一种特殊情况,它将扩展到所有在“To”、“Cc”或“Bcc”header 字段中包含子字符串“y”的消息。“to”的检查区分大小写,因此“/To:y”可用于将搜索限制为仅在“To:”字段中查找“y”。

skipempty

不要发送正文为空的消息。

verbose

设置 verbose 选项与在命令行中使用 -v 标志的效果相同。当 mail 以 verbose 模式运行时,实际的消息传递将在用户的终端上显示。

选项字符串值

EDITOR  用于 edit 命令和 ~e 转义的文本编辑器的路径名。如果未定义,则使用 /usr/bin/ex。

LISTER  用于 folders 命令的目录列表程序的路径名。默认值为 /bin/ls。

MBOX  mbox 文件的名称。它可以是文件夹的名称。默认值是在用户主目录中的“mbox”。

PAGER  用于 more 命令或当设置 crt 变量时使用的程序的路径名。如果未定义此选项,则使用默认的分页器 more(1)。

REPLYTO  如果设置,则将用于初始化传出消息的 Reply-To 字段。

SHELL  用于 ! 命令和 ~! 转义的 shell 的路径名。如果未定义,则使用默认的 shell。

VISUAL  用于 visual 命令和 ~v 转义的文本编辑器的路径名。如果未定义,则使用 /usr/bin/vi。

crt  带值的选项 crt 用于确定消息必须有多长才能使用 PAGER 读取。如果设置了 crt 但没有值,则使用存储在系统中的终端屏幕高度来计算阈值(请参阅 stty(1))。

escape  如果定义,则此选项的第一个字符指定在 ~ 处使用的字符,用于表示转义。

folder  用于存储消息文件夹的目录的名称。如果此名称以“/”开头,mail 将其视为绝对路径;否则,将在您的主目录中找到文件夹目录。

indentprefix  用于 ~m 转义,用于缩进消息,而不是通常的制表符字符(“^I”)。如果值包含空格或制表符,请确保对其进行引用。

record      如果定义了,则给出了用于记录所有传出邮件的文件路径。如果未定义,则不会保存传出邮件。

screen      z 中消息头的窗口大小。

sendmail        备用邮件传递系统的路径名。

toplines        如果定义了,则给出了要与 top 命令一起打印的消息的行数;通常,会打印前五行。

环境

mail 实用程序使用 HOME、LOGNAME、USER、SHELL、DEAD、PAGER、LISTER、EDITOR、VISUAL、REPLYTO、MAIL、
MAILRC 和 MBOX 环境变量。

如果设置了 MAIL 环境变量,则其值将用作用户邮件池的路径。

文件

/var/mail/*         邮局(除非由 MAIL 环境变量覆盖)
~/mbox              用户的旧邮件
~/.mailrc           包含初始邮件命令的文件;可以通过设置 MAILRC 环境变量来覆盖
/tmp/R*             临时文件
/usr/share/bsd-mailx/mail.*help     帮助文件
/etc/mail.rc            系统初始化文件

退出状态

mail 实用程序在成功时退出代码 0,并在发生错误时退出代码 >0。

参见

[fmt]({filename}../../fmt)(1)、newaliases(1)、vacation(1)、aliases(5)、mail.local(8)、newaliases(8)、sendmail(8)、
smtpd(8)

Kurt Shoens,“邮件参考手册”,4.4BSD 用户补充文档 (USD)。

标准

mailx 实用程序符合 IEEE Std 1003.1-2008(“POSIX.1”)规范。

IEEE Std 1003.1-2008(“POSIX.1”)将标志 [-iNnu] 标记为可选。

IEEE Std 1003.1-2008(“POSIX.1”)将标志 [-eFH] 标记为可选,并且此 mailx 实现不支持这些标志。

标志 [-abcdEIrv] 是对规范的扩展。

历史

在 Version 1 AT&T UNIX 中出现了一个 mail 命令。此手册页源自 Kurt Shoens 最初编写的《邮件参考手册》。

错误

通常,Mail 和 mailx 只是指向 mail 的链接,这可能会造成混淆。