Постфикс (виртуальные пользователи) + голубятня + решето: окутайте не содержит исходного получателя

Я настроил свой почтовый сервер после учебного руководства ISPMail с виртуальными пользователями в постфиксе + голубятня + решето. Моя проблема: envelop "переменная" в решете не содержит исходного получателя.


У меня есть почтовая учетная запись, давайте назовем ее mail@example.org и дополнительные псевдонимы настраивали для постфикса, который все поставляют вышеупомянутому адресу:

name@example.org -> mail@example.org
@domain.com -> mail@example.org

Последнее существо всеобъемлющий адрес.

Постфикс называет голубятню со следующей строкой конфигурации в master.cfg:

dovecot   unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/dovecot-lda -f ${sender} -d ${user}@${nexthop} -a ${recipient}

С решетом я хочу поместить все письма, полученные для всеобъемлющего адреса в определенную папку. Мой код решета похож на это:

if envelope :is :domain "To" "domain.com" {
  fileinto "special-folder";
}

Это печально не работает. При рытье далее я узнал это, что внутри envelop всегда заключительный адрес доставки, т.е. mail@example.org в этом случае. Я нашел это использование следующего правила:

if envelope :matches "To" "*" {
  fileinto "${1}";
}

И журнал решета, говоря мне:

failed to store into mailbox 'mail@example.org': Mailbox doesn't exist: mail@example.org.

Я уже предполагаю, что это должно быть проблемой где-нибудь между постфиксом и голубятней, поскольку почтовый журнал говорит мне следующее:

Aug 29 10:38:27 *** dovecot: lda(mail@example.org): sieve: msgid=<54003C01.1080704@***>: stored mail into mailbox 'INBOX'
Aug 29 10:38:27 *** dovecot: lda(mail@example.org): Error: sieve: execution of script /var/vmail/example.org/mail/dovecot.sieve failed, but implicit keep was successful (user logfile /var/vmail/example.org/mail/dovecot.sieve.log may reveal additional details)
Aug 29 10:38:27 *** postfix/pipe[12469]: A31A28006B: to=<mail@example.org>, orig_to=<test@domain.com>, relay=dovecot, delay=0.29, delays=0.18/0.01/0/0.1, dsn=2.0.0, status=sent (delivered via dovecot service)

Очевидно, постфикс указывает исходному получателю (test@domain.com) и почтовый ящик, поставленный (mail@example.org), но так или иначе эта информация теряется на пути к голубятне?!

2
задан 29 August 2014 в 12:16
2 ответа

После некоторого тестирования (ответ masegaloeh и помощь друга дали несколько полезных подсказок) есть два способа (оба, кажется, работают одинаково хорошо):

  1. Использовать ${оригинал-реципиент} вместо ${реципиент}:

    Как говорит нам man pipe "Этот макрос расширяется до полного адреса получателя до любого переписывания адреса или наложения псевдонима ", так что это решение моей проблемы. Поэтому изменённая командная строка в master.cf должна выглядеть как

    dovecot unix - n n - - pipe
     flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/dovecot-lda -f ${sender} -d ${user}@${nexthop} -а ${оригинальный_реципиент}
    
  2. Используйте заголовок X-Original-To и скажите голубям, чтобы они установили конверт в это поле заголовка:

    Как предложил Массегалоэ, я добавил O к флажкам, указывающим на постфикс, чтобы добавить заголовок X-Original-To. Внутри /etc/dovecot/conf.d/15-lda.conf я говорю голубятне использовать этот заголовок для его конверта:

    lda_original_recipient_header = X-Original-To
    

    Как говорится в комментарии выше, при вызове dovecot-lda через постфикс нельзя использовать опцию -a, так как она переопределяет эту настройку. Таким образом, master.cf выглядит следующим образом:

    dovecot unix - n n - pipe
     flags=DORhu user=vmail:vmail argv=/usr/lib/dovecot/dovecot-lda -f ${sender} -d ${user}@${nexthop}
    
3
ответ дан 3 December 2019 в 09:16

Такое поведение произошло из-за добавления макроса {recipient} в аргумент dovecot-lda. Как указано в man pipe, постфикс заменит этот макрос на конечный получатель (mail.example.org), а не на оригинальный (test@domain.com).


Вместо разбора конверта можно разобрать другой заголовок, например X-Original-To . Этот заголовок предназначен для сохранения исходного получателя до переписывания или наложения псевдонима. Чтобы включить этот заголовок, отредактируйте master.cf так, чтобы строка голубятня стала (обратите внимание, что был отредактирован флаг-параметр)

dovecot   unix  -       n       n       -       -       pipe
  flags=DROhu user=vmail:vmail argv=/usr/lib/dovecot/dovecot-lda -f ${sender} -d ${user}@${nexthop} -a ${recipient}

Затем ваш скрипт сита стал

if header :matches "X-Original-To" "*" {
  fileinto "${1}";
}

Немного сложноватым, но в результате вы можете получить оригинального получателя и его псевдонимы.

.
3
ответ дан 3 December 2019 в 09:16

Теги

Похожие вопросы