菜鸟科技网

mail命令如何发送邮件?

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

mail命令如何发送邮件?-图1
(图片来源网络,侵删)

mail 命令简介

mail 命令主要用于在命令行下读取和发送邮件,它的核心优势在于可以轻松地与 Shell 脚本结合,实现自动化邮件发送功能(备份完成后的通知、系统错误报告等)。

在大多数现代 Linux 发行版中,你使用的可能是 mail 的一个改进版本,称为 mailx(例如在 CentOS/RHEL 上)或 heirloom-mailx(一个功能更丰富的 mailx 实现),它们的用法基本兼容,你可以通过 which mailman mail 来查看具体是哪个版本。


如何发送邮件(核心用法)

发送邮件的基本语法如下:

mail -s "邮件主题" -a "附件文件路径" 收件人地址 < 邮件正文文件

或者,在交互模式下直接输入正文:

mail命令如何发送邮件?-图2
(图片来源网络,侵删)
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:发送一封简单的纯文本邮件

这是最基础的用法,邮件正文直接通过输入重定向(<)来自一个文件。

  1. 创建邮件正文文件 message.txt

    echo "Hello, this is a test email sent from the command line.
    Best regards,
    Your Server" > message.txt
  2. 发送邮件

    mail命令如何发送邮件?-图3
    (图片来源网络,侵删)
    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 的交互界面,光标会停在 > 提示符后。

  1. 输入邮件正文

    Hi there,
    This email was typed directly into the mail command.
    It's very convenient for short messages.
    Sincerely,
    Me
  2. 结束输入并发送: 在最后一行的末尾,按下 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 命令本身不发送邮件,它只是一个客户端,它需要依赖一个邮件传输代理,如 sendmailpostfixssmtp

在云服务器或容器环境中,通常不会配置完整的 MTA,因为那很复杂且不安全,这时,我们通常会使用一个更简单的工具:msmtp

使用 msmtp 作为发送后端

msmtp 是一个 SMTP 客户端,它可以将 mail 命令的请求转发到一个指定的 SMTP 服务器(比如你的 Gmail、QQ邮箱或企业邮箱)。

步骤:

  1. 安装 msmtpmsmtp-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

  2. 配置 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
  3. 测试发送: 现在你可以像前面示例中那样使用 mail 命令了,它会通过 msmtp 将邮件发送到你的 Gmail,再由 Gmail 转发出去。


常见问题与技巧

  • 查看邮件队列: 如果邮件发送失败,可以查看邮件队列,在 postfix 系统中,使用:

    mailq
  • 清空邮件队列: 如果队列中有大量无法发送的邮件,可以清空它(谨慎使用!):

    postsuper -d ALL
  • 交互模式常用命令: 在 mail 的交互模式下,你可以使用以下命令:

    • hheaders: 显示邮件列表。
    • 数字 (1): 阅读第一封邮件。
    • d 数字: 删除指定编号的邮件。
    • s 文件名: 将当前邮件保存到文件。
    • q: 退出 mail 程序。
    • h: 显示帮助信息。
  • 格式化邮件(HTML): mail 命令默认发送纯文本邮件,要发送 HTML 邮件,你需要使用更高级的工具如 muttswaks,或者通过管道处理,用 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 命令是一个小巧而强大的工具,特别适合自动化任务,要成功使用它,关键在于:

  1. 理解基本语法mail -s "主题" -a "附件" 收件人 < 正文
  2. 配置好后端:根据你的环境,正确配置 sendmailpostfix 或更简单的 msmtp
  3. 处理认证:特别是使用外部 SMTP 服务(如 Gmail)时,务必使用应用专用密码。

希望这份详细的指南能帮助你掌握 mail 命令!

分享:
扫描分享到社交APP
上一篇
下一篇