Мне нужно использовать sendmail без системных пользователей.
Единственная проблема, которая все еще существует в моей конфигурации, заключается в том, что FEATURE(virtusertable)
хочет, чтобы последний системный пользователь на RHS в моем виртуальном файле выглядел так:
@domain.tld user@domain.tld
user@domain.tld 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 также не является вариантом в нашей настройке. :(
Любая помощь приветствуется!
Взгляни на Sendmail FAQ 3.29 - «Как я могу добавить заголовок с указанием фактического получателя, когда несколько пользователей в виртуальном домене обращаются к одному почтовому ящику?»
ИМХО его можно легко адаптировать под то, что вы хотите - он предоставляет все необходимые крючки.
Кстати, вы можете использовать виртуальную запись "@ domain.tld" для выбранных error
почтовик. Это позволит вам отклонять сообщения виртуальным пользователям, не указанным в virtusertable.
@domain.tld error:nouser No such user here
adam@domain.tld systemuser+%1
eve@domain.tld systemuser+%1
Вы также можете проконсультироваться https://www.sendmail.com/sm/open_source/tips/virtual_hosting/
В итоге я решил это двумя способами:
а) Патч libsm/mbdb.c
и sendmail/recipient.c
чтобы получить дополнительный доступ к таблице пользователей dovecot. Чтобы это работало, потребовалась небольшая настройка с LOCAL_RULE_0.
б) Анджей указал мне на аналогичный вопрос о stackoverflow для решения с таблицей рассылки и файлом доступа. Следуя этой идее, я нашел еще более простое решение, позволяющее иметь все необходимое:
виртуозный:
@domain.tld user_domain_tld
info@domain.tld user_another_tld
псевдонимы:
user_domain_tld: "|/bin/procmail -a user@domain.tld"
user_another_tld: "|/bin/procmail -a user@another.tld"
Решение a) приятно иметь, потому что оно изменяет принятый синтаксис в virtusertable, и нужно проверять только один файл за время, где решение b) побеждает из-за простого способа его достижения, который, кроме того, более совместим с будущие выпуски sendmail. После всей работы использую раствор а), но после рождества заменю на раствор б);)