情况:邮件服务器仅具有 IMAP 访问权限。问题:我希望能够过滤邮件(将一些邮件放入不同的文件夹,将它们标记为已读等等)。
大多数新的电子邮件客户端都具有此功能,但我想要一个独立的过滤程序,因为我需要使用各种电子邮件客户端来连接到该服务器。
一般来说 - 类似于 procmail,但是通过 IMAP 工作。
该软件将在Linux或Solaris上运行。
答案1
快速谷歌搜索IMAP过滤器看起来它做了你想要的:
- 使用 IMAP 协议中的许多可用标准搜索消息,例如:
- 消息的状态(最近、未读等)。
- 消息的大小。
- 消息的年龄。
- 邮件标题或正文中的字符串或正则表达式模式匹配。
- 在搜索消息时能够使用逻辑运算符(和/或/非)。
- 可用于处理消息的不同功能,包括:
- 正在删除消息。
- 将邮件移动到相同或不同服务器的邮箱
- 将邮件复制到同一服务器或不同服务器的邮箱。
- 标记消息或更改消息标志。
- 列出可用和/或已订阅的邮箱,以及对 IMAP CHILDREN 扩展的支持。
- 创建、删除、重命名、订阅或取消订阅邮箱
- 国际化(I18N)支持。
- 使用 IMAP NAMESPACE 扩展的服务器命名空间支持。
- 安全套接字层 (SSL) 或传输层安全性 (TLS) 加密的 imaps (端口 993) 连接。
- 使用 IMAP STARTTLS 扩展的加密连接。
- 使用质询-响应认证机制 (CRAM)(具体来说是 CRAM-MD5)进行用户认证。
- Perl 兼容正则表达式 (PCRE) 支持。
答案2
在 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,或者使用指令将 fetchmail 配置为作为守护进程运行set daemon 600
(.fetchmailrc
其中 600 是轮询之间的秒数)。
答案3
根据您的 IMAP 服务器,您可以简单地使用一些实现筛。我认为对 sieve 最好的支持是由 cyrus 提供的。
答案4
另一种方法是使用 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 知识即可使用它。作者承诺在不久的将来提供更多示例,并接受功能请求和拉取请求。