- 文档
- 教程
【免费下载链接】linux-command
Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux
本篇文章基于开源仓库 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.txtuuencode有两个参数:第一个是要发送的文件,第二个是显示的文件名称。执行后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-commandvar 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
相关推荐
NumPy 1.17.1 版本发布解析:24 项修复背后的关键改动与源码印证
NumPy 1.17.1 版本发布解析:24 项修复背后的关键改动与源码印证 导读 本文基于 NumPy 官方仓库中的 1.17.1 版本发布说明( doc/s
文档教程Linux 光盘刻录命令 cdrecord 实战指南(linux-command 命令手册详解)
Linux 光盘刻录命令 cdrecord 实战指南(linux command 命令手册详解) 本篇指南聚焦 Linux 系统下的经典刻录命令 cdrecor
文档教程linux-command 命令速查:clock 命令详解与 Linux 硬件时钟(RTC)时间调整实战指南
linux command 命令速查:clock 命令详解与 Linux 硬件时钟(RTC)时间调整实战指南 本文基于 linux command https:
文档教程
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考