客户端筛选库

sievelib的Python项目详细描述


traviscodecovlatest-version

用python编写的客户端sieve和managesieve库。

  • sieve:一种电子邮件过滤语言 (RFC 5228
  • managesieve:一种远程管理sieve脚本的协议 (RFC 5804

安装

从pypi安装sievelib

pip install sievelib

从git安装sievelib:

git clone git@github.com:tonioo/sievelib.git
cd sievelib
python ./setup.py install

筛子工具

支持的内容

目前,提供的解析器支持大多数功能 在RFC中描述。唯一的例外是 2.4.2.4。使用“编码字符”编码字符 支持。

还支持以下扩展:

扩展解析器

可以通过添加新的受支持的 命令。例如:

import sievelib

class MyCommand(sievelib.commands.ActionCommand):
    args_definition = [
        {"name": "testtag",
            "type": ["tag"],
            "write_tag": True,
            "values": [":testtag"],
            "extra_arg": {"type": "number",
                          "required": False},
            "required": False},
        {"name": "recipients",
            "type": ["string", "stringlist"],
            "required": True}
    ]

sievelib.commands.add_commands(MyCommand)

基本用法

解析器可以从命令行使用:

$ cd sievelib
$ python parser.py test.sieve
Syntax OK
$

或者可以从python环境(或脚本/模块)中使用:

>>> from sievelib.parser import Parser
>>> p = Parser()
>>> p.parse('require ["fileinto"];')
True
>>> p.dump()
require (type: control)
    ["fileinto"]
>>>
>>> p.parse('require ["fileinto"]')
False
>>> p.error
'line 1: parsing error: end of script reached while semicolon expected'
>>>

简单过滤器创建

有些高级类提供了factory模块,它们 简化筛选规则的生成:

>>> from sievelib.factory import FiltersSet
>>> fs = FiltersSet("test")
>>> fs.addfilter("rule1",
...              [("Sender", ":is", "toto@toto.com"),],
...              [("fileinto", "Toto"),])
>>> fs.tosieve()
require ["fileinto"];

# Filter: rule1
if anyof (header :is "Sender" "toto@toto.com") {
    fileinto "Toto";
}
>>>

源代码中提供了其他文档。

管理筛选工具

支持的内容

支持所有强制命令。RENAME扩展名是 支持,对于不支持 它。

对于AUTHENTICATE命令,支持的机制是DIGEST-MD5PLAINLOGIN

基本用法

managesieve客户端打算从另一个python中使用 应用程序(没有提供任何shell):

>>> from sievelib.managesieve import Client
>>> c = Client("server.example.com")
>>> c.connect("user", "password", starttls=False, authmech="DIGEST-MD5")
True
>>> c.listscripts()
("active_script", ["script1", "script2"])
>>> c.setactive("script1")
True
>>> c.havespace("script3", 45)
True
>>>

源代码中提供了其他文档。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java在AlertDialog builder标题右侧放置图标   安装weblogic server12时发生java获取错误。1在windows 10上   java无法导入:安卓。支持v7。小装置。Android Studio中的RecyclerView   java Android应用程序等待通知奇怪行为   java如何比较ArrayList中的整数元素?   java Quartz属性不会触发Quartz作业   java轻松地将许多JavaFX属性绑定到UINode   Maven插件管理器导致java错误消息的原因是什么?   JAXB解组错误后java文件被阻止   java如何在spark kafka流中创建消费者组并将消费者分配给消费者组   java Gps lat&long随机显示非常不准确的结果   java使用assest文件夹文件在Android上执行shell命令   java如何在客户端使用javascript提取文本   java扩展描述的distincts之和   java重写默认Spring数据REST配置   java SQL未命名参数语法   二进制搜索任务的java真实解决方案   java在一个多模块多数据源项目中,用什么正确的方式来指示将哪个数据源注入我的DAOs?