是否有可能碎片后缀虚拟邮箱数据库?

我设法configurationPostfix从数据库中读取虚拟邮箱列表。 但是,如果我的列表分布在多个数据库中呢? 有没有办法根据传入电子邮件的目标域设置Postfix的数据库访问凭据?

我有多个客户共享一个Web服务器,每个人都有自己的数据库通过共享。 我想知道如果我也可以共享一个Postfix! 问题是他们的用户列表驻留在他们各自的数据库中,并且随着时间的推移,碎片的数量可能会增加。 我不想每个新客户重新configuration系统。

从Postfix数据库自述,它说

所有Postfix查找表将信息存储为(键,值)对。 这个界面起初可能看起来很简单,但事实certificate它非常强大。 (key,value)查询接口完全隐藏了Postfix的LDAP或SQL的复杂性。 这是连接复杂系统和简单界面的一个很好的例子。

Postfix只提供一个查找键,那么“你的表”必须返回适当的值。 关于多个数据库,postfix也支持它。 但是它只有一个单一的操作模式:逐个检查数据库,直到find“key”。 当您根据传入电子邮件的目标域添加一些自定义逻辑(如设置Postfix的数据库访问凭据)时 ,postfix就没有这样的选项。


所以,你的问题的答案是:

是否有可能碎片后缀虚拟邮箱数据库?

对的,这是可能的。 但是你不能单独使用postfix。 您需要额外的“工具”来帮助您的数据库中的后缀查找信息。 后缀

一些想法:

  • 使用MySQL存储过程来填充所有数据库,然后在数据库中运行查询,例如: https : //stackoverflow.com/questions/2132654/querying-multiple-databases-at-once 。 你需要单一的主凭证连接到MySQL。

  • 将多个postfix-mysql-maps文件放在一个文件夹中,并设置cron以定期重新填充postfix main.cf的所有文件。 下面的命令应该是足够的。

postconf -e virtual_mailbox_maps=$(for maps in /etc/postfix/mymaps/*; do printf "mysql:$maps "; done)

  • 使用tcp / socketmap表映射来添加额外的脚本并执行你的逻辑。 您可以使用后缀spawn,以便您的脚本不必在tcp / unix套接字中侦听。 你的后缀必须通过stdin得到密钥 ,你必须通过stdout返回 。 这是tcp表的一个实现,并在transport_maps产生。

如果你使用postfixmysql来存储用户的域名和密码等等,你可以使用一个mysql服务器来安装许多postfix服务器,因为postfix只使用mysql来检索使用read sql查询的信息。

如果你有一个集中的数据库,每个客户端都可以指向这个数据库。