本文档整理了 Linux 系统下 mailutils 工具集的安装、基础使用、126 邮箱专属配置,以及邮件发送失败的排查与解决方案,适用于需要通过命令行 / 脚本发送邮件的场景(如系统监控、服务告警)。
mailutils 是一个功能强大的邮件处理工具集,在 Linux 系统中广泛使用。
📦 安装 mailutils
Ubuntu/Debian 系统
sudo apt-get update
sudo apt-get install mailutils
CentOS/RHEL 系统
sudo yum install mailx
Fedora 系统
sudo dnf install mailx
🔧 基本配置
安装后,mailutils 通常需要配置 SMTP 服务器才能发送邮件。
配置文件位置
编辑 /etc/mail.rc
或 ~/.mailrc
文件:
# 使用外部 SMTP 服务器(以 Gmail 为例)
set smtp=smtp://smtp.gmail.com:587
set smtp-use-starttls
set smtp-auth=login
set smtp-auth-user=your-email@gmail.com
set smtp-auth-password=your-password
set from="your-email@gmail.com(Your Name)"
案例:
配置 mailutils 以使用 126 邮箱发送邮件。
📧 配置 mailutils 使用 126 邮箱
1. 编辑配置文件
创建或编辑 ~/.mailrc
文件:
vim ~/.mailrc
2. 添加以下配置内容
# 126 邮箱 SMTP 配置
set smtp=smtps://smtp.126.com:465
set smtp-auth=login
set smtp-auth-user=admin@126.com
set smtp-auth-password=JCCCRRooT76UdxLE
set from="admin@126.com(VTransLink Service)"
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb
注意:由于您使用的是端口 465(SSL/TLS),需要使用 smtps://
协议。
3. 设置文件权限
chmod 600 ~/.mailrc
这样可以保护您的密码不被其他用户读取。
🔧 正确配置 Postfix 使用 126 邮箱(端口 465)
1. 编辑 Postfix 主配置文件
sudo vim /etc/postfix/main.cf
2. 添加/修改以下配置(完整配置)
# 基本配置
myhostname = localhost.localdomain
mydomain = localdomain
myorigin = $mydomain
# 使用 126 邮箱作为 SMTP 中继 - 端口 465
relayhost = [smtp.126.com]:465
# SMTP 认证
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_mechanism_filter = login
# SSL/TLS 配置 - 端口 465 使用 wrappermode
smtp_use_tls = yes
smtp_tls_wrappermode = yes
smtp_tls_security_level = encrypt
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
smtp_tls_loglevel = 1
# 禁用 IPv6(根据日志,IPv6 连接失败)
inet_protocols = ipv4
# 重写 envelope sender
sender_canonical_maps = hash:/etc/postfix/sender_canonical
sender_canonical_classes = envelope_sender
# 重写 header sender
smtp_header_checks = regexp:/etc/postfix/smtp_header_checks
# 重写所有本地用户的发件地址
smtp_generic_maps = hash:/etc/postfix/generic
3. 创建 SMTP 认证文件
sudo vim /etc/postfix/sasl_passwd
添加内容(使用您的配置):
[smtp.126.com]:465 admin@126.com:JCCCRRooT76UdxLE
4. 创建发件人地址重写文件
sudo vim /etc/postfix/sender_canonical
添加内容:
# 将所有本地发件人重写为 126 邮箱
## 记得将 VM-4-16-ubuntu 改为自己的hostName
ubuntu@VM-4-16-ubuntu admin@126.com
ubuntu@VM-4-16-ubuntu.localdomain admin@126.com
root@VM-4-16-ubuntu admin@126.com
root@VM-4-16-ubuntu.localdomain admin@126.com
@VM-4-16-ubuntu admin@126.com
@VM-4-16-ubuntu.localdomain admin@126.com
ubuntu admin@126.com
root admin@126.com
5. 创建通用地址映射文件
sudo vim /etc/postfix/generic
添加内容:
ubuntu@VM-4-16-ubuntu admin@126.com
ubuntu@VM-4-16-ubuntu.localdomain admin@126.com
root@VM-4-16-ubuntu admin@126.com
root@VM-4-16-ubuntu.localdomain admin@126.com
ubuntu admin@126.com
root admin@126.com
6. 创建 smtp_header_checks 文件(重写邮件头)
sudo vim /etc/postfix/smtp_header_checks
内容:
# 重写 From 头
/^From:.*@VM-4-16-ubuntu/ REPLACE From: VTransLink Service <admin@126.com>
/^From:.*ubuntu.*/ REPLACE From: VTransLink Service <admin@126.com>
/^From:.*root.*/ REPLACE From: VTransLink Service <admin@126.com>
7. 生成数据库文件
# 生成认证密码数据库
sudo postmap /etc/postfix/sasl_passwd
# 生成发件人映射数据库
sudo postmap /etc/postfix/sender_canonical
# 生成通用映射数据库
sudo postmap /etc/postfix/generic
# 设置权限
sudo chmod 600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
sudo chmod 644 /etc/postfix/sender_canonical /etc/postfix/sender_canonical.db
sudo chmod 644 /etc/postfix/generic /etc/postfix/generic.db
sudo chmod 644 /etc/postfix/smtp_header_checks
# 检查配置
sudo postfix check
# 清空队列
sudo postsuper -d ALL
# 重启 Postfix
sudo systemctl restart postfix
### 测试 :发送测试邮件
```bash
echo "这是使用 126 邮箱(端口 465)发送的测试邮件,时间: $(date)" | \
mail -s "VTransLink 测试邮件" 888888888@qq.com
📧 使用示例
1. 发送简单邮件
echo "邮件正文内容" | mail -s "邮件主题" recipient@example.com
2. 发送带附件的邮件
echo "邮件正文" | mail -s "邮件主题" -A /path/to/file.txt recipient@example.com
3. 发送多个附件
mail -s "邮件主题" -A file1.txt -A file2.pdf recipient@example.com < message.txt
4. 发送 HTML 邮件
mail -s "邮件主题" -a "Content-Type: text/html" recipient@example.com < email.html
5. 发送给多个收件人
echo "邮件内容" | mail -s "主题" user1@example.com,user2@example.com
6. 从文件读取邮件内容
mail -s "邮件主题" recipient@example.com < email_body.txt
🔍 查看邮件
# 查看收件箱
mail
# 常用命令
# h - 显示邮件列表
# r - 回复邮件
# d - 删除邮件
# q - 退出
⚙️ 高级选项
设置发件人
mail -s "主题" -r "sender@example.com" recipient@example.com
添加抄送 (CC) 和密送 (BCC)
mail -s "主题" -c cc@example.com -b bcc@example.com recipient@example.com