Eingehende E-Mail stürzt ab bei RFC-8601-„no result“-Authentication-Results-Header (authserv-id; none)

Wenn email_in_authserv_id gesetzt ist und eine eingehende E-Mail einen passenden Authentication-Results-Header ohne Ergebnis enthält (Authentication-Results: ``mx.example.com``; none, die „no-result“-Form gemäß RFC 8601 §2.2), schlägt das Erstellen des Beitrags mit folgendem Fehler fehl:

NoMethodError: undefined method 'each' for nil
lib/email/authentication_results.rb:45:in 'block in Email::AuthenticationResults#calc_dmarc'

Der Beitrag geht verloren, und der Absender erhält keine Ablehnungs-E-Mail.

Warum: In parse_header trifft der no_result-Zweig von authres_payload zu, sodass resinfo_val nil ist und parsed_resinfo nie zugewiesen wird. Das Ergebnis ist { authserv_id: "``mx.example.com``", resinfo: nil }, und calc_dmarc ruft dann result[:resinfo].each auf.

Wann es auftritt: Einige MTAs fügen die no-result-Form hinzu, wenn sie keine Prüfungen durchgeführt haben. rspamd tut dies beispielsweise für nicht authentifizierte Mails aus seinen local_addrs, etwa Mails, die innerhalb des Netzwerks weitergeleitet werden. Der Absturz zeigt sich nur, wenn ein Beitrag erstellt wird (Email::Receiver#create_post → auth_res_action). Mails, die früher abgelehnt werden, beispielsweise von einem Unbekannten, erreichen diesen Punkt nie.

Reproduzieren (Rails-Konsole):

SiteSetting.email_in_authserv_id = "mx.example.com"
Email::AuthenticationResults.new(["mx.example.com; none"]).verdict
# => NoMethodError: undefined method 'each' for nil

Vorgeschlagene Korrektur: In calc_dmarc Array(result[:resinfo]).each do |resinfo| verwenden oder in parse_header parsed_resinfo = [] setzen. Ein no-result-Header wird dann als „grau“ gewertet, was seinem Sinn entspricht.

Beobachtet in ESR v2026.7.3, und dieselbe Zeile ist weiterhin auf main vorhanden.