E-mail recebido causa erro com cabeçalho Authentication-Results de RFC 8601 "no result" (authserv-id; none)

Quando email_in_authserv_id está definido e um e-mail recebido contém um cabeçalho Authentication-Results correspondente sem resultado (Authentication-Results: ``mx.example.com``; none, o formato “no-result” da RFC 8601 §2.2), a criação da publicação falha com:

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

A publicação é perdida e o remetente não recebe nenhum e-mail de rejeição.

Por quê: em parse_header, o ramo no_result de authres_payload corresponde, portanto resinfo_val é nil e parsed_resinfo nunca é atribuído. O resultado é { authserv_id: "``mx.example.com``", resinfo: nil }, e calc_dmarc então chama result[:resinfo].each.

Quando acontece: alguns MTAs adicionam o formato no-result quando não executaram nenhuma verificação. O rspamd faz isso, por exemplo, para e-mails não autenticados de seus local_addrs, como e-mails retransmitidos de dentro da rede. A falha só aparece quando uma publicação é criada (Email::Receiver#create_post → auth_res_action). E-mails rejeitados anteriormente, por exemplo de um desconhecido, nunca chegam até lá.

Reproduzir (console rails):

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

Correção sugerida: em calc_dmarc, usar Array(result[:resinfo]).each do |resinfo|, ou definir parsed_resinfo = [] em parse_header. Um cabeçalho no-result então conta como cinza, o que corresponde ao seu significado.

Observado na ESR v2026.7.3, e a mesma linha ainda está no main.