Когда 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.