mailutils 安装配置与问题解决笔记(含 126 邮箱适配)

本文档整理了 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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容