如何使用postfix和mysql保存副本的同时转发邮件?

我将电子邮件从原来的Plesk安装迁移到运行iRedMail的定制的Ubuntu服务器(postfix / amavisd / dovecot / etc)。

我使用postfixadmin来pipe理所有的域和一个mysql后端。 我注意到,如果我想“别名”或创build一个前锋,我不能使用现有的邮箱 – 所以我不能复制Plesk风格的“保存副本redirect”function。

我目前正在通过数据库设置远程别名,并使用:

virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf 

如果还有一种方法可以继续使用我的数据库,这将是理想的 – 即使我必须添加一些列,并更改查询。

谢谢!

我明白了这一点。 基本上我需要修改保存别名的mysql表,以便它支持每个地址的多个别名,使得可以为本地域和远程电子邮件提供传送设置。

目前为止,尽pipe我听说有些人试图将重复的电子邮件转发给转发的电子邮件帐户。 到目前为止,我还没有经历过这个。

我使用的是postfixadmin来pipe理帐户,但是它不支持这种用法,所以我不得不修改源代码,以便正确显示,编辑和删除别名。

这里的主要教训是,当使用mysql时,一个键可以映射到多个结果,通过设置一个新的主键,即“ID”,但保持你的后缀查询逻辑相同。 返回的多个结果与默认dbm / bd文件中的多个结果相同,除了您必须使用相同的键创build新logging,而不是使用具有某种分隔结果的单个键创build新logging。

HTH别人!

这应该与MySQL中的任何地图。

如果您在virtual_mailbox_maps中定义了虚拟帐户,并且您想redirect并保留消息,则必须在别名映射中插入两个别名:

 [email protected] [email protected] [email protected] [email protected] 

这个语法将把任何邮件redirect到[email protected][email protected]并且将检查你是否在virtual_mailbox_maps中有用户[email protected],如果是的话 – 保存它。

更新或者你甚至可以使用( @Tim Heagele感谢您的评论)

 [email protected] [email protected] [email protected] 

你有所有用户的本地帐户?

我使用了类似于以下内容的.forward文件:

 [email protected], \user 

它转发一个副本并在本地后台打印一份副本。

从postfix'main.cf发送可能更多犹太教:

说,在main.cf中:

 ### let's archive some incoming/outgoing mail: recipient_bcc_maps = hash:/etc/postfix/recipient-bcc sender_bcc_maps = hash:/etc/postfix/sender-bcc 

并在相关文件(收件人 – 密送和发件人 – 密送)例如:

 @sender.domain a.local@address 

编辑文件后不要忘记(重新)build立数据库:

 postmap hash:recipient-bcc postmap hash:sender-bcc 

非常简单的解决scheme是将源地址包含在目标列中以逗号分隔的列表中。 例如:

 insert into virtual_aliases (domain_id, source, destination) values (1, '[email protected]', '[email protected],[email protected]'); 

这对我行得通。

这个问题是相当古老的,但我碰到了相同的环境(postfix; dovecot; mysql)相同的情况,并实现了以下方法:

我创build了一个新的数据库表存储我的虚拟转发configuration:

 CREATE TABLE `virtual_forwards` ( `id` int(11) NOT NULL auto_increment, `domain_id` int(11) NOT NULL, `source` varchar(100) NOT NULL, `destination` varchar(100) NOT NULL, PRIMARY KEY (`id`), FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

然后我创build了一个新的虚拟转发映射文件/etc/postfix/mysql-virtual-forward-maps.cf ,它查询以前创build的virtual_forwards表,AND总是返回连接的源以及目标地址(邮件将被发送到别名和目的地):

 user = mailuser password = <PASS> hosts = 127.0.0.1 dbname = <DB_NAME> query = SELECT CONCAT(source, ',', destination) FROM virtual_forwards WHERE source='%s' 

最后,我添加了新的映射文件到我的/etc/postfix/main.cf作为virtual_alias_maps

 virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf,mysql:/etc/postfix/mysql-virtual-forward-maps.cf 

重新启动你的postfix服务器,一切都应该像预期的那样工作。 我赞成这种方法反对将一个逗号分隔列表添加到virtual_aliases表,因为它只是感觉不对我。 但这可能是我个人的问题:)

我知道我不能根据相同的源地址添加多个转发(例如test @ tworabbits => test1 @ tworabbits,test2 @ tworabbits),但是我们可以很容易地将virtual_forwards表分成virtual_forward_sourcesvirtual_forward_destinations以满足这一要求。

我希望这有助于另一个五年过去了:)干杯!