有没有一种方法来过滤远程IMAP帐户中的邮件?

情况:邮件服务器只能访问IMAP。 问题:我希望能够过滤邮件(将一些邮件放在不同的文件夹中,将它们标记为已读等等)。

大多数新的电子邮件客户端有这种能力,但我想要一个独立的过滤程序,因为我需要使用各种电子邮件客户端连接到此服务器。

通常 – 像procmail,但在IMAP工作。

该软件将在Linux或Solaris上运行。

快速谷歌引发IMAPFilter看起来像它做你想要的:

  • 使用IMAP协议中的许多可用标准来search消息,例如:
    • 消息的状态(最近的,未读的等)。
    • 消息的大小。
    • 消息的年龄。
    • 匹配邮件头或邮件正文中的string或正则expression式模式。
  • 能够在search消息时使用逻辑运算符(和/或/不)。
  • 可用于处理消息的不同function包括:
    • 删除邮件。
    • 将邮件移动到相同或不同服务器中的邮箱
    • 将邮件复制到相同或不同服务器中的邮箱。
    • 标记消息或更改消息标志。
  • 列出可用和/或订阅的邮箱,以及对IMAP CHILDREN扩展的支持。
  • 创build,删除,重命名,订阅或取消订阅邮箱
  • 国际化(I18N)支持。
  • 服务器名称空间支持使用IMAP NAMESPACE扩展名。
  • 安全套接字层(SSL)或传输层安全(TLS)encryption的imaps(端口993)连接。
  • 使用IMAP STARTTLS扩展的encryption连接。
  • 使用质询 – 响应authentication机制(CRAM)的用户authentication,特别是CRAM-MD5。
  • Perl兼容正则expression式(PCRE)支持。

根据您的IMAP服务器,您可以简单地使用一些sieve的实现。 我认为筛选的最好的支持是由cyrus提供的。

正如你已经提到的,procmail是正确的方式,所以你可以问你的电子邮件提供商,如果他们支持,以防万一 – 不伤害。

否则,也许最简单的方法是有一个电子邮件客户端总是打开sorting等。曾经是多个客户端访问相同的IMAP邮箱的locking问题,但我没有看到这些年。

对于纯粹的轻量级,你可以试一试。

在Linux和Unix操作系统上,您可以使用fetchmail来查询您的IMAP电子邮件帐户,并将任何新消息传递给procmail 。 您可以将procmailconfiguration为基于接收到的消息中的正则expression式模式匹配来运行脚本。

为此,您需要安装fetchmail和procmail软件包。 以下configuration允许我运行一个脚本,以便在我的电子邮件帐户中收到每个新的电子邮件。 我使用Ubuntu 12.04 LTS。

~/.fetchmailrc

 # .fetchmailrc checks my e-mail account for new messages, sends them to procmail set logfile /home/myusername/fetchmail.log poll mail.domain.com protocol IMAP user "emailaccountname" password 'emailpassword' folder 'INBOX' keep ssl mda "/usr/bin/procmail -f %F" 

请注意上面的keep指令,它确保消息在检索后不会从IMAP服务器中删除。

~/.procmailrc

 # .procmailrc received e-mails from fetchmail and runs a script PATH=/usr/bin:/usr/local/bin LOGFILE=/home/username/procmail.log SHELL=/bin/sh # This rule triggers for every e-mail message: :0 | `/home/username/myscript.sh` 

网上有很多关于fetchmail和procmail的教程,还有关于如何整合这两个教程的教程(这就是我提出的)。

现在,如果我运行fetchmailfetchmail -v脚本/home/username/myscript.sh为每个新邮件运行一次。 我可以在cron中运行fetchmail,或者configurationfetchmail作为守护进程,在.fetchmailrc set daemon 600指令(其中600是轮询之间的秒数)。

还有一种方法是使用ruby gem imap-filter。

https://github.com/flajann2/imap-filter/blob/master/README.org

而DSL的例子,

https://github.com/flajann2/imap-filter/blob/master/examples/default.imap

DSL是基于Ruby的,但是你不需要知道多lessRuby就可以使用它。 作者承诺在不久的将来会提供更多的例子,并且可以提出请求和请求。