我想使用基于SQL的虚拟用户dovecot(在我当前的exim + courier-imapd设置中已经正常工作)。
在我的设置中有“邮箱”有一个mailboxname @域和一个密码。 除此之外,还有“地址”,将实际的电子邮件地址映射到邮箱。
当通过IMAP或POP3login时,用户使用邮箱名称和密码。 所以我只是检查dovecot passdb查询中的邮箱表,它工作正常。
userdb查询是一个问题,但是:当用户login时,可用的信息显然是mailboxname @ domain用户名,然后可以用来创build邮箱path(甚至可以使用static userdb)。
但是,当通过LMTP发送电子邮件时,我需要查询地址表以检索目的地邮箱 – 所以在这种情况下我需要一个不同的查询。
一个可能的解决scheme可能是在数据库级别使用一些条件,根据%svariables(服务名称,例如lmtp )执行不同的查询 – 但显然这将是一个巨大的混乱。
另一个解决scheme可能是简单地使用LDA而不是LMTP,因为我可以在exim中执行邮箱名称的查找,并将其简单地传递给LDA程序 – 但是使用LDA不仅涉及到一个额外的进程正在启动(不是它对我低容量的服务器,但无论如何),并可能更糟糕的error handling,因为LDA只能返回退出状态代码exim不像LMTP可能会返回一个详细的错误消息。
所以我想知道是否有一种方法来执行不同的userdb查询取决于他们在哪里使用 – 在交付或访问邮箱。
Dovecot LMTP与IMAP服务器(及其伴随的login名和userdb)完全无关。
但是,ttbomk无法使用一个用户login/发送邮件,并使用另一个(或别名)接受邮件。
在postfix中,通过添加一个包含收件人地址和LMTP用户的虚拟别名映射来解决这个问题是微不足道的; 这不是LDA应该做的事情。