You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Postfix未对所有邮件添加DKIM-Signature问题求助

解决Postfix仅CLI发件带DKIM签名,客户端发件无签名的问题

我之前也碰到过一模一样的情况,折腾了好一阵才找到问题根源,给你梳理下排查和解决的关键步骤:

1. 确认Postfix的Milter配置覆盖客户端用的提交端口

Thunderbird这类客户端一般用**submission端口(587)**发邮件,很多人会把OpenDKIM的milter配置只加在Postfix主配置里,却忘了让submission服务也继承这个设置。

  • 打开/etc/postfix/main.cf,确保有这几行配置:

    smtpd_milters = inet:127.0.0.1:8891
    non_smtpd_milters = inet:127.0.0.1:8891
    milter_default_action = accept
    

    这里non_smtpd_milters负责处理sendmail这类本地CLI发的邮件,而smtpd_milters管SMTP端口的流量,两者都要指向OpenDKIM的监听地址(如果你的OpenDKIM用unix socket,就改成unix:/var/run/opendkim/opendkim.sock)。

  • 接着编辑/etc/postfix/master.cf,找到submission的配置块,务必加上-o smtpd_milters=$smtpd_milters这行,确保该端口使用主配置里的milter规则:

    submission inet n       -       y       -       -       smtpd
      -o syslog_name=postfix/submission
      -o smtpd_tls_security_level=encrypt
      -o smtpd_sasl_auth_enable=yes
      -o smtpd_reject_unlisted_recipient=no
      -o smtpd_client_restrictions=$mua_client_restrictions
      -o smtpd_helo_restrictions=$mua_helo_restrictions
      -o smtpd_sender_restrictions=$mua_sender_restrictions
      -o smtpd_recipient_restrictions=
      -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
      -o milter_macro_daemon_name=ORIGINATING
      # 关键:让submission端口继承主配置的milter设置
      -o smtpd_milters=$smtpd_milters
    

2. 验证OpenDKIM的签名规则包含你的发件域名

有时候是OpenDKIM没匹配到客户端发件人的域名,导致不签名:

  • 打开/etc/opendkim.conf,确认Domain、KeyTable、SigningTable配置正确:
    Domain          example.com  # 或者用*匹配所有已配置的域名
    KeyTable        refile:/etc/opendkim/KeyTable
    SigningTable    refile:/etc/opendkim/SigningTable
    
  • 检查/etc/opendkim/SigningTable,确保有覆盖你发件人的规则,比如:
    *@example.com    default._domainkey.example.com
    
  • 对应/etc/opendkim/KeyTable里的密钥映射要正确:
    default._domainkey.example.com    example.com:default:/etc/opendkim/keys/example.com/default.private
    

3. 检查Postfix的可信来源配置

确保客户端发送的邮件被Postfix识别为可信来源,这样OpenDKIM才会触发签名:

在/etc/postfix/main.cf里确认mynetworks包含本地回环地址:

mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128

如果是远程客户端,还要确保SASL认证已经正常启用,Postfix允许认证后的用户发件。

4. 重启服务并测试

修改完配置后,重启Postfix和OpenDKIM:

sudo systemctl restart postfix
sudo systemctl restart opendkim

然后用Thunderbird发测试邮件到check-auth@verifier.port25.com,查看返回的校验报告,确认DKIM是否显示pass。

额外排查技巧

如果还是不行,去看Postfix的日志/var/log/mail.log,搜索dkim关键词,比如有没有DKIM-Signature added的成功日志,或者DKIM: skipping signing for ...这类提示,能直接帮你定位问题。

内容的提问来源于stack exchange,提问作者MdeMoUcH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:41:57