当postfix / dovecot获取新邮件时运行脚本

时间:2014-12-01 14:17:24

标签: bash email postfix-mta dovecot

我有:

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

4 个答案:

答案 0 :(得分:2)

使用后缀传输!

  1. 添加将运行命令的用户 transpostfix

  2. 添加到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
    
  3. 将main.cf链接添加到传输文件

    transport_maps = hash:/etc/postfix/transport
    
  4. 编辑传输文件并运行postmap

    #   postmap /etc/postfix/transport
    transpostfix@localhost.localhost    emailtransport:
    
  5. 添加BCC。一封邮件转到Dovecot,第二封邮件转到脚本。编辑 在main.cf中:

    recipient_bcc_maps = hash:/etc/postfix/recipient_bcc_maps
    
  6. /等/后缀/ recipient_bcc_maps

    ###    postmap /etc/postfix/recipient_bcc_maps
    aaaa@11111.xemple.com run_script@example.commm
    
  7. 添加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 建议的那样。步骤如下:

  1. 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
      
  2. 启用 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
      
  3. 创建筛滤器(即在 Roundcube 中转到 settings -> filters -> actions -> edit filter set):

    require ["vnd.dovecot.execute"];
    # rule:[mail processing]
    if true
    {
        execute :pipe "mail_processor.py";
    }
    

现在使用此筛网过滤器发送到任何邮箱的所有邮件都将通过 mail_processor.py 进行操作。

Pigeonhole Sieve: Extprograms Plugin 参考文档