sendmail 命令详解

一、命令概述

sendmailPostfix 提供的与 Sendmail 兼容的接口工具,用于处理邮件发送、队列管理、别名初始化等操作。其核心功能是模拟传统 Sendmail 的命令行行为,同时依赖 Postfix 自身的服务(如 postqueuepostaliassmtpd 等)实现实际功能。部分 Sendmail 选项仅为兼容性保留,会被静默忽略。

二、语法格式

# 基础格式:发送邮件(带选项和收件人)
sendmail [选项...] [收件人...]

# 查看邮件队列(等效命令)
mailq
sendmail -bp

# 初始化别名数据库(等效命令)
newaliases
sendmail -I

三、核心功能

sendmail 主要通过调用 Postfix 组件实现以下功能:

  1. 邮件发送:从标准输入读取邮件内容,创建队列文件并安排投递(依赖 postdrop)。
  2. 队列管理:查看邮件队列(mailqsendmail -bp)、强制投递队列邮件(-q 选项)。
  3. 别名管理:初始化别名数据库(newaliasessendmail -I),通过 postalias 实现。
  4. 兼容性支持:识别传统 Sendmail 选项,部分选项实际调用 Postfix 对应服务(如 -bd 启动 Postfix 服务)。

四、选项详解

选项分为有效选项(实际执行操作)和兼容选项(被忽略,仅为兼容),以下为关键选项说明:

1. 邮件发送与配置选项
选项 说明
-B body_type 指定邮件体 MIME 类型,可选 7BIT8BITMIME
-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 -Isendmail -bi,用于初始化别名数据库。

六、关键说明

  1. 依赖 Postfix 服务sendmail 仅为接口,实际功能由 Postfix 组件实现(如 postqueue 管理队列、postalias 处理别名)。
  2. 版本差异:部分选项仅在特定 Postfix 版本后支持(如 -bv 需 2.1+,-qI 需 2.4+),使用时需注意版本兼容性。
  3. 配置参数:核心行为受 Postfix 配置文件(main.cf)控制,如 alias_database(别名数据库路径)、queue_directory(队列目录)、syslog_name(日志标识)等。
  4. 安全性:工具本身不设置用户/组ID,但需处理不可信输入,依赖 Postfix 自身的访问控制(如 authorized_submit_users 限制提交权限)。

七、使用示例

  1. 发送邮件

    echo "Subject: Test Mail" | cat - message.txt | sendmail -v recipient@example.com
    # 从标准输入读取邮件内容(含主题和正文),发送给指定收件人,输出详细日志
    
  2. 查看邮件队列

    mailq  # 或 sendmail -bp,列出所有队列邮件及状态
    
  3. 更新别名数据库

    newaliases  # 或 sendmail -I,更新 /etc/aliases 等配置的别名
    
  4. 验证收件人地址

    sendmail -bv user@example.com  # 验证地址有效性,不实际发送邮件
    
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐