☰
linux-command 项目详解:Linux 下 mail 命令发送与接收电子邮件全实战指南
2026/10/2 1:58:53 网站建设 项目流程
  • 文档
  • 教程

【免费下载链接】linux-command

Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux

项目地址:https://gitcode.com/GitHub_Trending/linux/linux-command
点击查看免费下载

本篇文章基于开源仓库 linux-command(Linux 命令大全搜索工具)中的 mail 命令文档,系统讲解命令行电子邮件工具mail的语法、选项、参数以及四种从 shell 发送邮件的实战方式,并深入探讨中文乱码规避、sendmail 参数透传与附件发送等进阶用法,帮助你掌握在 CentOS 等 Linux 环境下用一行命令完成邮件投递的完整技能。

mail 命令是什么

mail命令是 Linux 下命令行方式的电子邮件发送和接收工具,其操作的交互界面不像elm或pine那样容易上手,但功能非常完整。在 linux-command 项目中,它被收录在"电子邮件与新闻组"命令分类之下,与elm、mailq、sendmail等命令共同构成了从发信、投递到队列管理的命令行邮件工具链:

  • sendmail 命令文档:一款著名的电子邮件传送代理(MTA),基于标准的简单邮件传输协议(SMTP),mail程序本身正是调用它来完成实际的邮件发送;
  • mailq 命令文档:显示待发送的邮件队列,用于排查投递失败的邮件;
  • elm 命令文档:纯文本交互式全屏幕界面的邮件客户端,与mail的功能定位类似但交互方式不同。

语法与选项

mail命令的基本语法为:

mail(选项)(参数)

常用选项及其含义如下:

选项作用
-b<地址>指定密件副本(Bcc)的收信人地址
-c<地址>指定副本(Cc)的收信人地址
-f<邮件文件>读取指定邮件文件中的邮件
-i不显示终端发出的信息
-I使用互动模式
-n程序使用时,不使用mail.rc文件中的设置
-N阅读邮件时,不显示邮件的标题
-s<邮件主题>指定邮件的主题
-u<用户帐号>读取指定用户的邮件
-v执行时,显示详细的信息

参数(邮件地址)指收信人的电子邮箱地址。

实例一:直接使用 shell 作为编辑器

最简单的发信方式是把 shell 当作邮件正文编辑器,直接交互式输入内容:

mail -s "Hello from jsdig.com by shell" admin@jsdig.com hello,this is the content of mail. welcome to www.jsdig.com

第一行是输入的命令,-s表示邮件的主题,后面的admin@jsdig.com是邮件的接收人。输入完这行命令回车后,会进入邮件正文的编写,可以输入任意文字(如示例中的两行内容)。当邮件正文输入完成后,需要按CTRL+D结束输入,此时系统会提示输入 Cc 地址(邮件抄送地址),没有则直接回车即可完成邮件发送。

实例二:使用管道进行邮件发送

通过管道把echo的输出作为邮件正文传入mail,可以在一行内完成发送:

echo "hello,this is the content of mail.welcome to www.jsdig.com" | mail -s "Hello from jsdig.com by pipe" admin@jsdig.com

其中echo之后的内容即邮件正文,这种写法非常适合在脚本中与变量、命令输出拼接使用,例如:

df -h | mail -s "磁盘使用情况" admin@example.com

实例三:使用文件进行邮件发送

把文件内容重定向为邮件正文,是三种普通发信方式中最适合处理长文本和中文的方式:

mail -s "Hello from jsdig.com by file" admin@jsdig.com < mail.txt

执行上述命令后,mail.txt文件的内容会作为邮件正文发送给收件人。

关于中文乱码的说明

使用上述前两种方式时,由于邮件内容直接在 shell 中敲入(或粘贴),无法输入中文,即使粘贴成功,收到的邮件也往往是乱码。而第三种方式可以在 Windows 下先编辑好邮件内容文件,再放到 Linux 下发送,从而正常发送中文正文。不过,邮件的中文标题目前仍没有找到稳妥的解决办法。

实例四:透传 sendmail 参数指定发件人

由于mail程序本身就是调用 sendmail 来完成邮件发送的,因此可以在mail命令中直接使用 sendmail 的参数进行配置。例如想使用特定的发件人地址发送邮件:

mail -s "Hello from jsdig.com with sender" admin@jsdig.com -- -f user@jsdig.com < mail.txt

命令中的-- -f user@jsdig.com是 sendmail 的选项,其中-f表示邮件的发件人邮件地址。从 sendmail 命令文档 可以看到,sendmail 还支持其他常用选项,例如-F指定邮件发送者全名、-bp显示邮件的发送队列、-q设置处理邮件队列中邮件的时间间隔等,都可以按同样的--透传方式与mail配合使用。

发送带附件的邮件

在 Linux 下使用mail命令发送附件也很简单,但首先需要安装uuencode软件包。uuencode程序用于对二进制文件进行编码,使其适合通过邮件进行发送。在 CentOS 上安装该软件包的命令如下:

yum install sharutils

安装完成后即可发送附件:

uuencode test.txt test | mail -s "hello,see the attachement" admin@jsdig.com < mail.txt

uuencode有两个参数:第一个是要发送的文件,第二个是显示的文件名称。执行后test.txt文件就会作为邮件的附件随邮件一起发送出去。

环境要求与使用前提

以上介绍的是在 CentOS 下使用mail发送电子邮件的方法,使用时需要满足以下前提:

  • Linux 系统必须安装了 sendmail 并已开启服务,同时保证服务器可以连接外网;
  • 文中所有命令均已验证可用,但使用时需要将命令中的电子邮件地址替换成自己的真实邮箱地址;
  • 若邮件未能投递,可结合 mailq 命令文档 查看待发送邮件队列及投递失败原因,例如执行mailq -v可查看详细队列信息,格式与 sendmail 的-bp选项一致。

结合 linux-command 项目快速查阅

mail命令文档收录于 linux-command 仓库的 command 目录 中,每个命令对应一个 Markdown 文件。除了在线阅读 Web 版本外,还可以通过npm安装linux-command包,在代码中直接引用命令文档内容:

npm install linux-command
var comm = require("linux-command"); console.log("---->", comm.ls); var mail = require("linux-command/command/mail.md"); console.log("---->", mail); // markdown string

项目中 scripts/dash.mjs 展示了命令文档索引的构建机制:它读取dist/data.json索引文件,为每个命令生成条目并写入 SQLite 搜索索引(searchIndex表),最终构建出可供 Dash 等工具离线检索的 docset 包,mail等 600 多个命令文档均可被索引和离线检索。

  • 文档
  • 教程

【免费下载链接】linux-command

Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux

项目地址:https://gitcode.com/GitHub_Trending/linux/linux-command
点击查看免费下载
上一篇:构建智能物流仓储系统:Hermes Agent库存管理与机器人协调
下一篇:gradle-build-action终极指南:从v3迁移到setup-gradle的无缝过渡技巧

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询