Мне нужно использовать sendmail без каких-либо системных пользователей.
Единственная проблема, которая все еще существует в моей конфигурации, заключается в том, что FEATURE(virtusertable)
мне нужен конечный системный пользователь на RHS в моем virtusertable, например, такой:
@domain.tld [email protected]
[email protected] systemuser
Проблема в том, что такого пользователя systemuser НЕТ, а я хочу, чтобы вся почта для @domain.tld доставлялась на мой lda (procmail, затем dovecot-lda), который способен обрабатывать полные адреса электронной почты как пользователей.
Я уже пробовал такие вещи, как
define(`_VIRTUSER_STOP_ONE_LEVEL_RECURSION_', `true')dnl
define(`_NEED_MACRO_MAP_',`1')dnl
но и это не помогает.
У нас уже есть уродливый обходной путь со скриптами procmail, который считывает virtusertable, но мы бы хотели, чтобы это обрабатывалось sendmail, чтобы любое отправленное письмо, не имеющее RHS и/или пользователя в lda, возвращалось. Кроме того, использование dovecot-lda — это прямой lda в sendmail, который также не является вариантом в нашей настройке. :(
Любая помощь приветствуется!
решение1
Взгляни наFAQ по Sendmail 3.29- «Как добавить заголовок, указывающий фактического получателя, если несколько пользователей в виртуальном домене пользуются одним почтовым ящиком?»
ИМХО, его можно легко адаптировать для достижения желаемого — он предоставляет все необходимые зацепки.
Кстати, вы можете использовать запись virtusertable "@domain.tld" для выбранного error
почтового клиента. Это позволит вам отклонять сообщения для виртуальных пользователей, не указанных в virtusertable.
@domain.tld error:nouser No such user here
[email protected] systemuser+%1
[email protected] systemuser+%1
Вы также можете проконсультироватьсяhttps://www.sendmail.com/sm/open_source/tips/virtual_hosting/
решение2
Я решил эту проблему двумя способами:
a) Патчинг libsm/mbdb.c
и sendmail/recipient.c
дополнительный поиск в таблице пользователей dovecot. Чтобы это заработало, потребовалась небольшая настройка LOCAL_RULE_0.
б) Анджей указал мне в похожем вопросе на stackoverflow на решение с mailertable и файлом доступа. Следуя этой идее, я нашел еще более простое решение, чтобы иметь все, что нам нужно:
virtusertable:
@domain.tld user_domain_tld
[email protected] user_another_tld
псевдонимы:
user_domain_tld: "|/bin/procmail -a [email protected]"
user_another_tld: "|/bin/procmail -a [email protected]"
Решение a) хорошо иметь, потому что оно изменяет принятый синтаксис в virtusertable и нужно проверять только один файл за раз, где решение b) выигрывает из-за простого способа его достижения, который, кроме того, более совместим с будущими выпусками sendmail. После всей работы я использую решение a), но я изменю его на решение b) после Рождества ;)