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

$ {extension} пусто после универсального псевдонима в Postfix

Мне нужна установка, в которой адрес электронной почты, например user+foo@example.com, перенаправляет почту в папку foo. Я уже настроил и протестировал голубятню. Он вызывается постфиксом с этой строкой в ​​master.cf:

dovecot unix    -       n       n       -       -      pipe
  flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop} -n -m ${extension}

Я жду ${extension} для расширения до 'foo', но он всегда пуст.

я добавил

recipient_delimiter = +

в мой main.cf.

Как заставить его работать?

У меня есть универсальный псевдоним, который перенаправляет @ example.com на user@example.com. Кажется, что расширение пустое из-за этого. Возникает вопрос: Могу ли я иметь универсальную систему, чтобы random+ext@example.com перенаправлял на user+ext@example.com без явного определения части random или ext?

Для этого вам нужно будет использовать карту регулярного выражения.

Вот фрагмент Почта от Wietse по этому поводу.

Вы можете использовать таблицы регулярных выражений вместо карт с фиксированной строкой и выполнять произвольные преобразования адресов:

/\+([^+]+)@example\.com$/   localuser2+$1localhost 

Вы можете получить объяснение схемы регулярных выражений в regex101. Короче, скоба () захватит расширение и передаст его вашему псевдониму.

У меня аналогичная установка с использованием Postfix и CourierIMAP. Вы можете попробовать использовать procmail чтобы справиться с этим. У меня есть подстановочный знак, так что вся почта отправляется одному пользователю, а затем я использую правила procmail для фильтрации электронной почты в различные папки на основе адреса, на который она была отправлена.

Например, это отфильтрует электронную почту на adsense или google @ domain.com в папку Google:

:0
* ^(To|CC|BCC).*(adsense|google)\@domain\.com
.Google/

Чтобы расширить это для ваших целей, вы можете использовать более продвинутое правило, подобное этому:

:0
* ^(To|CC|BCC).*user\+\/.*\@domain\.com
.`echo $MATCH | sed 's/\@.*//'`/

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