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

использование sendmail только с не системными пользователями

Мне нужно использовать 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. После всей работы использую раствор а), но после рождества заменю на раствор б);)