Postfix + Dovecot + Sieve + forwarding + sieve

Предположим, мой домен exampleserver.com. У меня следующее правило сита:

require ["fileinto", "subaddress", "mailbox", "variables"];

if address :detail :matches "to" "*" {
set "folder" "${1}"; 
fileinto :create "INBOX.${folder}";
}

user@exampleserver.com хочет, чтобы почта пересылалась на xxxxx@gmail.com. Это делается через / etc / postfix / virtual as

user@exampleserver.com      xxxxx@gmail.com

. Пересылка отлично работает, но почта, отправленная на user+Something@exampleserver.com , теперь пересылается на user+Something@gmail.com, что в корне неверно. Как это исправить, чтобы просеянные сообщения перенаправлялись на xxxxx+Something@exampleserver.com?

0
задан 14 June 2018 в 16:26
1 ответ

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

......
# rule:[gmailfwd1]
if header :is "to" "user@exampleserver.com"
{
  redirect "user@gmail.com";
}

# rule:[gmailfwd2]
if header :contains "to" "user"
{
  redirect "otheruser@gmail.com";
}

# rule:[gmailfwd3]
if header :regex "to" "user.*@exampleserver.com"
{
  redirect "otheruser@gmail.com";
}
......

заголовок: is означает строгое соответствие всего адреса получателя

заголовок: содержит означает, что любая часть адреса соответствует строке.

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

В любом случае вы должны помнить, что правила sieve проверяются сверху вниз, пока не будет найдено какое-либо правило. Таким образом, вы можете изменить порядок правил в некоторой последовательности, при которой более конкретные случаи будут обнаруживаться и обрабатываться перед любыми другими нежелательными правилами.

PS

Как указано в руководстве dovecot https://wiki.dovecot.org/Pigeonhole/Sieve/Examples#Plus_Addressed_mail_filtering , все можно сделать таким образом :

require ["variables", "fileinto", "subaddress"];

if header :is :user "to" "someuser" {
  if header :matches :detail "to" "*" {
    set "tag" "${1}";  /* extract "Something" into var "tag" */
  }

  if string :is "${tag}" "" { /* empty/no tag */
    redirect "user@gmail.com";
  } else {                    /* tag is present*/
    redirect "otheruser+${tag}@exampleserver.com";
  }
}
0
ответ дан 5 December 2019 в 05:51

Теги

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