邮件接收器在某些邮件源上不起作用

我很难让 mail-receiver 容器可靠地工作。目前,它在我从个人 GMail 帐户发送的回复时按预期工作,但它会拒绝从我的雇主 Office 365 网页应用程序发送的电子邮件。我无法确定这是我这边的配置问题,还是我的雇主路由电子邮件的方式有些奇怪。

我刚开始查看 ./launcher logs mail-receiver 的输出,我认为这个摘录展示了失败传递期间事件的典型顺序:

Jan 27 17:19:13 myvps-mail-receiver postfix/spawn[363]: warning: command /usr/bin/policyd-spf exit status 120
Jan 27 17:20:21 myvps-mail-receiver postfix/smtpd[356]: warning: problem talking to server private/policyd-spf: Connection timed out
Jan 27 17:20:21 myvps-mail-receiver postfix/smtpd[356]: NOQUEUE: reject: RCPT from mail-server.employer.tld[XX.XXX.XX.XX]: 451 4.3.5 <4eb16fb194e4f56c53b738dd8b3f3411@reply.my_domain.tld>: Recipient address rejected: Server configuration problem; from=<me@employer.tld> to=<4eb16fb194e4f56c53b738dd8b3f3411@reply.my_domain.tld> proto=ESMTP helo=<mail-server.employer.tld>
Jan 27 17:20:21 myvps-mail-receiver postfix/smtpd[356]: using backwards-compatible default setting smtpd_relay_before_recipient_restrictions=no to reject recipient "4eb16fb194e4f56c53b738dd8b3f3411@reply.my_domain.tld" from client "mail-server.employer.tld[XX.XXX.XX.XX]"
Jan 27 17:20:21 myvps-mail-receiver postfix/smtpd[356]: disconnect from mail-server.employer.tld[XX.XXX.XX.XX] ehlo=1 mail=1 rcpt=0/1 data=0/1 rset=1 quit=1 commands=4/6

<22>Jan 27 17:20:56 policyd-spf[367]: : prepend Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=XX.XXX.XX.XX; helo=mail-server.employer.tld; envelope-from=me@employer.tld; receiver=reply.my_domain.tld <22>Jan 27 17:20:56 policyd-spf[367]: Traceback (most recent call last):
Jan 27 17:20:56 myvps-mail-receiver postfix/spawn[366]: warning: command /usr/bin/policyd-spf exit status 120

根据第一、第二和最后一行,似乎 spf 策略守护进程不起作用。我找不到任何诊断信息来说明它为什么不起作用。我也不确定它是否必要。来自 GMail 的电子邮件似乎可以正常通过。

我正在使用 Cloudflare DNS 和 Brevo 的事务性电子邮件在 VPS 上进行自托管。

1 个赞

我也注意到很长一段时间以来,来自 Microsoft 365 源的不可预测的退信相当多,这非常令人恼火,因为有这么多公司使用它。到目前为止,我还没有成功地追查到源头的问题。

也许正如您所建议的,mail-receiver 存在问题;如果能对此进行调查,我将不胜感激!

1 个赞

我不确定是我的配置、我雇主的配置还是邮件接收应用程序出了问题 :person_shrugging:。我非常希望能得到任何关于如何从容器中获取更多信息的建议。

1 个赞

有人能告诉我如何访问来自 mail-receiver 容器的原始系统日志吗?我觉得在这行之后应该有一个 traceback:

<22>Jan 27 17:20:56 policyd-spf[367]: : prepend Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=XX.XXX.XX.XX; helo=mail-server.employer.tld; envelope-from=me@employer.tld; receiver=reply.my_domain.tld <22>Jan 27 17:20:56 policyd-spf[367]: Traceback (most recent call last):

它被删除了吗?也许是我弄错了。

This 看起来相关,但我恐怕不明白如何在实践中使用它。

这是将这些日志行全部粘贴到 ask.Discourse.com 后的响应……

Postfix 和 Policyd-SPF 问题故障排除 AI

denvergeeks:

此错误指示什么:
1 月 27 日 17:19:13 myvps-mail-receiver postfix/spawn[363]: warning: command /usr/bin/policyd-spf exit status 120
1 月 27 日 17:20:21 myvps-mail-receiver postfix/smtpd[356]: warning: problem talking to server private/policyd-spf: Connection timed out
1 月 27 日 17:20:21 myvps-mail-receiver postfix/smtpd[356]: NOQUEUE: reject: RCPT from mail-server.employer.tld[XX.XXX.XX.XX]: 451 4.3.5 <4eb16fb194e4f56c53b738dd8b3f3411@reply.my_domain.tld>: Recipient address rejected: Server configuration problem; from=me@employer.tld to=<4eb16fb194e4f56c53b738dd8b3f3411@reply.my_domain.tld> proto=ESMTP helo=<mail-server.employer.tld>
1 月 27 日 17:20:21 myvps-mail-receiver postfix/smtpd[356]: using backwards-compatible default setting smtpd_relay_before_recipient_restrictions=no to reject recipient “4eb16fb194e4f56c53b738dd8b3f3411@reply.my_domain.tld” from client “mail-server.employer.tld[XX.XXX.XX.XX]”
1 月 27 日 17:20:21 myvps-mail-receiver postfix/smtpd[356]: disconnect from mail-server.employer.tld[XX.XXX.XX.XX] ehlo=1 mail=1 rcpt=0/1 data=0/1 rset=1 quit=1 commands=4/6

1 月 27 日 17:20:56 policyd-spf[367]: : prepend Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=XX.XXX.XX.XX; helo=mail-server.employer.tld; envelope-from=me@employer.tld; receiver=reply.my_domain.tld
1 月 27 日 17:20:56 policyd-spf[367]: Traceback (most recent call last):
1 月 27 日 17:20:56 myvps-mail-receiver postfix/spawn[366]: warning: command /usr/bin/policyd-spf exit status 120

DiscourseHelper:

搜索

搜索内容:postfix policyd-spf exit status 120 server configuration problem connection timed out reason and solution

您的错误日志似乎表明 postfixpolicyd-spf 存在问题。具体来说:

  1. policyd-spf 的退出状态 120:

    • 这通常指向 policyd-spf 配置或权限存在问题。Policyd-SPF 用于根据发件人策略框架 (SPF) 验证传入电子邮件。退出状态 120 通常表示应用程序错误或无法处理 SPF 验证要求。
  2. 连接到 private/policyd-spf 超时:

    • postfix 无法与 policyd-spf 服务通信时会发生这种情况,可能原因如下:
      • 通信套接字的路径或配置无效。
      • policyd-spfspawn 进程未正确设置或未能初始化。
  3. RCPT 拒绝状态 451:

    • 收件人电子邮件地址因“服务器配置问题”而被拒绝。这表明由于 SPF 验证失败,postfix 无法接受收件人。

解决步骤:

  1. 检查 policyd-spf 配置:

    • 确保 /etc/postfix/main.cf(或等效文件)中的 SPF 相关配置指向正确的策略服务:
      policy-spf unix - n n - - spawn
        user=nobody argv=/usr/bin/policyd-spf
      
    • 如果 argv 命令路径 (/usr/bin/policyd-spf) 不正确,请进行调整。
  2. 服务和日志:

    • 重启 policyd-spf 服务:
      systemctl restart policyd-spf
      
    • 查看 policyd-spf 的更多日志以查明具体问题:
      journalctl -u policyd-spf
      
  3. Postfix 配置:

    • 确保 postfix 正确使用 policyd-spf。在 /etc/postfix/master.cf 中,验证:
      smtp      inet  n       -       n       -       -       smtpd
      -o smtpd_recipient_restrictions=permit_mynetworks,reject_unauth_destination,check_policy_service=unix:private/policyd-spf
      
    • 检查 /etc/postfix 和套接字路径的文件权限。
  4. 测试 SPF:

    • 尝试使用外部工具或通过 CLI(dig 命令)手动验证 SPF 记录:
      dig +short txt yourdomain.com
      
    • 确保您的电子邮件 SPF 记录正确。
  5. 套接字通信:

    • 验证 private/policyd-spf 套接字是否存在且可访问:
      ls /var/spool/postfix/private/policyd-spf
      # 如果文件存在,请调整权限:
      chown postfix:postfix /var/spool/postfix/private/policyd-spf
      chmod 770 /var/spool/postfix/private/policyd-spf
      
    • 如果 Unix 套接字文件丢失,请重新链接或重新创建。
  6. 配置错误:

    • 检查 /etc/policyd-spf/policyd-spf.conf 中的默认参数,并根据您的使用情况确认其正确性。
  7. 重启所有相关服务:

    systemctl restart postfix
    systemctl restart policyd-spf
    

如果您在进行配置更改后仍遇到问题,请联系您的托管提供商或 Discourse 支持,以确保服务器健康和正确的连接设置。您还可以查阅外部 SPF 问题文档或 postfix/policyd 社区论坛以获取更多信息。

这是 Perplexity.ai 的响应链接……

https://www.perplexity.ai/search/what-this-error-indicates-jan-fWurGemCTTezCPLfLNNSMg

我已经根据这些回复尽力而为了,但似乎没有什么能解决这个问题。我认为最有帮助的是有人能告诉我如何将 policyd-spf 的 Python 跟踪信息内容放入日志文件中。有什么建议吗?这只是一个虚假线索吗?