Код ответа SMTP для дублированного значения идентификатора сообщения
Какой код ответа SMTP сервер должен отправить, чтобы сообщить, что Message-ID поле дублирует одно уже виденное?
RFC 5322, §3.6.4 "Поля идентификации" гласит:
Поле "Message-ID:" предоставляет уникальный идентификатор сообщения, который ссылается на конкретную версию конкретного сообщения. Уникальность идентификатора сообщения гарантируется хостом, который его генерирует […].
Таким образом, нарушение этой директивы для сообщения объявляет значение Message-ID, которое уже было замечено в сообщении с другим содержанием. Это означает, что SMTP-сервер может отклонить сообщение на этой основе.
Примечание: цель не в том, чтобы запомнить каждое значение, которое когда-либо видели; это было бы обременительно для дизайна и дорого в эксплуатации. Скорее, цель состоит в том, чтобы использовать те значения, которые мы записали, чтобы обнаружить некоторую долю входящих запросов, которые нарушают вышеуказанную директиву, и отклонить их на ранней основе на этой основе.
Набор кодов, описанный в п. 4.2.2 RFC 5321 "SMTP-ответы", описывает некоторые условия, когда поля являются причиной отклонения (например, "почтовый ящик не разрешен", код ответа 553).
Каким должен быть код ответа для условия "Значение ID сообщения уже видели"?
1 ответ
Агент MTA не может и не должен отклонять почту для доставки на основе своего Message-ID.
Для этого MTA должен знать (и запоминать) все общесистемные используемые Message-ID, что, очевидно, является запретительным как в отношении требований к процессору, памяти и дискам.
Короче говоря, адаптер MTA должен принимать письма с дублирующим идентификатором сообщения, оставляя (необязательно) последующую работу по устранению дублирования для последующей обработки (например, сервером IMAP или почтовым клиентом).