仅非系统用户使用 sendmail

仅非系统用户使用 sendmail

我需要在没有任何系统用户的情况下使用 sendmail。

我的配置中仍然存在的唯一问题是FEATURE(virtusertable)需要在我的 virtusertable 中的 RHS 上有一个最终系统用户,如下所示:

@domain.tld           [email protected]
[email protected]       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 直接在 sendmail 中使用 lda 也不是选项。:(

欢迎任何帮助!

答案1

看一眼Sendmail 常见问题解答 3.29- “当虚拟域中的多个用户转到单个邮箱时,如何添加指定实际收件人的标题?”

恕我直言,它可能很容易适应以提供您想要的东西 - 它提供了所有需要的钩子。

顺便说一句,您可以使用“@domain.tld”virtusertable 条目来选择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.csendmail/recipient.c额外查找 dovecot 用户表。要使此功能正常工作,需要对 LOCAL_RULE_0 进行细微调整。

b) Andrzej 在 stackoverflow 上向我提出了一个类似的问题,即使用 mailertable 和 access 文件的解决方案。按照这个想法,我找到了一个更简单的解决方案来满足我们所需的一切:

虚拟用户表:

@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) ;)

相关内容