情况:仅具有IMAP访问的邮件服务器。问题:我希望能够过滤邮件(将一些邮件放入各个文件夹,将其标记为已读,等等)。
大多数新的电子邮件客户端都具有此功能,但是我需要一个独立的筛选程序,因为我需要使用各种电子邮件客户端来连接到该服务器。
通常-类似于procmail,但通过IMAP进行工作。
该软件将在Linux或Solaris上运行。
情况:仅具有IMAP访问的邮件服务器。问题:我希望能够过滤邮件(将一些邮件放入各个文件夹,将其标记为已读,等等)。
大多数新的电子邮件客户端都具有此功能,但是我需要一个独立的筛选程序,因为我需要使用各种电子邮件客户端来连接到该服务器。
通常-类似于procmail,但通过IMAP进行工作。
该软件将在Linux或Solaris上运行。
Answers:
一个快速的谷歌抛出了IMAPFilter,它看起来像您想要的:
- 使用IMAP协议中的许多可用条件来搜索消息,例如:
- 消息的状态(最近,未读等)。
- 消息的大小。
- 消息的年龄。
- 消息标题或正文中字符串或正则表达式模式的匹配。
- 能够在搜索消息时使用逻辑运算符(和/或/不)。
- 可用于处理消息的不同功能,包括:
- 删除邮件。
- 将邮件移动到相同或不同服务器中的邮箱
- 将邮件复制到相同或不同服务器中的邮箱。
- 标记消息或更改消息标志。
- 可用和/或已订阅邮箱的列表,以及对IMAP CHILDREN扩展的支持。
- 创建,删除,重命名,订阅或取消订阅邮箱
- 国际化(I18N)支持。
- 使用IMAP NAMESPACE扩展名的服务器名称空间支持。
- 安全套接字层(SSL)或传输层安全性(TLS)加密的imaps(端口993)连接。
- 使用IMAP STARTTLS扩展名的加密连接。
- 使用质询-响应认证机制(CRAM),特别是CRAM-MD5进行用户认证。
- Perl兼容正则表达式(PCRE)支持。
正如您已经提到的,procmail是执行此操作的正确方法,因此您可以询问您的电子邮件提供商是否支持它,以防万一-不会造成伤害。
否则,也许最简单的方法是始终打开一个进行排序等操作的电子邮件客户端。过去,存在多个客户端访问同一IMAP邮箱的锁定问题,但几年来我还没有看到这些问题。
还有另一种方法是使用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的,但是您不需要了解很多Ruby就可以使用它。作者承诺在不久的将来提供更多示例,并接受功能请求和请求请求。
在Linux和Unix操作系统上,您可以fetchmail
用来轮询IMAP电子邮件帐户,并将任何新消息传递给procmail
。您可以将procmail配置为基于收到的消息中的正则表达式模式匹配来运行脚本。
为此,您需要安装fetchmail和procmail软件包。以下配置使我可以为电子邮件帐户中收到的每个新电子邮件运行脚本。我使用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,或使用set daemon 600
指令.fetchmailrc
(其中600是两次轮询之间的秒数)将fetchmail配置为作为守护程序运行。