我想通过虚拟邮箱收到的电子邮件运行一个脚本。我原本希望.forward
在虚拟邮箱目录中执行此操作,但似乎没有执行该脚本。
其想法是通过 munpack 把附件提取到另一个目录中,但只有发送到该邮箱时才这样做。
邮件服务器是 Postfix。
答案1
我以前使用过的一个选项是定义您自己的交付包装器(我使用 maildrop 进行实际交付 - 但这应该适用于任何方式),然后您就可以在那里完成您的工作。如下所示master.cf
:
maildrop unix - n n - - pipe
flags=Rhu user=vmail:vmail argv=/usr/bin/maildrop-wrapper
-d ${user}@${nexthop} -f ${sender} -A X-Delivery:maildrop
在 maildrop-wrapper 中,完成你的工作然后调用真正的 maildrop:
#!/bin/bash
#do your stuff
#and/or:
exec /usr/bin/maildrop $@
你可以在调用 maildrop 之前或之后运行它,重要的提示:脚本将通过 stdin 接收电子邮件,因此如果您打算稍后将其传递给 maildrop(上面的示例没有这样做),则必须对其进行缓冲。我可能会建议为此使用 perl,因为那里的邮件处理库比 bare shell 中的多。
编辑:如果你只想为单个用户执行此操作,那么这就有点小题大做了,看看邮件投递- 特别是关于通过反引号的“外部命令”部分。为此用户定义一个 maildroprc,其中包含所需的规则。
答案2
我已经运行了类似的东西很多年了。我在 /etc/aliases 文件中添加了重定向。
需要 munpack 处理的邮件被发送到[电子邮件保护]。
所以我在别名文件中写了这行 robot : |"/home/robot/munpack-private.sh" user
因此邮件由 munpack 脚本处理并发送到用户邮箱