Как заставить Sendmail добавлять заголовок получателя(ей) конверта ко всем входящим сообщениям электронной почты?

Как заставить Sendmail добавлять заголовок получателя(ей) конверта ко всем входящим сообщениям электронной почты?

Отказ от ответственности:Я прочитал некоторые вопросы и статьи здесь и в других местах, которые касаются перезаписи заголовков Sendmail. Я не нашел ответа на вопрос ниже, потому что другие вопросы в основном касаютсяпереписываниезаголовки (вместо их добавления), и почти все они относятся кисходящийсообщения и конвертотправитель(вместо получателя конверта).

Сказав это:

Я использую почтовый сервер Sendmail 8.14.4 под управлением Debian jessie.

Некоторые адреса получателей электронной почты сопоставлены с одной и той же учетной записью пользователя O/S. Когда соответствующий пользователь O/S читает сообщения, он не может определить, на какой адрес электронной почты изначально были отправлены сообщения.

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

Думаю, я мог бы лучше объяснить свою проблему на примере:

Предположим, у меня есть два адреса электронной почты, [email protected]и [email protected]. Оба сопоставлены с учетной записью пользователя ОС offers. Пока это работает: пользователь ОС offers, извлекая свою электронную почту, получает все сообщения, отправленные на [email protected]и [email protected].

Проблема теперь в том, что он не может определить, на какой адрес электронной почты изначально было отправлено каждое сообщение. Это означает: хотя он видит все сообщения, отправленные на оба адреса электронной почты, он не может сказать, было ли определенное сообщение изначально отправлено на [email protected]или на [email protected].

Поэтому я хотел бы добавить к каждому входящему сообщению собственный заголовок, возможно, что-то вроде этого: X-Envelope-Recipient: <Original envelope recipient>.

Как проще всего это сделать?

Когда-то давно я написал несколько простых пользовательских правил для Sendmail. Но с тех пор прошло почти 15 лет, поэтому я хотел бы избежать этого, и поэтому я надеюсь, что есть простое решение или что кто-то сможет указать мне правильное направление. Честно говоря, написание milter для решения моей проблемы сейчас кажется мне проще, чем повторное изучение синтаксиса правил Sendmail...

ПРАВКА 1

По просьбе @AnFi, вот определение локальной почтовой программы из sendmail.cf:

Mlocal,         P=/usr/lib/sm.bin/mail.local, F=lsDFMAw5:/|@qPSXnz9, S=EnvFromSMTP/HdrFromL, R=EnvToL/HdrToL,
                T=DNS/RFC822/SMTP,
                A=mail.local -l -h inbox

решение1

Ваш вопрос адресован Sendmail.org FAQ 3.29

3.29 Как добавить заголовок, указывающий фактического получателя, если несколько пользователей в виртуальном домене пользуются одним почтовым ящиком?

Короткая версия: используйте virtusertable и~offers/.procmailrc

virtusertable:

[email protected]  offers+offer1
[email protected]  offers+offer2

~offers/.procmailrcследует получить «плюс детализацию» в $1.
ИЛИ
Вы можете использовать $h (установленный на +detail) в пользовательских заголовках

Предупреждение: вы получите/обработаете две копии сообщения, адресованные обоим [email protected]и[email protected]

решение2

То, что вы предлагаете, противоречит протоколу SMTP: есть законные причины для добавления адресов в RCPT TOкоманду, несмотря на то, что они не существуют в заголовках To:или Cc:, т.е.RFC 5321 7.2.«Слепые» копии (выделено мной):

Адреса, которые не отображаются в заголовке сообщения, могут отображаться в командах RCPT для SMTP-сервера по ряду причин. Две наиболее распространенные из них включают использование почтового адреса в качестве "расширителя списка" (один адрес, который разрешается в несколько адресов) и появление "слепых копий". Особенно, когда присутствует более одной команды RCPT, и для того, чтобы избежать нарушения некоторых целей этих механизмов,Клиенты и серверы SMTP НЕ ДОЛЖНЫ копировать полный набор аргументов команды RCPT в раздел заголовка, как часть полей заголовка трассировки или как информационные поля или поля заголовка частного расширения.. Поскольку это правило часто нарушается на практике и не может быть реализовано, отправляющие SMTP-системы, которые знают об использовании «bcc», МОГУТ посчитать полезным отправлять каждую скрытую копию как отдельную транзакцию сообщения, содержащую только одну команду RCPT.

Не существует внутренней связи между "обратными" (из команд MAIL, SAML и т. д.) или "прямыми" (RCPT) адресами в транзакции SMTP ("конверт") и адресами в разделе заголовка. Принимающие системы НЕ ДОЛЖНЫ пытаться выводить такие связи и использовать их для изменения раздела заголовка сообщения для доставки. Популярное Apparently-toполе заголовка является нарушением этого принципа, а также распространенным источником непреднамеренного раскрытия информации и НЕ ДОЛЖНО использоваться.

Нерекомендуемый Apparently-toзаголовок управляется опцией NoRecipientAction=action.

Установите поведение, когда в сообщении отсутствуют заголовки получателя ( To:, Cc:или ):Bcc:

  • noneоставляет сообщение неизменным,
  • add-toдобавляет To:заголовок с получателями конверта,
  • add-apparently-toдобавляет Apparently-To:заголовок с получателями конверта,
  • add-bccдобавляет пустой Bcc:заголовок и
  • add-to-undisclosed добавляет заголовок чтения 'To: undisclosed-recipients:;'.

Обратите внимание, что обычно исходный адрес получателя уже находится в заголовке To:или Cc:. Его не следует изменять на имя учетной записи пользователя offers, поэтому он либо [email protected], [email protected]либо скрыт. Переписывание заголовков стало еще более опасным, поскольку это также может нарушить подписи DKIM. Единственный разумный вариант использования — переписывание адреса для почты с локальным источником ( userto [email protected]).


Добавление списка всех RCPT TOадресов нарушит протокол, но на самом деле вам просто нужноединый исходный RCPT TOадресдля пользователя, которому была доставлена ​​почта. Я не знаю, как этого добиться с помощью Sendmail, ноПостфикс(с конфигурацией по умолчанию)добавляетX-Original-To:заголовок, содержащий именно это, и дополнительно Delivered-To:заголовок, содержащий внутренний почтовый ящик назначения ( [email protected]).

Связанный контент