情况:邮件服务器只能访问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的教程,还有关于如何整合这两个教程的教程(这就是我提出的)。
现在,如果我运行fetchmail或fetchmail -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就可以使用它。 作者承诺在不久的将来会提供更多的例子,并且可以提出请求和请求。