Linux系统之sendmail 命令详解
sendmail 是 Postfix 提供的与 Sendmail 兼容的接口工具,用于处理邮件发送、队列管理、别名初始化等操作。其核心功能是模拟传统 Sendmail 的命令行行为,同时依赖 Postfix 自身的服务(如 postqueue、postalias、smtpd 等)实现实际功能。部分 Sendmail 选项仅为兼容性保留,会被静默忽略。
·
sendmail 命令详解
一、命令概述
sendmail 是 Postfix 提供的与 Sendmail 兼容的接口工具,用于处理邮件发送、队列管理、别名初始化等操作。其核心功能是模拟传统 Sendmail 的命令行行为,同时依赖 Postfix 自身的服务(如 postqueue、postalias、smtpd 等)实现实际功能。部分 Sendmail 选项仅为兼容性保留,会被静默忽略。
二、语法格式
# 基础格式:发送邮件(带选项和收件人)
sendmail [选项...] [收件人...]
# 查看邮件队列(等效命令)
mailq
sendmail -bp
# 初始化别名数据库(等效命令)
newaliases
sendmail -I
三、核心功能
sendmail 主要通过调用 Postfix 组件实现以下功能:
- 邮件发送:从标准输入读取邮件内容,创建队列文件并安排投递(依赖
postdrop)。 - 队列管理:查看邮件队列(
mailq或sendmail -bp)、强制投递队列邮件(-q选项)。 - 别名管理:初始化别名数据库(
newaliases或sendmail -I),通过postalias实现。 - 兼容性支持:识别传统 Sendmail 选项,部分选项实际调用 Postfix 对应服务(如
-bd启动 Postfix 服务)。
四、选项详解
选项分为有效选项(实际执行操作)和兼容选项(被忽略,仅为兼容),以下为关键选项说明:
1. 邮件发送与配置选项
| 选项 | 说明 |
|---|---|
-B body_type |
指定邮件体 MIME 类型,可选 7BIT 或 8BITMIME。 |
-f sender |
设置信封发件人地址(退信接收地址),优先级高于 Errors-To: 头(Postfix 2.1 前)。 |
-F full_name |
设置发件人全名,仅在邮件无 From: 头时生效,覆盖 NAME 环境变量。 |
-i |
读取邮件时,不将单独的 . 视为输入结束(默认会以此作为结束标志)。 |
-t |
从邮件头中提取收件人(与命令行指定的收件人合并)。Postfix 2.1 前不允许同时在命令行指定收件人。 |
-v |
输出投递过程的详细报告(首次尝试);多组 -v 启用调试日志。 |
2. 队列与服务管理选项
| 选项 | 说明 |
|---|---|
-bp |
列出邮件队列(等效于 mailq),显示队列ID、大小、到达时间、发件人、待投递收件人及失败原因。 |
-q |
强制投递所有队列邮件(通过 postqueue 实现)。频繁执行可能影响投递性能。 |
-qI queueid |
立即投递指定队列ID的邮件(Postfix 2.4+ 支持,通过 postqueue 实现)。 |
-qR site |
立即投递发往指定站点的所有队列邮件(仅支持“快速刷新”服务的站点,通过 postqueue 实现)。 |
-bd |
启动 Postfix 守护进程(等效于 postfix start)。 |
-bs |
启动独立 SMTP 服务器模式,从标准输入读取 SMTP 命令并输出响应(通过 smtpd 实现,默认禁用中继控制,以 mail_owner 用户运行时启用)。 |
3. 别名与地址验证选项
| 选项 | 说明 |
|---|---|
-bi |
初始化别名数据库(等效于 newaliases),处理 alias_database 配置指定的文件(通过 postalias 实现)。 |
-bv |
验证收件人地址但不投递邮件,验证后发送邮件报告(Postfix 2.1+ 支持,用于测试地址路由配置)。 |
4. 兼容与被忽略的选项
部分选项仅为兼容 Sendmail 保留,无实际功能:
| 选项 | 说明 |
|---|---|
-Am、-Ac |
忽略。Postfix 不区分“初始提交”和“其他提交”的配置文件。 |
-bh、-bH |
忽略。Postfix 无持久化主机状态数据库。 |
-h hop_count |
忽略。通过 hopcount_limit 配置参数控制跳数限制。 |
-L label |
忽略。通过 syslog_name 配置参数设置日志标签。 |
-m、-n、-U |
忽略。仅为兼容性保留。 |
5. 其他功能选项
| 选项 | 说明 |
|---|---|
-C config_file/dir |
指定 Postfix 配置文件或目录路径(Postfix 2.3+ 有效);环境变量 MAIL_CONFIG 可覆盖此设置。 |
-N dsn |
控制投递状态通知(DSN): - 可选值: failure(失败时通知)、delay(延迟时通知)、success(成功时通知),或 never(不通知);- 默认为 delay,failure(Postfix 2.3+ 支持)。 |
-R return |
设置退信内容:hdrs(仅返回头)、full(返回完整内容,默认),受 bounce_size_limit 限制(Postfix 2.10+ 支持)。 |
-XV |
启用可变信封返回路径(VERP),用于邮件列表退信跟踪(默认分隔符为 +=,可通过 default_verp_delimiters 配置)。 |
五、命令别名
为简化操作,Postfix 提供以下等效命令:
mailq:等效于sendmail -bp,用于列出邮件队列。newaliases:等效于sendmail -I或sendmail -bi,用于初始化别名数据库。
六、关键说明
- 依赖 Postfix 服务:
sendmail仅为接口,实际功能由 Postfix 组件实现(如postqueue管理队列、postalias处理别名)。 - 版本差异:部分选项仅在特定 Postfix 版本后支持(如
-bv需 2.1+,-qI需 2.4+),使用时需注意版本兼容性。 - 配置参数:核心行为受 Postfix 配置文件(
main.cf)控制,如alias_database(别名数据库路径)、queue_directory(队列目录)、syslog_name(日志标识)等。 - 安全性:工具本身不设置用户/组ID,但需处理不可信输入,依赖 Postfix 自身的访问控制(如
authorized_submit_users限制提交权限)。
七、使用示例
-
发送邮件:
echo "Subject: Test Mail" | cat - message.txt | sendmail -v recipient@example.com # 从标准输入读取邮件内容(含主题和正文),发送给指定收件人,输出详细日志 -
查看邮件队列:
mailq # 或 sendmail -bp,列出所有队列邮件及状态 -
更新别名数据库:
newaliases # 或 sendmail -I,更新 /etc/aliases 等配置的别名 -
验证收件人地址:
sendmail -bv user@example.com # 验证地址有效性,不实际发送邮件
更多推荐
所有评论(0)