【问题标题】:Put email multiple folder in case of multiple recipients using procmail如果使用 procmail 有多个收件人,请放置电子邮件多个文件夹
【发布时间】:2012-03-08 12:19:09
【问题描述】:

我打算在家里建立一个电子邮件系统,我订阅了很多邮件列表。电子邮件通过 fetchmail 提取到我的本地计算机并由 procmail 过滤。但是,有一种情况,以我目前的知识是无法解决的。我已经在谷歌上搜索了 2-3 个小时以找到没有任何结果的解决方案。

我想要的是,我收到一封包含多个收件人的电子邮件,我想将此电子邮件复制到不同的文件夹。这是一个例子:

Cc: linux-kernel@vger.kernel.org, kernel-janitors@vger.kernel.org

我想将此电子邮件放入 linux-kernel 和 linux-kernel-janitors 文件夹。 procmail怎么办?

提前致谢!

【问题讨论】:

    标签: procmail


    【解决方案1】:

    您可以使用SWITCHRC= 使 Procmail 在收件人列表中循环,但这是相当骇人听闻的。或者,如果您要处理的文件夹列表有限,您可以单独发送到每个文件夹,如果您至少发送过一次,则丢弃该邮件。

    LASTFOLDER=
    :0c:
    * ^TO_linux-kernel@vger\.kernel\.org\>
    linux-kernel
    :0c:
    * ^TO_kernel-janitors@vger\.kernel\.org\>
    kernel-janitors
    # ... repeat for other addresses you want to multiplex ...
    # If it was delivered, LASTFOLDER will be set
    :0
    * LASTFOLDER ?? .
    /dev/null
    

    如果您在到达此部分之前可能已将其复制到其他收件箱中,则需要将 LASTFOLDER 显式设置为空字符串。否则它不应该是必要的,但我把它留在了以防万一。 (此变量包含消息传递到的最新文件夹的名称。)

    【讨论】:

    • 我第一次尝试回答是相当离谱的,所以我只想指出,如果您在我写完后立即阅读我的回复,您可能想重新访问。对此感到抱歉。
    • 你说得对,这似乎有点骇人听闻,但我认为它可以解决我的问题。我要试一试,我会在这里通知你结果。非常感谢您的帮助!
    【解决方案2】:

    解决方案如下:

    首先,需要一个 If 语句,因为我的 .procmailrc 文件不仅包含内核邮件列表过滤条件。如果匹配,则有另一个条件列表。我想到时候它会更细粒度。

    :0
     * [To|Cc].*vger.kernel.org
       LASTFOLDER=
    
        :0Ac:
        * ^[To|Cc].*linux-janitors@vger.kernel.org
        | DoItSomethingWithIt
    
        :0Ac:
        * ^[To|Cc].*linux-kernel@vger.kernel.org
        | DoItSomethingWithIt2
    
        :0                             
        * LASTFOLDER ?? .
        | DoItSomethingWithIt3
    

    【讨论】:

    • 正则表达式[To|Cc]不正确,它匹配枚举集中To|c中的单个字符(我省略了大写C,因为匹配是大小写-不敏感)。我想你想要我的回复中的特殊宏 ^TO_
    • 哦,对于管道操作,您需要一个命名的锁定文件,或者根本不需要锁定文件。换句话说,无论哪种方式,交付操作的第二个冒号都是错误的。 iki.fi/era/procmail/mini-faq.html#locking
    猜你喜欢
    • 2016-02-08
    • 1970-01-01
    • 2012-05-18
    • 1970-01-01
    • 2014-06-22
    • 2022-01-02
    • 1970-01-01
    相关资源
    最近更新 更多