如何将电子邮件路由到脚本

如何将电子邮件路由到脚本

我想做的是设置一个地址[电子邮件保护]它将获取收到的任何电子邮件,并将完整消息作为 STDIN 运行到 shell 脚本中。但我似乎无法让它工作。尝试了几个解决方案,包括这个:

如何将一些电子邮件路由到 Postfix 中的脚本?

但我的设置有点不同。我使用的是 Postfix/Dovecot/MySQL 设置,因此所有电子邮件都由 Dovecot 处理,Postfix 从 MySQL 读取其映射。无论我向 master.cf 添加什么,似乎都不起作用。SpamAssassin 中有一行,它工作正常。我被卡住了!

编辑:我真的希望大家在否决我的问题之前仔细阅读。我正在使用 MySQL 作为我的别名映射,因此 /etc/aliases 不起作用,我当然已经尝试过了。

答案1

显然,Douglas Land 的答案会起作用,但需要做一些补充。
假设您在 main.cf 中的 $mydestination 处只有 localhost.localdomain。
然后添加一个虚拟别名:

[email protected] -> [email protected]

在 main.cf 中你将需要:

alias_maps=hash:/etc/aliases

然后添加到 /etc/aliases :

somelocaluser: "|/your/script/here"

newaliases+postfix 重新加载,您就可以开始了。

答案2

我会选择 Procmail。我们使用它来解析各种邮件,并将其发送给工作脚本和 IRC 机器人进行通知。

以下是一个例子如何处理电子邮件。 http://linuxgazette.net/issue14/procmail.html

为方便起见,这里做了相关的简短示例:

  1. handler例如,创建一个名为 的本地用户。

  2. 转到handler的主目录并创建一个名为的文件,.procmailrc其中包含:

:0
| $HOME/bin/my.script

这会通过 STDIN 将整个入站电子邮件传递给脚本$HOME/bin/my.script

当我第一次尝试将电子邮件传递给脚本时,这里也是我获得 Procmail 帮助的地方:如何使用 procmail 将消息放入变量中

答案3

您可以通过 , RE 将条目传送到脚本/etc/aliases

foo: "|/your/script/here"

修改/etc/aliases然后运行newaliases并重新加载 postfix 进程。

答案4

还没有提到的是你可以使用多个查找表(以逗号或空格分隔):

virtual_alias_maps = mysql:/etc/postfix/mysql-virtual.cf
alias_maps = mysql:/etc/postfix/mysql-aliases.cf hash:/etc/aliases

第一个(virtual_alias_maps)将搜索电子邮件并返回用户名(例如:[电子邮件保护]->信息1234)。

然后,第二个 (alias_maps) 将在您的数据库中搜索用户名,如果未找到,则在 /etc/aliases 中搜索。这样,您仍然可以在 MySQL 中管理别名并在 /etc/aliases 中设置脚本,而无需将“@localhost.localdomain”附加到本地用户。

要测试您的设置是否正确,请使用:

postmap -q [email protected] mysql:/etc/postfix/mysql-virtual.cf
postmap -q info1234 mysql:/etc/postfix/mysql-aliases.cf hash:/etc/aliases

在 MySQL 中使用带有别名的本地帐户:

在我的一个自定义设置中,我使用本地帐户作为用户,仅使用 MySQL 作为别名。因此,我的设置如下:

virtual_alias_maps = hash:/etc/postfix/vusers
smtpd_sender_login_maps = hash:/etc/postfix/vusers
virtual_alias_domains = /etc/postfix/vhosts
alias_maps = mysql:/etc/postfix/mysql-aliases.cf hash:/etc/aliases

正如您所见,您可以随意以任何您想要的方式混合它们。

相关内容