温馨提示×

如何诊断debian邮件故障

小樊
41
2026-09-05 17:19:22
栏目: 智能运维

在 Debian 上排查邮件故障,通常要分 发送链路接收链路,以及 本地 / 远程 来看。下面是一套比较系统、可操作的诊断思路。


一、先确认你用的是什么邮件系统

Debian 常见组合:

  • MTA(邮件传输代理)
    • Postfix(最常见)
    • Exim(Debian 旧默认)
    • Sendmail(较少)
  • ** MDA / 本地投递**
    • procmail / dovecot / maildrop
  • IMAP/POP3 服务
    • Dovecot
  • 认证
    • Cyrus SASL / Dovecot auth

查看 MTA:

ps aux | grep -E 'postfix|exim|sendmail'

或:

dpkg -l | grep -E 'postfix|exim|sendmail'

二、基础网络与端口检查

1. 检查端口监听

ss -tulnp

常见端口:

  • 25(SMTP)
  • 465(SMTPS)
  • 587( submission)
  • 110 / 995(POP3)
  • 143 / 993(IMAP)

例如:

ss -tulnp | grep ':25'

2. 测试外网连通

telnet smtp.gmail.com 587

或:

nc -vz mail.example.com 25

三、Postfix 常见故障诊断(最常见)

1. 查看服务状态

systemctl status postfix
journalctl -u postfix -n 50

2. 发送测试邮件

echo "test" | mail -s "test" user@example.com

或:

sendmail -v user@example.com < /dev/null

3. 查看邮件队列

postqueue -p

强制重发:

postqueue -f

4. 查看邮件日志(最关键)

tail -f /var/log/mail.log

或:

journalctl -u postfix -f

常见错误:

  • connection timed out → 网络/防火墙
  • relay access denied → 认证/转发配置
  • mail loops back → DNS/MX 配置错误
  • certificate verify failed → TLS 证书问题

四、DNS 与 MX 检查(发不出去/收不到)

dig MX example.com
dig A mail.example.com

检查:

  • MX 记录存在
  • A 记录正确
  • 反向解析(PTR)建议配置

测试:

host -t MX example.com

五、接收邮件故障(Dovecot)

1. 服务状态

systemctl status dovecot
journalctl -u dovecot -n 50

2. 测试 IMAP 登录

telnet localhost 143

或:

openssl s_client -connect localhost:993

3. 邮箱权限问题

检查:

ls -ld /var/mail /home/user/Maildir

Postfix + Dovecot 常见权限错误。


六、防火墙与 SELinux(Debian 一般无 SELinux)

iptables -L -n
ufw status

云服务器还需检查:

  • 安全组
  • 25 端口是否被封(很多云厂商默认封)

七、常见典型问题速查

现象 可能原因
能收不能发 未配置 relay / 认证
能发不能收 MX / Dovecot 问题
本地能发,外网不行 25 端口被封
退信 “relay denied” 未允许中继
TLS 报错 证书路径错误
邮件进 spam 无 SPF / DKIM / DMARC

八、SPF / DKIM / DMARC(邮件被拒或进垃圾)

dig TXT example.com
dig TXT default._domainkey.example.com

建议:

  • SPF
  • DKIM(opendkim)
  • DMARC

九、最小排错顺序建议

  1. systemctl status
  2. ss -tulnp
  3. /var/log/mail.log
  4. postqueue -p
  5. dig MX
  6. telnet/nc 测试端口

如果你愿意,可以告诉我:

  • 用的是 Postfix / Exim / 其他
  • 发不出 / 收不到 / 被退信
  • 报错日志片段

我可以直接帮你定位具体原因。

0