У меня есть сборка почтового сервера с Postfix для SMTP и Dovecot для хранения почты (с почтовыми ящиками, хранящимися в MySQL db). Один из пользователей создал почтовый ящик со знаком плюса в его имени, например:
peter+bob@example.com
Dovecot, похоже, не обрабатывает это имя почтового ящика как обычно. Когда я пытаюсь найти этот почтовый ящик с помощью doveadm, это не удается
# doveadm user peter+bob@example.com
field valueuserdb lookup: user peter+bob@example.com doesn't exist
С другой стороны, когда я выполняю поиск с использованием подстановочного знака, он показывает следующее:
# doveadm user 'peter*bob@example.com'
peter+bob@example.com
# doveadm user '*@example.com'
peter@example.com
(...)
peter+bob@example.com
В любом случае - почтовый ящик со знаком плюса непригоден, в него нельзя войти.
Когда почта отправляется в этот почтовый ящик - Postfix обращается с ней как с любым другим, поэтому перенаправляет ее в Dovecot (в моем случае через LMTP) на почтовый ящик peter+bob@example.com. Но Dovecot пытается доставить его на peter@example.com (игнорируя все, что начинается со знака плюс).
Похоже, что Dovecot обрабатывает знак плюса, как Gmail или другие почтовые серверы:
https://notfaq.wordpress.com/2006/07/20/plus-sign-in-email-addresses/ http://gmailblog.blogspot.cz/2008/03/2-hidden-ways-to-get-more-from-your.html
У меня вопрос:
Особенность, которая mailbox+aextension@example.com
доставляется в mailbox@example.com
называется "подадресация" или "плюс адресация" и красиво описано на Википедия.
Опытные пользователи считают его очень полезным, и вы можете дважды подумать, прежде чем отключить его, если у вас уже есть большая база пользователей, потому что его отключение может сломать больше, чем исправить. IMHO, вы должны исправить свой интерфейс подготовки почтового ящика, чтобы отклонять имена почтовых ящиков с помощью + вместо.
В postfix подадресация настраивается с помощью recipient_delimiter
, просто удалите эту директиву, и подадресация будет отключена.
Как я уже упоминал, подадресация весьма полезна, и вы, возможно, захотите изучить, как Dovecot в настоящее время обращается с подадресацией в качестве руководство предлагает разные варианты.
Следующее будет доставить почту для user+extension@exampel.com
в определенную папку с именем extension
в почтовом ящике пользователя:
dovecot unix - n n - - pipe flags = DRhu user = vmail: vmail argv = / usr / local / libexec / dovecot / dovecot-lda -f $ {sender} -d $ {user} @ $ {nexthop} -m $ {расширение}
или если у вас есть префикс INBOX / пространства имен:
dovecot unix - n n - - pipe flags = DRhu user = vmail: vmail argv = / usr / local / libexec / dovecot / dovecot-lda -f $ {sender} -d $ {user} @ $ {nexthop} -m INBOX / $ {расширение}
или Dovecot может полностью игнорировать расширение и доставлять все сообщения в основной почтовый ящик INBOX
dovecot unix - n n - - pipe flags = DRhu user = vmail: vmail argv = / usr / lib / dovecot / dovecot-lda -f $ {sender} -a $ {recipient} -d $ {user} @ $ {nexthop}