Отказ от ответственности: Я читал некоторые вопросы и статьи здесь и в других местах, которые касаются перезаписи заголовков 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