【问题标题】:How can I configure exim to run a script for each e-mail如何配置 exim 为每封电子邮件运行脚本
【发布时间】:2017-08-30 07:40:01
【问题描述】:

我需要在 exim 下运行一个 shell 脚本,它可以读取每封收到的电子邮件,可选择重写它们,然后继续发送电子邮件。

理想的解决方案类似于 UNIX 管道:

cat *incoming email* | **some-script.sh** | *back to exim processing*

我希望脚本尽早运行,以便例如更改目标地址。

Exim 可以做到这一点吗?如何实现?

【问题讨论】:

    标签: smtp exim exim4


    【解决方案1】:

    您可以使用管道另一侧的脚本创建使用管道传输的路由器:

    begin routers
    preprocessor:
        driver      = accept
        condition   = if{ !eq{$header_X-Preproceeded}{yes}}
        transport   = myscript
        no_more
    
    . . . . .
    
    begin transports
    myscript:
        driver      = pipe
        user        = scriptowner
        command     = /path/to/script --opt1 --opt2
    

    如果传入消息没有X-Preproceeded 标头或其值未设置为yes,则消息将传递到myscript 传输。这是通过管道source | script 执行的,所有消息都传递到脚本的stdin。继续后,如果您想将已处理的消息返回给 exim,则应在消息中添加 x-Preproceeded: yes 标头,以防止将其路由到下一圈。然后你必须通过sendmail 命令提交。

    #!/bin/sh
    . . . . 
    mandatory_empty_line = ''
    cat << ENDOFTEXT | /usr/sbin/sendmail -t
    $headers
    X_Preproceeded: yes
    $mandatory_empty_line
    $message_body
    ENDOFTEXT
    

    请记住,应通过 exim 的配置将有效的用户运行脚本添加到受信任的用户中,以允许从任意地址发送。否则exim 将用scriptowner@mydomain.tld 替换任何发件人的地址

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-26
      • 2019-06-07
      • 2021-10-11
      • 2016-07-25
      • 1970-01-01
      • 1970-01-01
      • 2013-02-17
      相关资源
      最近更新 更多