Введение

Переменный путь обратного адреса (VERP) — это техника, используемая некоторыми программами для работы с электронными списками рассылки, позволяющая автоматически выявлять и удалять недоставляемые адреса электронной почты. Она работает за счет использования различного обратного пути (также называемого "отправителем конверта") для каждого получателя сообщения.

Мотивация

В любом списке рассылки, существующем долгое время, неизбежно появляются недостижимые адреса. Адреса, которые когда-то были действительными, могут стать неработоспособными, например, если получатель сменил почтового провайдера. В другом случае адрес может существовать, но быть заброшенным, с накоплением непрочитанной почты, пока не закончится место для новых сообщений. Когда сообщение отправляется в список рассылки, программное обеспечение списка рассылки повторно отправляет его всем адресам в списке. Наличие недействительных адресов в списке приводит к отправке уведомлений о недоставке владельцу списка. Если список рассылки небольшой, владелец может просмотреть эти уведомления и вручную удалить недействительные адреса. Однако для больших списков рассылки это трудоемкая и неприятная задача, поэтому желательно автоматизировать этот процесс. Тем не менее, большинство уведомлений о недоставке исторически разрабатывались для чтения людьми, а не для автоматической обработки программным обеспечением. Все они передают одну и ту же основную идею ("сообщение от X к Y не может быть доставлено по причине Z"), но с таким количеством вариаций, что практически невозможно написать программу, которая надежно интерпретирует смысл каждого уведомления о недоставке. RFC 1894 (замененный RFC 3464) определяет стандартный формат для решения этой проблемы, но поддержка этого стандарта далеко не повсеместна. Однако существует несколько распространенных форматов (например, RFC 3464, qsbmf от qmail и формат DSN от Microsoft для Exchange), которые охватывают значительную часть уведомлений о недоставке. Microsoft Exchange иногда может возвращать сообщение, не указывая адрес, на который было отправлено исходное сообщение. Когда Exchange знает предполагаемого получателя, но не желает принимать для него электронную почту, он опускает его адрес. Например, если сообщение отправлено на joe@example.com, а сервер знает, что это "Joe User", он вернет уведомление о том, что сообщение для "Joe User" не может быть доставлено, полностью исключив адрес joe@example.com. VERP – единственный надежный способ правильно обрабатывать такие уведомления о недоставке.

Как VERP решает проблему обработки отскока

Трудная часть обработки отказов – сопоставление сообщения об отказе с недоставленным адресом, который и вызвал этот отказ. Если программное обеспечение списка рассылки может определить, что отказ произошел в результате попытки отправки сообщения на <адрес>, то ему не требуется анализировать остальную информацию в сообщении об отказе. Оно может просто подсчитать, сколько сообщений было недавно отправлено на <адрес>, и сколько отказов получено; и если доля отказов слишком высока, адрес удаляется из списка. Хотя форматы сообщений об отказах в целом сильно различаются, один аспект в них весьма предсказуем: адрес, на который будет отправлен отказ. VERP в полной мере использует это. В списке рассылки, использующем VERP, для каждого получателя используется уникальный адрес отправителя. Менеджер списка рассылки знает, что отправил сообщение от X к Y, поэтому, если сообщение об отказе получено на адрес X, это может быть только из-за недоступности адреса Y, поскольку с адреса X никуда больше ничего не отправлялось. Таким образом, важная информация извлечена из сообщения об отказе без необходимости его анализа, что означает, что ответственному за список не нужно обрабатывать его вручную.

Происхождение

Первым серьезным сторонником этого решения и автором термина VERP для его описания был Дэниел Дж. Бернштейн, который впервые реализовал эту идею на практике в своем почтовом агенте qmail MTA и менеджере списков рассылки ezmlm.

Пример

Предположим, существует список рассылки wikipedians@example.net, и пользователь bob@example.org подписался на него. Однако впоследствии Боб покинул example.org, и его адрес стал недействительным. Рассмотрим, что произойдет, когда кто-то отправит сообщение в этот список.

Недостатки

Использование VERP требует отправки каждого сообщения один раз для каждого получателя, а не один раз для каждого принимающего SMTP-сервера. Это связано с ограничением протокола SMTP, который позволяет указывать несколько адресов получателей в одной транзакции, но только один адрес отправителя. Когда в одном домене много подписчиков, список рассылки, не использующий VERP, может объединить несколько доставок в одну транзакцию. Он подключается к соответствующему серверу для домена, указывает адрес отправителя, адреса получателей и затем отправляет содержимое сообщения только один раз. Список рассылки, использующий VERP, напротив, должен отправлять всё сообщение многократно, что приводит к общему увеличению использования пропускной способности. Эта неэффективность обычно не считается серьезной проблемой, особенно для пользователей qmail, поскольку qmail всегда отправляет сообщения по одному на получателя, даже когда VERP не используется. Некоторые пакеты снижают влияние VERP, применяя его выборочно, например, менеджер списка рассылки может использовать VERP только в 1 из 10 рассылок. Таким образом, можно получить значительную часть строгого контроля над отскоками и точную обратную связь, не неся затрат на обработку и сетевые накладные расходы каждый раз. Другая проблема с VERP (и с любой автоматической схемой обработки отскоков) заключается в том, что в Интернете существуют MTA, которые не соблюдают базовые стандарты SMTP. VERP зависит от того, что MTA получателей соблюдают правило, согласно которому отскоки отправляются отправителю, указанному в поле "envelope sender". Это стандартное требование с момента появления SMTP в 1982 году (см. RFC 821), но всё ещё существуют MTA, которые работают некорректно, обычно отправляя отскоки на адрес, указанный в заголовке "From:". Системы, реализующие greylisting, хорошо работают с VERP, если адрес отправителя соответствует вышеуказанному формату. Однако некоторые реализации VERP используют номер сообщения или случайный ключ в качестве части VERP, что приводит к задержке каждой публикации в списке рассылки, если система greylisting не считает "похожие" адреса отправителя эквивалентными.