Назад | Перейти на главную страницу

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

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

Сказав это:

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

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

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

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

Предположим, у меня есть два адреса электронной почты, offer1@example.com и offer2@example.com. Оба сопоставлены с учетной записью пользователя O / S offers. Пока это работает: пользователь O / S offers, при получении его электронной почты, получает все сообщения, отправленные на offer1@example.com и offer2@example.com.

Теперь проблема в том, что он не может определить, на какой адрес электронной почты изначально было отправлено каждое сообщение. Это означает: хотя он видит все сообщения, которые были отправлены на оба адреса электронной почты, он не может определить, было ли определенное сообщение изначально отправлено на offer1@example.com или чтобы offer2@example.com.

Поэтому я хотел бы добавить собственный заголовок к каждому входящему сообщению, возможно, что-то вроде этого: 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

То, что вы предлагаете, противоречит протоколу 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, так что это либо offer1@example.com, offer2@example.com или скрытый. Перезапись заголовков стала еще более опасной, поскольку она также может нарушить подписи DKIM. Единственный разумный вариант использования - переопределение адресов для почты с локальным происхождением (user к user@example.com).


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

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

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

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

виртуозный:

offer1@example.com  offers+offer1
offer2@example.com  offers+offer2

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

Предупреждение: вы получите / обработаете две копии сообщения, адресованные обоим offer1@example.com и offer2@example.com