Smtp

轉換 XX@company.com 的 SPF SOFTFAIL 域未將 XXXX 指定為允許的發件人)

  • December 30, 2020

在我的公司我有以下錯誤。

softfail (google.com: domain of transitioning someone@company.com does not designate X.X.X.X as permitted sender) client-ip=X.X.X.X;

假設我的 mail.company.com 伺服器是 YYYY,每個使用者都從 Thunderbird 連接到他/她的郵件帳戶,SMTP/POP3/IMAP 由託管在 YYYY 域上的 DirectAdmin 提供服務。一些使用 GMail 從外部 POP3 伺服器 (mail.company.com) 下載郵件的使用者收到上述錯誤,並且電子郵件在垃圾郵件目錄中。我的 SPF 記錄是:

v=spf1 a mx ip4:Y.Y.Y.Y ~all

我不明白的是,標記為指定IP的IP怎麼可能是XXXX,有時會有所不同,但仍然不是SMTP伺服器的IP YYYY?我將 SPF 記錄更改為:

v=spf1 mx a ptr ~all

但我不認為這是最好的解決方案。我的域儲存在 cloudflare 後面,但 mail.company.com 沒有被代理,只有 company.com 被代理。感謝您的任何幫助。

我通過在 exim config (/etc/exim.conf) 中設置自定義接收頭解決了這個問題。在上面的文件中,我添加了:

received_header_text = ${if def:authenticated_id {Received: from $primary_hostname ([X.X.X.X] helo=[s1.example.com]) by $primary_hostname with ESMTP\n\t(Exim $version_number)\n\t${if def:sender_address {(envelope-from <$sender_address>)\n\t}}id $message_exim_id${if def:received_for {\n\tfor $received_for}}\n\t}}Received: ${if def:sender_rcvhost {from $sender_rcvhost\n\t}{${if def:sender_ident {from ${quote_local_part:$sender_ident} }}${if def:sender_helo_name {(helo=$sender_helo_name)\n\t}}}}by $primary_hostname ${if def:received_protocol {with $received_protocol}} ${if def:tls_cipher {($tls_cipher)\n\t}}(Exim $version_number)\n\t${if def:sender_address {(envelope-from <$sender_address>)\n\t}}id $message_exim_id${if def:received_for {\n\tfor $received_for}}

其中 XXXX 是郵件伺服器 IP,s1.example.com 是郵件伺服器主機名或 IP 地址。我把它放在後面:

#EDIT#1:
# primary_hostname =
smtp_active_hostname = ${if exists{/etc/virtual/helo_data}{${lookup{$interface_address}iplsearch{/etc/virtual/helo_data}{$value}{$primary_hostname}}}{$primary_hostname}}

之後我重新啟動了 exim:

service exim restart

現在Google沒有因為 SPF SOFTFAIL 而未能通過垃圾郵件檢查。

引用自:https://serverfault.com/questions/1043431