Linux sendmail 参数如何正确配置使用?

99ANYc3cd6
预计阅读时长 16 分钟
位置: 首页 参数 正文

sendmail 是一个非常强大且复杂的工具,它主要有两个层面的使用方式:

linux sendmail 参数
(图片来源网络,侵删)
  1. 命令行模式:直接在终端执行,用于快速发送单封邮件,常用于脚本自动化。
  2. 邮件传输代理:作为系统后台服务,负责接收、路由和发送所有邮件(这是它最主要、最复杂的功能)。

下面我们主要聚焦于命令行模式的参数,因为这是最常被问到的,对于其作为 MTA 的配置,会简要提及。


核心命令行参数(用于发送邮件)

在命令行下,sendmail 的基本用法有两种:

交互式发送

这是最简单的方式,sendmail 会提示你输入收件人、主题和邮件正文。

sendmail -t

执行后,你需要依次输入:

linux sendmail 参数
(图片来源网络,侵删)
  • 收件人:格式为 To: user@example.com,然后按回车。
  • 抄送(可选):格式为 Cc: another@example.com,然后按回车。
  • 主题(可选):格式为 Subject: This is a test email,然后按回车。
  • 邮件正文:输入你的邮件内容,输入完成后,单独在一行输入一个点 ,然后按回车,邮件就会被发送。

示例:

$ sendmail -t
To: recipient@example.com
Cc: cc_user@example.com
Subject: My First Test Email
Hello,
This is the body of my email.
I hope you are doing well.
.

命令行参数模式(非交互式)

这种方式更常用于脚本中,因为它允许你通过命令行参数直接指定所有信息,而无需手动输入。

常用参数详解

参数 全称 描述 示例
-t --to 提取收件人、抄送、密送等邮件头信息,这是最常用的参数之一。 sendmail -t < email.txt
-i --ignore-dot 在交互模式下,将邮件正文中的单个点 视为普通字符,而不是邮件结束的标志。 sendmail -it
-i --init-file (注意:这个 -i--init-file 的缩写,与 --ignore-dot 冲突,实际使用中 --ignore-dot 更常见)
-f --from 指定发件人地址,这通常是必须的,否则邮件可能被邮件服务器拒绝或被标记为垃圾邮件。 sendmail -f my_email@mydomain.com -t < email.txt
-F --full-name 指定发件人的全名 sendmail -F "My Name" -f my_email@mydomain.com -t < email.txt
-t --to (已列出) 从邮件内容中提取收件人。
-s --subject 在命令行直接指定邮件主题,如果邮件内容中也有 Subject: 头,这个参数会覆盖它。 sendmail -s "My Subject" -t < email.txt
-a --append 附加指定的邮件头,可以多次使用。 sendmail -a "X-Custom-Header: Value" -t < email.txt
-b --batch 以批处理模式运行,从标准输入读取邮件,通常与 -t 一起使用。 sendmail -bt (用于测试配置,非发送)
-bv --verify 验证收件人地址,但不发送邮件,它会检查该用户是否存在或是否可以接收邮件。 sendmail -bv user@example.com
-v --verbose 显示详细的发送过程,对于调试非常有用,可以看到与邮件服务器的交互过程。 sendmail -v -t < email.txt
-q --queue 处理队列中的邮件,通常由系统定时任务调用,用于重试发送失败的邮件。 sendmail -q
-q --quit 优雅地停止 sendmail 守护进程。 sendmail -q (在守护进程模式下)
-bd --daemon 以守护进程模式运行,监听网络连接,接收其他服务器的邮件,这是 sendmail 作为 MTA 的核心功能。 通常由系统服务脚本管理,不直接手动运行。
-bs --SMTP 以 SMTP 协议模式运行,与 -t 类似,但它期望输入符合 SMTP 协议的命令(如 MAIL FROM:, RCPT TO:)。 sendmail -bs
-C --config 指定一个非默认的配置文件,用于测试不同的配置。 sendmail -C /path/to/custom-config.cf
-d --debug 开启调试模式,后面可以跟一个数字来指定调试的详细级别和类型。 sendmail -d0.1 -t (显示版本和配置文件路径)

综合使用示例

假设你要发送一封 HTML 格式的邮件,内容保存在 report.html 文件中。

示例 1:使用邮件头文件

  1. 创建邮件头文件 headers.txt

    To: boss@company.com
    Cc: team@company.com
    Subject: Daily Sales Report
    From: sales@mycompany.com
    Content-Type: text/html; charset=UTF-8
  2. 创建邮件正文 report.html

    <h1>Daily Sales Report</h1>
    <p>Total sales today: <b>$10,000</b></p>
  3. 合并并发送

    # 将邮件头和正文合并,通过管道传递给 sendmail
    cat headers.txt report.html | sendmail -t

示例 2:使用命令行参数和文件重定向

已经包含了所有必要的邮件头(如 To:, Subject:),你可以直接发送文件。

# 假设 email_with_headers.txt 包含了 To, Subject, From 等所有信息
sendmail -t < email_with_headers.txt

示例 3:带调试和指定发件人

# 发送一个简单的文本邮件,并显示详细过程
(
  echo "To: recipient@example.com"
  echo "From: me@mydomain.com"
  echo "Subject: Test with Debug"
  echo ""
  echo "This is a test message with verbose output."
) | sendmail -v -f me@mydomain.com

执行后,你会看到类似下面的输出,显示了与邮件服务器的握手、传输和断开过程:

>>> 220 ESMTP ...
>>> EHLO ...
>>> MAIL FROM:<me@mydomain.com>
>>> RCPT TO:<recipient@example.com>
>>> DATA
>>> .
>>> 250 ...
>>> 250 ...
>>> 250 ...
>>> 250 Message accepted for delivery
>>> QUIT

重要注意事项

  1. 本地邮件 vs. 远程邮件

    • 如果收件人是本地系统用户(如 root, john),sendmail 会直接将邮件写入该用户的邮箱文件(通常是 /var/spool/mail/username)。
    • 如果收件人是外部邮箱地址(如 user@gmail.com),sendmail 会将其提交到邮件队列,然后尝试通过配置的邮件服务器(如 postfix, exim, 或远程的 SMTP 服务器)发送出去。
  2. sendmail vs. mail/mailx

    • mailmailx 是一个更简单的邮件客户端,它底层也是调用 sendmail 或其替代品(如 postfixsendmail 兼容包装器)来发送邮件,对于简单任务,mail 命令可能更方便。
  3. 作为 MTA 的配置

    • sendmail 的核心功能是作为 MTA,它的行为由主配置文件 /etc/mail/sendmail.cf(或更现代的 /etc/mail/sendmail.mc)控制。
    • 现代系统上,sendmail 经常被 PostfixExim 等更易于配置的 MTA 替代,但为了兼容性,这些软件包通常会提供一个 sendmail 命令行工具,它实际上是调用它们自己的后端,你可以使用 which sendmail 查看你的系统使用的是哪个。
  4. 安全与垃圾邮件

    • 不要在脚本中硬编码发件人地址,特别是不要伪造发件人(除非你有充分理由并了解后果)。
    • 使用 -f 指定一个真实的、存在的发件人地址,可以大大提高邮件的送达率,避免被标记为垃圾邮件。
    • 确保你的服务器没有配置为开放中继,否则会被垃圾邮件发送者利用。

希望这份详细的参数列表和示例能帮助你更好地理解和使用 sendmail

-- 展开阅读全文 --
头像
AirPlay如何链接智能电视?
« 上一篇 今天
Surface Laptop尺寸参数有哪些?
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码

最近发表

标签列表

目录[+]