- 移动开发
- 开发工具
【免费下载链接】ZeroTermux
导读
sendmail是一款经典的电子邮件传送代理程序(Mail Transfer Agent,MTA),它基于标准的简单邮件传输协议(SMTP)负责把邮件从一个系统投递到另一个系统,是 Linux/Unix 世界中历史最悠久的邮件服务器实现之一。本文以 ZeroTermux 内置命令手册 app/src/main/assets/cmd/sendmail.md 为骨架,完整讲解 sendmail 的语法、全部命令行选项,并结合仓库中 mail.md、mailq.md、mailstat.md 等关联文档与源码实现,说明这套命令手册如何在 ZeroTermux 中落地使用。读完本文,你将掌握 sendmail 核心选项的含义与适用场景,能够在 ZeroTermux 终端中利用mail+sendmail组合完成邮件发送、队列查看与状态排查。
sendmail:基于 SMTP 的电子邮件传送代理
sendmail命令是一款著名的电子邮件传送代理程序,也就是平常所说的电子邮件服务器。它基于标准的简单邮件传输协议(SMTP)工作,核心职责包括:
- 接收本地用户或程序提交的邮件;
- 通过 SMTP 协议与远程邮件服务器会话,将邮件路由并投递到目标地址;
- 当目标服务器暂时不可达时,将邮件暂存到本地队列(spool)并定时重试。
在经典 Unix 邮件体系中,用户并不直接面对 sendmail,而是通过mail、mailx等用户代理(MUA)提交邮件,再由 sendmail 这类 MTA 完成实际传输。这一点在 ZeroTermux 内置的 mail.md 中有明确说明:“因为 mail 程序本身就是调用 sendmail 来进行邮件发送的,因此我们可以在 mail 命令中使用 sendmail 的参数进行配置”。
语法
sendmail 的标准调用形式为:
sendmail(选项)作为 MTA,sendmail 既可以前台单次运行以发送单封邮件,也可以以守护进程方式常驻后台、持续监听投递请求并处理邮件队列。
选项详解
ZeroTermux 内置手册 sendmail.md 收录了 sendmail 最常用的一组选项,逐条说明如下:
| 选项 | 功能说明 | 典型使用场景 |
|---|---|---|
-bd | 以守护进程方式运行指令 | 常驻后台、随系统启动持续监听 SMTP 端口并处理邮件队列 |
-bD | 以前台运行方式运行 | 与-bd等价,但运行在前台,便于调试时直接观察输出 |
-bi | 初始化别名数据库 | 根据/etc/aliases等别名文件重建aliases.db,使别名生效 |
-bm | 以常规发送电子邮件 | 默认的投递模式,从标准输入读取邮件内容并投递 |
-bp | 显示邮件的发送队列 | 查看当前积压未投递的邮件,等同于mailq命令 |
-C | 指定配置文件 | 指定非默认位置的 sendmail 配置文件(如-C /path/to/sendmail.cf) |
-D | 将调试的输出信息保存到日志文件 | 调试时把详细日志写入文件,而不是显示在标准输出设备上 |
-F | 指定邮件发送者全名 | 设置发件人的显示姓名(Full Name) |
-n | 禁止使用邮件别名功能 | 强制不使用别名解析,常用于脚本或调试 |
-f | 指定发件人的名字 | 设置信封上的发件人地址(Envelope From) |
-q | 设置处理邮件队列中邮件的时间间隔 | 如-q30m表示每 30 分钟处理一次队列 |
与 mail 命令协同:实际发送邮件
单独使用 sendmail 较为繁琐,日常发送邮件通常借助mail命令,由其在底层调用 sendmail。ZeroTermux 内置 mail.md 给出了三种可直接照搬的发送方式:
方式一:直接使用 shell 当编辑器
mail -s "Hello from shell" admin@example.com hello,this is the content of mail. welcome to example.com-s指定邮件主题,admin@example.com为收件人。回车进入正文编写,输入完成后按CTRL+D结束,随后提示输入 Cc 抄送地址,直接回车即完成发送。
方式二:使用管道发送
echo "hello,this is the content of mail.welcome to example.com" | mail -s "Hello from pipe" admin@example.comecho输出的内容即邮件正文。
方式三:使用文件重定向发送
mail -s "Hello from file" admin@example.com < mail.txt将mail.txt内容作为邮件正文发送。这也是唯一能可靠保证中文内容不出现乱码的方式。
透传 sendmail 选项:指定发件人
由于mail底层调用 sendmail,因此可以通过--分隔符把 sendmail 的选项透传下去:
mail -s "Hello with sender" admin@example.com -- -f user@example.com < mail.txt其中-f user@example.com即上文表格中的-f选项,用于指定邮件的发送人邮件地址。
发送附件
先安装sharutils软件包获取uuencode编码工具:
yum install sharutils再将文件编码后随邮件发送:
uuencode test.txt test | mail -s "hello,see the attachment" admin@example.com < mail.txtuuencode第一个参数是要发送的文件,第二个参数是收件人看到的显示文件名。
使用前提:系统必须已安装并启动 sendmail(或兼容 MTA),且能够连接外网。命令中的邮箱地址请替换为你自己的地址。
邮件队列与状态排查:mailq / mailstat
当 sendmail 无法立即投递邮件时,邮件会进入发送队列,此时可以借助配套命令排查:
- mailq.md:显示待发送的邮件队列。每个条目包含队列 ID、邮件大小、加入队列时间、发送者与接收者;若最后一次尝试后仍未投递成功,还会显示失败原因。选项
-v可输出详细信息,典型输出如下:
[root@localhost ~]# mailq -v /var/spool/mqueue is empty Total requests: 0- mailstat.md:显示到达的邮件状态统计,支持
-k(不清空日志)、-l(长格式)、-m(合并错误信息)、-o(使用旧日志)、-t(简洁格式)、-s(无邮件时不输出)等选项,参数为要读取的邮件日志文件。
此外,ZeroTermux 内置的 at.md 与 batch.md 也展示了 sendmail 的另一典型用途:-m选项可在定时任务执行完成后通过邮件通知用户(如# mail root),这也是 cron/at 任务体系中 MTA 最常见的应用之一。
在 ZeroTermux 中查阅与使用命令手册
以上所有命令文档均位于 ZeroTermux 应用的assets/cmd/目录下,随 APK 打包内置。用户可以在 ZeroTermux 的命令对话框中检索并阅读这些手册,其加载链路可以在源码中得到印证:
- CommandDialog.java 中通过
assetManager.list("cmd")读取assets/cmd/目录下全部命令文档,并在搜索框中按文件名做前缀匹配过滤; - 点击某一命令条目后,showCmdDetail() 通过
assetManager.open("cmd/" + cmd)读取对应的 Markdown 文档,使用 commonmark 的Parser解析为节点树,再经HtmlRenderer渲染为 HTML,最终交给内置WebView展示。
因此,在 ZeroTermux 中你可以随时在命令对话框中输入sendmail、mail、mailq、mailstat检索对应手册,并按上文方式在终端会话中实际执行这些命令;也可以参考 ZtCommandDefHelper.kt 所描述的“添加命令”机制,把常用邮件发送命令保存为自定义命令,方便一键重复调用。
小结
sendmail作为基于 SMTP 的电子邮件传送代理,是 Linux 邮件系统的传输基石。其核心选项覆盖了守护进程运行(-bd/-bD)、邮件投递(-bm)、队列管理(-bp/-q)、别名初始化(-bi)以及发件人指定(-f/-F)等关键操作。配合mail的三种发送方式、mailq的队列查看与mailstat的状态统计,即可在 ZeroTermux 终端中完成从发送、投递到排查的完整邮件操作闭环。
- 移动开发
- 开发工具
【免费下载链接】ZeroTermux
相关推荐
ZeroTermux 内置命令手册解读:elm 纯文本邮件客户端使用指南
ZeroTermux 内置命令手册解读:elm 纯文本邮件客户端使用指南 导读 elm 是一款运行在终端中的纯文本邮件客户端,通过全屏幕交互界面完成邮件的读取、
移动开发开发工具ZeroTermux 内置命令手册解读:joe 纯文本编辑器完整使用指南
ZeroTermux 内置命令手册解读:joe 纯文本编辑器完整使用指南 joe 是一款功能强大的纯文本编辑器,本指南基于 ZeroTermux 应用内置的 j
移动开发开发工具ZeroTermux 内置命令手册解读:unarj 命令解压 .arj 压缩包完整指南
ZeroTermux 内置命令手册解读:unarj 命令解压 .arj 压缩包完整指南 本指南以 ZeroTermux 内置命令手册中的 unarj.md 为骨
移动开发开发工具
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考