mail 命令是一个在 Linux 终端中发送和阅读邮件的强大工具,它有不同的实现版本,最常见的是 mailutils 包中的版本,它功能丰富且易于使用,另一个流行的是 heirloom-mailx,它的语法和配置稍有不同。

本指南将以 Ubuntu 默认情况下的 mailutils 版本为基础进行讲解,并会指出与其他版本的差异。
安装 mail 命令
如果你的系统中没有 mail 命令,首先需要安装它,推荐安装 mailutils,因为它功能更全面。
# 更新软件包列表 sudo apt update # 安装 mailutils sudo apt install mailutils
安装过程中,系统可能会提示你配置邮件发送程序(如 Postfix),对于初学者,最简单的选择是 "站点互联网站",然后选择 "仅发送",这样配置后,mail 命令就可以通过系统的本地邮件代理(如 Postfix)发送邮件,通常无需额外配置即可发送到互联网。
mail 命令的基本用法
mail 命令的核心功能有两个:发送邮件 和 阅读邮件。

A. 发送邮件
发送邮件的基本语法是:
mail -s "邮件主题" -a "附件文件路径" 收件人邮箱地址
-s:指定邮件的 主题。-a:附加一个 文件,可以多次使用-a来添加多个附件。收件人邮箱地址:邮件要发送到的地址。- 正文输入:执行命令后,光标会移到下一行,此时你可以输入邮件的正文内容。
- 结束输入:输入完正文后,按
Ctrl + D结束输入,或者在新的一行输入一个点号 然后按回车。
示例 1:发送一封简单的文本邮件
mail -s "这是一封测试邮件" your_email@example.com
你好,
这是一封通过 mail 命令发送的测试邮件。
祝好!
[按 Ctrl + D 结束]
示例 2:发送带有附件的邮件
假设你有一个名为 report.pdf 的文件要发送:

mail -s "周报 - 2025年10月" your_email@example.com -a report.pdf
按 Ctrl + D 结束。
B. 阅读和管理邮件
不带任何参数直接运行 mail 命令,会进入邮件交互模式,用于收件箱管理。
进入交互模式后,你会看到类似下面的输出:
Heirloom mailx version 12.5 7/5/10. See mailx(1) for help.
"/var/mail/your_username": 2 messages 2 new
>N 1 root@localhost Mon Oct 23 10:30 23/785 "系统通知"
N 2 your_friend@exa... Mon Oct 23 11:05 45/1543 "周末聚会"
输出解读:
> N 1:>表示当前光标所在行,N表示新邮件,1是邮件编号。root@localhost:发件人。Mon Oct 23 10:30:接收日期和时间。"系统通知":邮件主题。
常用交互命令:
| 命令 | 描述 | 示例 |
|---|---|---|
h |
显示邮件列表(默认命令,按回车也可以) | h |
数字 |
显示指定编号的邮件内容 | 1 |
n |
显示下一封邮件 | n |
p |
重新显示当前正在阅读的邮件内容 | p |
d 数字 |
删除指定编号的邮件 | d 1 (删除邮件1) |
d |
删除当前正在阅读的邮件 | d |
u 数字 |
取消删除指定编号的邮件 | u 1 (取消删除邮件1) |
s 文件名 |
将当前邮件保存到指定文件中 | s my_email.txt |
m 收件人 |
回复邮件(进入发送模式) | m friend@example.com |
r |
回复当前邮件给发件人(进入发送模式) | r |
q |
退出 mail 程序,已删除的邮件会被永久移除。 |
q |
x |
退出 mail 程序,所有修改(包括删除)都会被丢弃,邮件恢复到进入时的状态。 |
x |
或 help |
显示所有可用命令的帮助 |
高级配置:通过外部 SMTP 服务器发送邮件
默认情况下,mail 命令依赖于本地系统配置的邮件服务器(如 Postfix),这通常只能发送到本地系统用户或需要复杂的中继配置,更常见的场景是,我们希望 mail 像使用 Outlook 或 Foxmail 一样,通过 Gmail、QQ邮箱、企业邮箱等外部 SMTP 服务器发送邮件。
这需要修改配置文件。mailutils 的配置文件是 /etc/nail.rc(注意是 nail.rc 而不是 mail.rc),heirloom-mailx 的配置文件是 /etc/mail.rc。
以配置 Gmail 为例:
-
获取 Gmail 的“应用专用密码”
- 登录你的 Google 账户。
- 前往 Google 账户的安全性。
- 确保启用了“两步验证”。
- 在“登录 Google”部分,点击“应用专用密码”。
- 生成一个新的密码,给这个密码起个名字(如 "ubuntu-mail"),然后它会给你一个16位的字符串。请妥善保存这个密码。
-
编辑配置文件 使用
sudo编辑/etc/nail.rc文件。sudo nano /etc/nail.rc
-
添加 SMTP 配置 在文件末尾添加以下内容(请将
your_email@gmail.com和your_16_character_app_password替换为你的信息):# Set Gmail as the default SMTP server set smtp-use-starttls set smtp=smtp://smtp.gmail.com:587 set smtp-auth=login set smtp-auth-user=your_email@gmail.com set smtp-auth-password=your_16_character_app_password set from="Your Name <your_email@gmail.com>" set ssl-verify=ignore
参数解释:
smtp-use-starttls: 强制使用 STARTTLS 进行加密连接。smtp: 指定 SMTP 服务器地址和端口。smtp-auth: 指定认证方式。smtp-auth-user: 你的邮箱地址。smtp-auth-password: 你刚才生成的16位应用专用密码。from: 设置发件人显示的名称和地址。ssl-verify=ignore: 忽略 SSL 证书验证(可选,用于自签名证书等场景,不推荐在生产环境使用)。
-
保存并退出 在
nano中按Ctrl + X,然后按Y,最后按Enter。
配置完成后,你就可以直接使用 mail 命令发送邮件到任何互联网邮箱了,它会自动通过 Gmail 的服务器中转。
常见问题与注意事项
-
命令版本差异
mailutils和heirloom-mailx的配置文件名(nail.rcvsmail.rc)和部分命令选项可能略有不同,如果你发现命令不生效,请检查你安装的是哪个版本,并查阅对应的配置文件。- 你可以通过
mail --version来查看版本。
-
为什么发件人是
root@localhost? 如果你用sudo运行mail命令,或者直接在root用户下运行,发件人地址会显示为root@your_hostname,要解决这个问题,可以在配置文件中添加set from="Your Name <your_email@example.com>"来覆盖默认发件人。 -
邮件正文编辑器 默认情况下,
mail命令在输入正文时是逐行编辑的,如果你想使用更强大的编辑器(如vim或nano),可以在配置文件中设置:set EDITOR=vim
这样,当你发送邮件时,会自动调用
vim来编辑邮件正文。 -
邮件没有收到?
- 检查垃圾箱:邮件可能被误判为垃圾邮件。
- 检查日志:查看系统邮件日志,
tail /var/log/mail.log或journalctl -u postfix(如果你使用的是 Postfix),可以找到详细的发送和投递错误信息。 - 防火墙:确保服务器的防火墙没有阻止 SMTP 端口(如 25, 465, 587)。
| 功能 | 命令示例 |
|---|---|
| 发送简单邮件 | mail -s "主题" recipient@example.com |
| 发送带附件的邮件 | mail -s "主题" recipient@example.com -a file.txt |
| 阅读邮件 | mail |
| 在交互模式中 | h (列表), 1 (读邮件1), d (删除), q (退出) |
| 配置外部SMTP | 编辑 /etc/nail.rc 或 /etc/mail.rc |
mail 命令虽然界面简陋,但在服务器管理、自动化脚本(如备份报告、系统警报)中,它是一个非常轻量、可靠且强大的工具,希望这份指南对你有帮助!
