Постфикс + голубятня + сито + переадресация + сито
Давайте предположим, мой домен на 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 как
user@exampleserver.com xxxxx@gmail.com
Переадресация очень хорошая, но почта, отправленная на user+Something@exampleserver.com, теперь пересылается на user+Something@gmail.com, что совершенно неверно. Как это исправить, чтобы просеянные сообщения перенаправлялись на xxxxx+Something@exampleserver.com?
1 ответ
Postfix'алиасинг через virtual
выполняется перед любым sieve
продолжение. Поэтому вы должны полностью отключить псевдонимы постфиксов и пересылать сообщения только через сито dovecot. Количество режимов адреса сравнивается с шаблоном:
......
# 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";
}
......
header :is
означает строгое соответствие всего адреса получателя
header :contains
означает, что любая часть адреса соответствует строке.
header :regex
означает, что адрес получателя соответствует регулярному выражению.
В любом случае вы должны помнить, что sieve
правила проверяются сверху вниз, пока не будет найдено какое-либо правило. Таким образом, вы можете переупорядочивать правила в некоторой последовательности, где более конкретные случаи будут отслеживаться и выполняться перед любыми другими нежелательными правилами.
PS
Как указано в dovecot
Руководство https://wiki.dovecot.org/Pigeonhole/Sieve/Examples все можно сделать следующим образом:
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";
}
}