Переменный путь возврата конверта ( VERP ) — это метод, используемый некоторыми программами для электронных списков рассылки , чтобы обеспечить автоматическое обнаружение и удаление недоставленных адресов электронной почты . Он работает, используя другой путь возврата (также называемый «отправитель конверта») для каждого получателя сообщения.
Любой долгоживущий список рассылки в конечном итоге содержит адреса, по которым невозможно связаться. Адреса, которые когда-то были действительными, могут стать непригодными, поскольку получатель почты перешел к другому провайдеру . В другом сценарии адрес может все еще существовать, но быть заброшенным, а непрочитанная почта накапливается до тех пор, пока не останется достаточно места для приема новых писем.
Когда сообщение отправляется в список рассылки, программное обеспечение списка рассылки пересылает его по всем адресам в списке. Наличие недействительных адресов в списке приводит к отправке сообщений о недоставке владельцу списка. Если список рассылки небольшой, владелец может прочитать сообщения о недоставке и вручную удалить недействительные адреса из списка. При большем списке рассылки это утомительная и неприятная работа, поэтому желательно автоматизировать процесс.
Однако большинство сообщений о недоставке исторически были разработаны для чтения людьми, а не для автоматической обработки программным обеспечением. Все они передают одну и ту же основную идею («сообщение от X к Y не может быть доставлено по причине Z»), но с таким количеством вариаций, что было бы практически невозможно написать программу для надежной интерпретации смысла каждого сообщения о недоставке. RFC 1894 (устаревший из-за RFC 3464) определяет стандартный формат для решения этой проблемы, но поддержка стандарта далека от универсальности. Однако существует несколько распространенных форматов (например, RFC 3464, qsbmf qmail и формат DSN для Exchange от Microsoft ), которые охватывают большую часть сообщений о недоставке.
Microsoft Exchange иногда может отклонять сообщение, не предоставляя никаких указаний на адрес, на который было отправлено исходное сообщение. Когда Exchange знает предполагаемого получателя, но не желает принимать для него электронную почту, он пропускает его адрес. Если сообщение отправлено joe@example.com
и сервер знает, что это "Joe User", он отклоняет сообщение, сообщая, что сообщение "Joe User" не может быть доставлено, полностью опуская joe@example.com
адрес. VERP — единственный жизнеспособный способ правильно обрабатывать такие отказы.
Самая сложная часть обработки отказов — это сопоставление сообщения об отказе с недоставленным адресом, который вызвал отказ. Если программное обеспечение списка рассылки видит, что отказ произошел из-за попытки отправить сообщение на user@example.com , то ему не нужно понимать остальную информацию в отказе. Оно может просто подсчитать, сколько сообщений было недавно отправлено на user@example.com , и сколько отказов произошло; и если доля отклоненных сообщений слишком высока, адрес удаляется из списка.
Хотя форматы сообщений о недоставке в целом сильно различаются, есть один аспект сообщения о недоставке, который весьма предсказуем: адрес, на который оно будет отправлено . VERP в полной мере использует это преимущество. В списке рассылки, использующем VERP, для каждого получателя используется свой адрес отправителя.
Менеджер списка рассылки знает, что он отправил сообщение с X на Y, поэтому если сообщение о недоставке получено на адрес X, это может быть только потому, что адрес Y не был доставлен, поскольку ничего не было отправлено с X на какой-либо другой адрес. Таким образом, важная информация была извлечена из сообщения о недоставке, без необходимости понимать его содержимое, что означает, что ответственному за список не нужно иметь с ним дело вручную.
Первым серьезным сторонником этого решения и создателем термина VERP для его описания был Дэниел Дж. Бернстайн , который впервые реализовал эту идею на практике в своем менеджере MTA qmail и списке рассылки ezmlm . [1]
Предположим, что есть список рассылки под названием wikipedians@example.net
и что человек bob@example.org
подписался на него, но позже Боб покинул example.org, поэтому его адрес больше недействителен. Рассмотрим, что происходит, когда кто-то отправляет сообщение в список.
Без VERP менеджер списка рассылки может отправить сообщение со следующими характеристиками:
wikipedians-owner@example.net
bob@example.org
Это приведет к отказу, сгенерированному MTA example.net или example.org, со следующими характеристиками:
wikipedians-owner@example.net
Менеджер списка рассылки не может понять содержание этого сообщения о недоставке и не может сделать никаких выводов из адреса получателя, поскольку сообщения с адреса . были отправлены сотням других людей, помимо Боба wikipedians-owner@example.net
.
С VERP исходное сообщение будет другим:
wikipedians-owner+bob=example.org@example.net
bob@example.org
Тогда отскок будет более полезным:
wikipedians-owner+bob=example.org@example.net
Из этого сообщения об ошибке менеджер списка рассылки может сделать вывод, что сообщение, bob@example.org
должно быть, не было доставлено.
В этом примере показан простейший возможный метод сопоставления VERP с подписчиком списка: весь адрес получателя включается в обратный путь, при этом знак at заменяется знаком равенства, поскольку обратный путь с двумя знаками at был бы недействительным. Возможны и другие схемы кодирования.
Использование VERP требует, чтобы каждое сообщение было отправлено один раз каждому получателю, а не один раз каждому принимающему SMTP- серверу. Это связано с ограничением SMTP, которое позволяет указывать несколько адресов получателей в одной транзакции, но только один адрес отправителя. Когда в одном домене много подписчиков , список рассылки, не использующий VERP, может объединить несколько доставок в одну транзакцию. Он подключается к соответствующему серверу для домена, дает один адрес отправителя, адреса получателей, а затем отправляет содержимое сообщения только один раз.
С другой стороны, список рассылки, использующий VERP, должен отправлять все тело сообщения повторно, что приводит к общему увеличению использования полосы пропускания . Эта неэффективность обычно не считается большой проблемой, особенно пользователями qmail , поскольку qmail всегда отправляет сообщения один раз на получателя, даже когда VERP не используется. Некоторые пакеты смягчают влияние VERP, применяя его выборочно, например, менеджер списка рассылки может использовать VERP только для 1 из 10 рассылок. Таким образом, вы можете получить большую часть жесткого контроля отказов VERP и точной обратной связи без необходимости каждый раз нести накладные расходы на обработку и сеть.
Другая проблема с VERP (и с любой автоматической схемой обработки отказов) заключается в том, что в Интернете есть MTA , которые не следуют основным стандартам SMTP. VERP зависит от MTA получателей, которые следуют правилу, согласно которому отказы отправляются отправителю конверта . Это было стандартным требованием с момента появления SMTP в 1982 году (см. RFC 821), но все еще есть MTA, которые ошибаются, обычно возвращая сообщение на адрес в From:
заголовке .
Системы, реализующие грейлистинг, отлично работают с VERP, если отправитель конверта следует вышеупомянутому формату. Однако некоторые реализации VERP используют номер сообщения или случайный ключ как часть VERP, что приводит к задержке каждой публикации в списке рассылки, если только система грейлистинга не считает «похожие» адреса отправителя эквивалентными.