我有:
postfix->dovecot-> new mail go to [aaaa@11111.xemple.com] mailbox
postfix->dovecot-> new mail go to [aaaa@22222.xemple.com] mailbox
postfix->dovecot-> new mail go to [aaaa@33333.xemple.com] mailbox
我需要在收到邮件时运行脚本并由dovecot保存以用于域22222.xemple.com
新电子邮件发布时如何制作aaaa@22222.xemple.com dovecot运行脚本: sh /my/script/run/after/new/email/in/22222_xemple_com/run.sh
答案 0 :(得分:2)
使用后缀传输!
添加将运行命令的用户 transpostfix
添加到master.cf新传输:
emailtransport unix - n n - - pipe
flags=X user=transpostfix size=26214400 argv=/my/script/run/after/new/email/in/22222_xemple_com/run.sh
将main.cf链接添加到传输文件
transport_maps = hash:/etc/postfix/transport
编辑传输文件并运行postmap
# postmap /etc/postfix/transport
transpostfix@localhost.localhost emailtransport:
添加BCC。一封邮件转到Dovecot,第二封邮件转到脚本。编辑 在main.cf中:
recipient_bcc_maps = hash:/etc/postfix/recipient_bcc_maps
/等/后缀/ recipient_bcc_maps
### postmap /etc/postfix/recipient_bcc_maps
aaaa@11111.xemple.com run_script@example.commm
添加main.cf选项virtual_alias_maps
并从run_script@example.commm重定向邮件goto transpostfix@localhost.localhost
答案 1 :(得分:0)
使用 incron
的/ var /阀芯/ incron:
/var/vmail/22222.xemple.com/aaaa/new IN_MOVED_TO,IN_ONESHOT /sys_my/postfix-mail/checker_postfix-parser.sh
---------------------停止阅读!旧解决方案不好---- 我使用ather程序来做https://github.com/rvoicilas/inotify-tools/wiki#info
服务器:centos 6
脚本 postfix-parser.sh 来测试新信件是否来到文件夹:
#!/bin/bash
###
### sh /sys_my/postfix-mail/postfix-parser.sh
while ((i<=END)); do
EVENT=$(inotifywait --format '%e' /var/vmail/22222.xemple.com/aaaa/new)
if [ "$EVENT" == "CREATE" ]; then
echo $EVENT
let ii++
echo $ii
fi
done
脚本 checker_postfix-parser.sh 检查脚本是否运行:
#!/bin/bash
###
# sh /sys_my/postfix-mail/checker_postfix-parser.sh
result=`ps aux | grep -i "postfix-parser.sh" | grep -v "grep" | wc -l`
if [ $result -ge 1 ]
then
echo "script is running"
else
sh /sys_my/postfix-mail/postfix-parser.sh
fi
添加到启动: 添加以下行:
sh /sys_my/postfix-mail/checker_postfix-parser.sh
归档:
/etc/rc.d/rc.local
每5分钟在cron中运行一次检查:
*/1 * * * * root sh /sys_my/postfix-mail/checker_postfix-parser.sh
答案 2 :(得分:0)
有了鸽舍,您可以使用鸽眼。
这是鸽舍的官方链接: https://wiki2.dovecot.org/Pigeonhole/Sieve/Plugins/Extprograms
它与筛网服务器一起用于过滤邮件,因此您可以轻松选择应将哪些邮件发送到脚本。
玩得开心 Wim
答案 3 :(得分:0)
我发现配置 Dovecot 是一个更优雅的解决方案(而不是配置 Postfix),正如@Wim 建议的那样。步骤如下:
在 mail_processor.py
目录中创建您的脚本(即 /usr/lib/dovecot/sieve-execute/
):
#!/usr/bin/python3
from sys import stdin
with open('/var/log/mail_processor.log', 'a') as logfile:
for line in stdin:
print(line.rstrip(), file=logfile)
确保您的脚本和目标文件具有正确的权限:
$ chmod +rx /usr/lib/dovecot/sieve-execute/mail_processor.py
$ chmod 0777 /var/log/mail_processor.log
启用 sieve_extprograms
插件:
使用以下内容修改 \etc\dovecot\conf.d\90-sieve.conf
的插件部分:
sieve_extensions = +vnd.dovecot.execute
sieve_plugins = sieve_extprograms
sieve_execute_bin_dir = /usr/lib/dovecot/sieve-execute
重新加载 dovecot:
$ service dovecot restart
创建筛滤器(即在 Roundcube 中转到 settings
-> filters
-> actions
-> edit filter set
):
require ["vnd.dovecot.execute"];
# rule:[mail processing]
if true
{
execute :pipe "mail_processor.py";
}
现在使用此筛网过滤器发送到任何邮箱的所有邮件都将通过 mail_processor.py
进行操作。