我需要在没有任何系统用户的情况下使用 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.c
并sendmail/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) ;)