在 Ubuntu 邮件服务器中出现乱码,通常不是“系统问题”,而是编码不一致或邮件头/内容声明错误导致的。下面按常见原因 → 解决方案系统说明。
| 位置 | 可能原因 |
|---|---|
| 邮件标题乱码 | Subject 未编码(RFC 2047) |
| 邮件正文乱码 | Content-Type / charset 错误 |
| 日志中乱码 | 终端或日志编码问题 |
| Webmail 乱码 | 前端未指定 UTF-8 |
| 命令行发送乱码 | 本地 locale 不对 |
locale
如果不是 UTF-8,执行:
sudo apt install locales
sudo dpkg-reconfigure locales
选中:
en_US.UTF-8
或
zh_CN.UTF-8
设置后:
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
在 /etc/postfix/main.cf 中:
smtpd_mime_header_checks = regexp:/etc/postfix/header_checks
/etc/postfix/header_checks:
/^Subject:/ PREPEND Subject: =?UTF-8?B?...?=
更简单方式:发信程序自己编码 Subject
文本邮件:
From: user@domain.com
To: to@domain.com
Subject: =?UTF-8?B?5L2g5aW9?= ← Base64 编码
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
你好,这是中文邮件。
HTML 邮件:
Content-Type: text/html; charset=UTF-8
echo "中文内容" | mail -s "$(echo 测试主题 | base64)" to@domain.com
更稳妥:
echo "中文内容" | mailx -a "Content-Type: text/plain; charset=UTF-8" \
-s "=?UTF-8?B?$(echo 测试 | base64)?=" to@domain.com
#!/usr/bin/env python3
import smtplib
from email.mime.text import MIMEText
msg = MIMEText("中文内容", "plain", "utf-8")
msg["Subject"] = "测试邮件"
msg["From"] = "user@domain.com"
msg["To"] = "to@domain.com"
s = smtplib.SMTP("localhost")
s.send_message(msg)
s.quit()
✅ Python 自动处理编码,几乎不会乱码
mail_location = maildir:~/Maildir
charset = utf-8
确保客户端(Outlook / Thunderbird)也使用 UTF-8。
在配置中确认:
$config['default_charset'] = 'UTF-8';
sudo tail -f /var/log/mail.log | iconv -f UTF-8 -t UTF-8
或终端:
export LANG=en_US.UTF-8
Content-Type: ...; charset=UTF-8如果你愿意,可以告诉我:
我可以直接给你针对你环境的配置示例。