Входящее письмо приводит к сбое при заголовке Authentication-Results (authserv-id; none) с RFC 8601 «нет результата»

Когда email_in_authserv_id установлен, а входящее письмо содержит заголовок Authentication-Results с совпадающим идентификатором, но без результата (Authentication-Results: ``mx.example.com``; none, форма «без результата» из RFC 8601 §2.2), создание поста завершается ошибкой:

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

Пост теряется, и отправитель не получает письмо-отказ.

Причина: в parse_header срабатывает ветка no_result в authres_payload, поэтому resinfo_val становится nil, а parsed_resinfo не присваивается. В результате получается { authserv_id: "``mx.example.com``", resinfo: nil }, и затем calc_dmarc вызывает result[:resinfo].each.

Когда это происходит: некоторые MTA добавляют форму «без результата», если проверки не выполнялись. Например, rspamd делает это для неподтверждённой почты из своих local_addrs, в частности для почты, ретранслируемой из внутренней сети. Ошибка проявляется только при создании поста (Email::Receiver#create_post → auth_res_action). Письма, которые отклоняются на более раннем этапе, например от неизвестных отправителей, до этого кода не доходят.

Воспроизведение (консоль Rails):

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

Предлагаемое исправление: в calc_dmarc использовать Array(result[:resinfo]).each do |resinfo| или установить parsed_resinfo = [] в parse_header. В этом случае заголовок без результата будет считаться «серым», что соответствует его смыслу.

Ошибка обнаружена в ESR v2026.7.3, и та же строка кода всё ещё присутствует в ветке main.