☰
ZeroTermux 内置命令手册解读:sendmail 电子邮件传送代理(MTA)完整使用指南
2026/10/15 21:03:26 网站建设 项目流程
  • 移动开发
  • 开发工具

【免费下载链接】ZeroTermux

项目地址:https://gitcode.com/GitHub_Trending/ze/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.com

echo输出的内容即邮件正文。

方式三:使用文件重定向发送

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.txt

uuencode第一个参数是要发送的文件,第二个参数是收件人看到的显示文件名。

使用前提:系统必须已安装并启动 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

项目地址:https://gitcode.com/GitHub_Trending/ze/ZeroTermux
点击查看免费下载

相关推荐

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

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

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

立即咨询