下面我将为你详细介绍 mail 命令的使用方法,从基础到进阶。

mail 命令简介
mail 命令主要用于在命令行下读取和发送邮件,它的核心优势在于可以轻松地与 Shell 脚本结合,实现自动化邮件发送功能(备份完成后的通知、系统错误报告等)。
在大多数现代 Linux 发行版中,你使用的可能是 mail 的一个改进版本,称为 mailx(例如在 CentOS/RHEL 上)或 heirloom-mailx(一个功能更丰富的 mailx 实现),它们的用法基本兼容,你可以通过 which mail 或 man mail 来查看具体是哪个版本。
如何发送邮件(核心用法)
发送邮件的基本语法如下:
mail -s "邮件主题" -a "附件文件路径" 收件人地址 < 邮件正文文件
或者,在交互模式下直接输入正文:

mail -s "邮件主题" 收件人地址 # 然后输入邮件正文,以 Ctrl+D 结尾
让我们来分解这个命令的常用选项:
| 选项 | 全称 | 描述 | 示例 |
|---|---|---|---|
-s |
--subject |
指定邮件的主题。这是最常用的选项之一。 | mail -s "Hello World" user@example.com |
-a |
--attach |
添加附件,可以多次使用 -a 来添加多个附件。 |
mail -s "Report" -a report.pdf user@example.com |
-c |
--cc |
抄送邮件给指定地址。 | mail -s "Meeting" -c manager@example.com user@example.com |
-b |
--bcc |
密送邮件给指定地址。 | mail -s "Secret" -b secret@example.com user@example.com |
-S |
--option |
设置内部配置变量,from(发件人显示名)。 |
mail -S from="Admin <admin@myserver.com>" -s "Alert" user@example.com |
详细示例
示例 1:发送一封简单的纯文本邮件
这是最基础的用法,邮件正文直接通过输入重定向(<)来自一个文件。
-
创建邮件正文文件
message.txt:echo "Hello, this is a test email sent from the command line. Best regards, Your Server" > message.txt
-
发送邮件:
(图片来源网络,侵删)mail -s "Test Email from mail command" your-email@example.com < message.txt
将
your-email@example.com替换成你自己的邮箱地址。
示例 2:在交互模式下发送邮件
如果你想边输入边编辑邮件内容,可以使用交互模式。
mail -s "Interactive Email" your-email@example.com
执行后,你会进入 mail 的交互界面,光标会停在 > 提示符后。
-
输入邮件正文:
Hi there, This email was typed directly into the mail command. It's very convenient for short messages. Sincerely, Me -
结束输入并发送: 在最后一行的末尾,按下
Ctrl + D,你会看到EOT(End of Transmission) 字样,然后邮件就会被发送。
示例 3:发送带附件的邮件
假设你有一个名为 log.txt 的文件需要作为附件发送。
mail -s "Server Logs" -a log.txt your-email@example.com < message.txt
这条命令会:
- 设置邮件主题为 "Server Logs"。
- 将
log.txt作为附件添加。 - 将
message.txt的内容作为邮件正文。 - 发送给
your-email@example.com。
示例 4:抄送和密送
# 抄送给 manager@example.com mail -s "Project Update" -c manager@example.com dev-team@example.com < update.txt # 密送给 ceo@example.com (其他收件人不会看到密送人) mail -s "Confidential" -b ceo@example.com board@example.com < secret.txt
示例 5:设置发件人显示名
默认情况下,发件人地址可能是你的用户名@主机名,这看起来不专业,你可以 -S 选项来设置一个更友好的发件人名称。
# 注意:这里的邮箱地址通常是你的系统用户名,但显示名可以自定义 mail -S from="监控系统 <monitor@myserver.com>" -s "CPU Alert" admin@example.com < alert.txt
注意:-S from= 设置的是显示名称,而不是实际的发件邮箱,实际的发件邮箱地址由系统 MTA(如 Postfix, Sendmail)根据你的系统用户和配置决定,要真正改变发件邮箱地址,需要配置 MTA。
配置 mail 命令(非常重要!)
mail 命令本身不发送邮件,它只是一个客户端,它需要依赖一个邮件传输代理,如 sendmail、postfix 或 ssmtp。
在云服务器或容器环境中,通常不会配置完整的 MTA,因为那很复杂且不安全,这时,我们通常会使用一个更简单的工具:msmtp。
使用 msmtp 作为发送后端
msmtp 是一个 SMTP 客户端,它可以将 mail 命令的请求转发到一个指定的 SMTP 服务器(比如你的 Gmail、QQ邮箱或企业邮箱)。
步骤:
-
安装
msmtp和msmtp-mta:# 对于 Debian/Ubuntu sudo apt-get update sudo apt-get install msmtp msmtp-mta # 对于 CentOS/RHEL sudo yum install msmtp msmtp-mta
msmtp-mta包会创建一个符号链接,让mail命令默认使用msmtp。 -
配置
msmtp: 创建或编辑配置文件~/.msmtprc:nano ~/.msmtprc
在文件中添加以下内容(以 Gmail 为例):
# 默认账户 defaults auth on tls on tls_trust_file /etc/ssl/certs/ca-certificates.crt logfile ~/.msmtp.log # Gmail 账户 account gmail host smtp.gmail.com port 587 from your-gmail-address@gmail.com user your-gmail-address@gmail.com password your-gmail-password-or-app-password # 设置默认账户 account default : gmail
⚠️ 重要安全提示:
- 不要直接使用你的 Gmail 密码!为了安全,Google 要求你使用“应用专用密码”(App Password),如果你开启了双因素认证,必须生成一个应用专用密码来替换
your-gmail-password-or-app-password。 - 为了安全,设置文件的权限为
600:chmod 600 ~/.msmtprc
- 不要直接使用你的 Gmail 密码!为了安全,Google 要求你使用“应用专用密码”(App Password),如果你开启了双因素认证,必须生成一个应用专用密码来替换
-
测试发送: 现在你可以像前面示例中那样使用
mail命令了,它会通过msmtp将邮件发送到你的 Gmail,再由 Gmail 转发出去。
常见问题与技巧
-
查看邮件队列: 如果邮件发送失败,可以查看邮件队列,在
postfix系统中,使用:mailq
-
清空邮件队列: 如果队列中有大量无法发送的邮件,可以清空它(谨慎使用!):
postsuper -d ALL
-
交互模式常用命令: 在
mail的交互模式下,你可以使用以下命令:h或headers: 显示邮件列表。数字(1): 阅读第一封邮件。d 数字: 删除指定编号的邮件。s 文件名: 将当前邮件保存到文件。q: 退出mail程序。- 或
h: 显示帮助信息。
-
格式化邮件(HTML):
mail命令默认发送纯文本邮件,要发送 HTML 邮件,你需要使用更高级的工具如mutt或swaks,或者通过管道处理,用mutt发送 HTML 邮件:echo "<html><body><h1>HTML Email</h1><p>This is a test.</p></body></html>" | mutt -s "HTML Subject" -e "my_hdr From: Your Name <your@email.com>" -- your-email@example.com -e "set content_type=text/html"
mail 命令是一个小巧而强大的工具,特别适合自动化任务,要成功使用它,关键在于:
- 理解基本语法:
mail -s "主题" -a "附件" 收件人 < 正文。 - 配置好后端:根据你的环境,正确配置
sendmail、postfix或更简单的msmtp。 - 处理认证:特别是使用外部 SMTP 服务(如 Gmail)时,务必使用应用专用密码。
希望这份详细的指南能帮助你掌握 mail 命令!
