Вопрос или проблема
У меня есть сервер почты, собранный с использованием Postfix для SMTP и Dovecot для хранения почты (с почтовыми ящиками, хранящимися в базе данных MySQL). Один из пользователей создал почтовый ящик с знаком плюс в его имени, вот так:
Dovecot, похоже, не обрабатывает это имя почтового ящика как обычно. Когда я пытаюсь найти этот почтовый ящик с помощью doveadm, он не удается
# doveadm user [email protected]
field valueuserdb lookup: user [email protected] doesn't exist
С другой стороны, когда я делаю поиск с помощью подстановочного знака, он показывает это:
# doveadm user 'peter*[email protected]'
[email protected]
# doveadm user '*@example.com'
[email protected]
(...)
[email protected]
В любом случае – почтовый ящик со знаком плюс неисполним, вы не можете войти в него.
Когда почта отправляется на этот почтовый ящик – Postfix обрабатывает его как любой другой, поэтому он пересылает его в Dovecot (в моем случае через LMTP) в почтовый ящик [email protected]. Но Dovecot пытается доставить его [email protected] (игнорируя все, что начинается со знака плюс).
Похоже, что 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
Мой вопрос:
- Действительно ли Dovecot обрабатывает знак плюс особым образом, как я описал, или это какая-то неправильная работа? Я искал в документации Dovecot и не нашел ничего, также я не нашел ничего полезного, ищя в сети.
- Если это функция, можно ли ее отключить (чтобы знак ‘+’ не обрабатывался как особый)?
Функция, при которой [email protected]
доставляется к [email protected]
, называется “суб-адресация” или “плюс-адресация” и хорошо описана на Wikipedia.
Продвинутые пользователи находят это очень полезным, и вам стоит дважды подумать, прежде чем отключать это, если у вас уже есть большая существующая база пользователей, потому что отключение может повредить больше, чем исправить. По моему мнению, вам следует изменить интерфейсProvisioning для отклонения имен почтовых ящиков с + вместо этого.
В postfix суб-адресация настраивается с помощью recipient_delimiter
, просто уберите эту директиву, и суб-адресация будет отключена.
Как я уже упоминал, суб-адресация довольно полезна, и вам стоит изучить, как Dovecot в настоящее время обрабатывает суб-адресацию, поскольку руководство предлагает разные варианты.
Следующее приведет почту для [email protected]
в конкретную папку с именем extension
в почтовом ящике пользователя:
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/local/libexec/dovecot/dovecot-lda -f ${sender} -d ${user}@${nexthop} **-m ${extension}**
или если у вас есть префикс 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/${extension}**
или 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}
Ответ или решение
Обработка почтовых ящиков с плюсом в именах: Dovecot и Postfix
Введение
Ваша ситуация с почтовым сервером, построенным на Postfix и Dovecot, поднимает важные вопросы о том, как почтовые системы обрабатывают знаковые символы, такие как плюс ("+"). Давайте рассмотрим ваши вопросы подробнее.
1. Как Dovecot обрабатывает знаки "+" в именах почтовых ящиков?
Согласно вашему описанию, Dovecot действительно может вести себя так, как будто он интерпретирует знак "+" как знак для "суб-адресации", что является распространенной практикой в почтовых службах, таких как Gmail. Это может привести к тому, что письма, отправленные на адрес вида [email protected], фактически будут доставлены в почтовый ящик, связанный с [email protected]. Если Dovecot игнорирует часть адреса после знака "+", это может создать проблемы при попытке осуществить доступ к почтовому ящику.
Это поведение не является ошибкой, так как функциональность суб-адресации популярна и полезна для обеспечения доставки сообщений в разные папки или для фильтрации. Однако, в зависимости от конфигурации, оно может также привести к конфликтам или проблемам с доступом, как в вашем случае.
2. Возможность отключения обработки знака "+"
Если вы хотите отключить эту функциональность, вам нужно будет изменить настройки вашего почтового сервера. В Postfix это можно сделать, изменив значение параметра recipient_delimiter
. По умолчанию, Postfix может использовать знак "+" в качестве разделителя, и если этот параметр удалить или изменить, то суб-адресация будет отключена. Однако, перед изменением этой настройки стоит учитывать потенциальные последствия для существующих пользователей, которые могут использовать эту функциональность.
В Dovecot также существуют различные способы реализации обработки почты, которые могут помочь в управлении суб-адресацией:
-
Лучше отклонить адреса с "+" уже на этапе создания почтовых ящиков: Рекомендуется реализовать проверку на наличие знака "+" в вашем интерфейсе для управления учетными записями. Это позволит избежать создания конфликтных ящиков с названием содержащим знак "+".
-
Явная обработка в конфигурации Dovecot: Если вы хотите, чтобы Dovecot не игнорировал все, что идет после знака "+", вы можете настроить соответствующую маршрутизацию почты для обработки таких адресов. Используйте команду
dovecot-lda
и настраивайте аргументы по желанию.
Примеры конфигурации для обработки mail:
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/local/libexec/dovecot/dovecot-lda -f ${sender} -d ${user}@${nexthop} -m INBOX/${extension}
или
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/dovecot-lda -f ${sender} -a ${recipient} -d ${user}@${nexthop}
Эти изменения помогут вам контролировать, как Dovecot взаимодействует с почтой, отправленной на адреса с символом "+".
Заключение
Управление суб-адресацией и знаком "+" в именах почтовых ящиков — это важный аспект работы почтовых серверов, который могут потребоваться для настройки или ограничения. Прежде чем вносить изменения в вашу конфигурацию, рекомендуется подумать о последствиях для текущих пользователей и функциях, которые они могут использовать.