筛选筛选语言的分析器/求值器(RFC 5228)
sifter的Python项目详细描述
sieve电子邮件过滤语言(rfc 5228)的python实现。
https://github.com/garyp/sifter
功能
- 支持RFC 5228中的所有基本筛规格,除了仍然具有 在下面的“待办事项”下列出
- 支持的扩展:
- 正则表达式(draft-ietf-sieve-regex-01)
示例
import email import sifter.parser rules = sifter.parser.parse_file(open('my_rules.sieve')) msg = email.message_from_file(open('an_email_to_me.eml')) msg_actions = rules.evaluate(msg)
在上面的示例中,msg_actions是要应用于 电子邮件。每个操作是一个元组,由操作名和 特定于操作的参数。这取决于调用者对消息的操作和 基于返回的操作的消息存储。
警告
- 目前还没有考虑到针对恶意用户输入的强化措施。这个 当前的实现是针对运行自己的筛选的用户 剧本。
- 当前的实现没有针对性能进行优化,尽管希望如此 对于正常的输入来说并不太慢。
待办事项
大致按重要性排序:
- 一个示例适配器,它使用筛选提供unix lda行为
- 基本规范功能尚未实现:
- 编码字符(第2.4.2.4节)
- 多线串(第2.4.2节)
- 括号内的注释(第2.3节)
- 消息唯一性(第2.10.3节)
- 信封测试(第5.4节)
- 处理消息循环(第10节)
- 限制滥用重定向操作(第10节)
- 地址测试应将允许的头限制为包含地址的头 (第5.1节)
- 确保字符集实际上是根据规范处理的
- 使字符串解析符合第8.1节中的语法和特性 如第2.4.2节所述
- 检查python的email.message是否实现了相同的头比较 作为筛子规格的方式
- 确保正则表达式实际上是根据扩展名处理的 规格
- 添加对各种扩展的支持:
- 变量(RFC 5229)
- 外部存储列表(草案Melnikov筛外部列表)
- 车身(RFC 5173)
- 关系型(RFC 5231)
- 子地址(RFC 5233)
- 副本(RFC 3894)
- 环境(RFC 5183)
- 日期和索引(RFC 5260)
- 编辑标题(RFC 5293)
- iHave(RFC 5463)
- 邮箱元数据(RFC 5490)
- 通知(RFC 5435)、邮寄通知(RFC 5436)、XMPP 通知(RFC 5437)