菜鸟科技网

Postfix邮件命令如何正确使用?

mail 命令是一个在 Linux/Unix 终端中发送和接收邮件的经典命令行工具,它非常适用于自动化脚本、系统通知或简单的邮件发送任务。

Postfix邮件命令如何正确使用?-图1
(图片来源网络,侵删)

mail 命令简介

mail 命令主要有两个功能:

  1. 发送邮件:作为邮件客户端,将文本内容作为邮件发送给指定的收件人。
  2. 读取邮件:作为邮件用户代理,读取用户的收件箱中的邮件(较少用于此目的,现在更常用 muttthunderbird)。

在 Postfix 环境下,当你使用 mail 命令发送邮件时,它实际上会调用系统的邮件传输代理,也就是 Postfix,将邮件传递出去,Postfix 负责处理邮件的路由、中继和投递。


发送邮件 (最常用)

这是 mail 命令最核心的用法,基本语法如下:

mail [-s "邮件主题"] [-a "附件文件"] [-c "抄送地址"] [-b "密送地址"] 收件人地址

参数说明:

Postfix邮件命令如何正确使用?-图2
(图片来源网络,侵删)
  • -s "Subject": 指定邮件的主题,这是一个非常重要的参数,建议始终使用。
  • -a "filename": 添加附件,可以多次使用 -a 来添加多个附件。
  • -c "address": 指定抄送 收件人。
  • -b "address": 指定密送 收件人。
  • 收件人地址: 邮件的主要接收者。

基本用法示例

发送一个简单的邮件

mail user@example.com

执行后,终端会进入邮件正文输入模式,你需要输入邮件内容,并以 Ctrl+D (表示文件结束符 EOF) 结束输入。

# 在终端中输入以下命令
mail user@example.com
# 然后输入邮件正文
Hi there,
This is a test email sent from the command line using the mail command.
Best regards,
Your Name
# 按下 Ctrl+D 结束输入
# (此时可能会提示你输入抄送人 Cc:,直接回车跳过)
EOT

发送带有主题的邮件

强烈建议始终使用 -s 参数指定主题,否则收件人看到的邮件主题可能是空白的或 "No Subject"。

Postfix邮件命令如何正确使用?-图3
(图片来源网络,侵删)
mail -s "System Update Notification" admin@yourdomain.com

在命令行中直接指定正文 很短,可以使用 加上引号的方式直接在命令行中指定,而不用进入交互模式。

mail -s "Quick Status Check" dev-team@company.com <<EOF
Hi Team,
Just a quick note to confirm that the nightly build has completed successfully.
Regards,
Build System
EOF

这里使用了 Here Document (<<EOF) 的方式,可以方便地输入多行文本。

发送带附件的邮件

使用 -a 参数可以轻松添加附件,附件可以是任意文件。

# 发送一个日志文件作为附件
mail -s "Server Log Attached" support@yourdomain.com -a /var/log/syslog.1 <<EOF
Hi Support Team,
Please find the server log from yesterday attached for your review.
Thanks,
Admin
EOF

抄送 和密送

# 发送给 primary@example.com,并抄送给 secondary@example.com,密送给 hidden@example.com
mail -s "Project Update" primary@example.com -c secondary@example.com -b hidden@example.com <<EOF
Hello everyone,
Here is the latest project update...
EOF

邮件正文中的特殊命令

mail 命令的交互模式下(即你输入完 mail 命令并按下回车后),除了输入邮件正文,你还可以使用一些特殊命令来编辑邮件。

命令 功能 示例
~h 编辑邮件的信息(To, Subject, Cc, Bcc) ~h
~t address 添加新的收件人 ~t another_user@example.com
~s new subject 修改邮件主题 ~s New Important Subject
~c address 添加抄送人 ~c manager@company.com
~b address 添加密送人 ~b ceo@company.com
~a text 在邮件正文末尾追加文本 ~a Regards,
~i text 在邮件正文开头插入文本 ~i Dear Team,
~d 将草稿文件 ($HOME/dead.letter) 的内容读入到当前邮件中 ~d
~w filename 将当前邮件正文写入到一个文件中(保存草稿) ~w my_draft.txt
~q 退出编辑模式,但不发送邮件,邮件内容会保存到 dead.letter 文件中。 ~q
发送邮件并退出编辑模式。

示例:在发送前编辑邮件头

mail user@example.com
# 进入交互模式后,先编辑邮件头
~h
# 系统会提示你输入 To, Subject, Cc, Bcc
To: [user@example.com]
Subject: [My Custom Subject]
Cc: []
Bcc: []
# 按回车确认
# 然后输入邮件正文
This is the body of my email.
# 按下 Ctrl+D 发送
EOT

接收邮件

虽然 mail 命令也可以用来读取收件箱,但它比较基础,功能有限,它通常用于快速查看最新的几封邮件。

mail

执行此命令后,你会看到收件箱的邮件列表,格式如下:

"/var/spool/mail/$(whoami)": 2 messages 2 new
>N   1 root@localhost.local  Wed Dec 6 10:30   15/513   "System Update"
 N   2 admin@yourdomain.com  Wed Dec 6 11:05  120/4502  "Urgent: Check Server"

列表符号说明:

  • >: 表示当前选中的邮件。
  • N: 表示新邮件。
  • n: 表示已读邮件。

常用操作:

  • 输入邮件的数字,然后按回车,可以阅读该邮件。
  • 在阅读邮件时,输入 h 可以返回邮件列表。
  • 输入 q 可以退出 mail 客户端。

与 Postfix 相关的常见问题排查

当你使用 mail 命令发送邮件失败时,通常问题出在 Postfix 的配置上,以下是一些排查步骤:

  1. 检查 Postfix 服务状态 确保服务正在运行。

    sudo systemctl status postfix
  2. 查看邮件日志 Postfix 的所有活动都会被记录在日志中,这是排查问题的首要步骤。

    # 实时查看日志
    sudo tail -f /var/log/mail.log
    # 或者查看系统日志
    sudo tail -f /var/log/syslog | grep postfix

    常见的错误信息有:

    • Relay access denied: 表示 Postfix 拒绝转发邮件,这通常是由于 main.cf 中的 mynetworkssmtpd_relay 配置问题,或者你尝试从不受信任的网络发送邮件。
    • Recipient address rejected: 表示收件人地址不存在或格式错误。
    • connect to Milter service unix:/var/spool/postfix/spamass/spamass.sock: No such file or directory: 如果你集成了 SpamAssassin 等过滤器,可能是服务未启动或配置路径错误。
  3. 检查 DNS 记录 对于外发邮件,确保你的域名有正确的 A 记录MX 记录,其他服务器需要通过这些记录找到你的邮件服务器。

  4. 测试本地发送 先尝试发送邮件到本地用户,以排除网络和外部域名解析问题。

    mail your_local_username
  5. 使用 telnet 手动测试 SMTP 这是最底层的测试方法,可以精确判断 Postfix 的 SMTP 服务是否正常工作。

    # 连接到本地的 SMTP 端口 25
    telnet localhost 25
    # 如果连接成功,会返回类似 "220 ESMTP Postfix" 的欢迎信息
    # 然后依次输入 SMTP 命令
    helo yourdomain.com
    mail from: <sender@example.com>
    rcpt to: <recipient@example.com>
    data
    Subject: Test from Telnet
    This is a test body.
    .  (注意:单独一行的 "." 表示邮件正文结束)
    quit

mail 命令是一个强大而简洁的工具,非常适合在服务器上进行自动化邮件发送,在 Postfix 环境下,它作为前端与 MTA 交互,其核心在于正确使用 -s-a 等参数来构建邮件,并学会利用日志来排查 Postfix 可能出现的配置问题。

分享:
扫描分享到社交APP
上一篇
下一篇