`
weiqingfei
  • 浏览: 315492 次
  • 性别: Icon_minigender_1
  • 来自: 黑洞
社区版块
存档分类
最新评论

Cyrus中如何实现邮件分类。

阅读更多
现在很多的免费邮箱都实现了过滤分类功能,也就是说通过设定,可以让收到的邮件自动归类的指定的目录里。
这种技术,可以在客户端实现,也可以在服务器端实现。
客户端的实现比较简单,只要客户端软件,在收信时进行分类就可以了,但是有一个不好的地方,就是当你更换了客户端时,邮件的分类就全没有了。
服务器端的实现稍微繁琐一些,但是不管在什么地方,使用什么客户端,都能得到分类的邮件,缺点也显而易见,这部分工作由服务器端来做,加重了服务器的负担。

客户端的实现,就不用讲了,只是一个规制编程的事情。

现在以服务器端的Cyrus为例,讲一下服务器端的设置。

Cyrus是Imap服务器,和Pop最大的一个区别就是用户可以在服务器端创建多个目录,并且邮件的状态都是保存在服务器端。
Cyrus使用一种叫sieve script的脚本(参照http://sieve.info/)来对邮件过滤,要使用sieve script必须在启动cyrus的同时启动sieve daemon,当邮件到达cyrus的lmtp daemon时,先取检查sieve daemon的script规则,根据规制然后决定怎么处理邮件。
设置如下:
在/etc/services里追加
sieve           2000/tcp
sieve           2000/udp

在/etc/cyrus.conf里追加
sieve        cmd="/usr/cyrus/bin/timsieved" listen="sieve" prefork=0

重新启动cyrus服务器
kill `cat /var/run/cyrus-master.pid`
/usr/cyrus/bin/master -d


首先用telnet登录sieve服务,看是否正常启动
$ telnet 127.0.0.1 2000
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
"IMPLEMENTATION" "Cyrus timsieved v2.3.8"
"SASL" "NTLM LOGIN PLAIN DIGEST-MD5 CRAM-MD5"
"SIEVE" "comparator-i;ascii-numeric fileinto reject vacation imapflags notify envelope relational regex subaddress copy"
OK



然后使用一个叫sieveshell的工具,可以对sieve服务上的script进行查询,添加,删除,操作,激活等操作。
$ sieveshell -a username localhost
connecting to localhost
Please enter your password:

输入密码後,登录,可以输入help命令查看它的所有命令。
> help
Usage:
  sieveshell [-u username] [-a authname] [-r realm] <server>

help             - this screen
list             - list scripts on server
put <filename> [<target name>]
                 - upload script to server
get <name> [<filename>]
                 - get script. if no filename display to stdout
delete <name>    - delete script.
activate <name>  - set a script as the active script
deactivate       - deactivate all scripts
quit             - quit


写一个简单的sieve script,然后使用put命令上传导sieve服务器上,
require "fileinto";

if header:contains "from" "wei" {
        fileinto "INBOX.TRASH";
} else {
        fileinto "INBOX";
}

这段代码的意思是,如果from头里包含wei这个字符串的话,就放入导INBOX.TRASH目录里,否则就放到INBOX目录里。

当目录不存在时,lmtp会自动把邮件转到默认的“INBOX”目录里

使用sieveshell只能手工这样对sieve script进行操作,如果做了一个邮件的web app,可以让用户自己来定制规则的话,就不能用这种方法了。
其实sieveshell是使用的一种叫“managesieve”的协议(参看:http://tools.ietf.org/html/draft-martin-managesieve-07)和sieve服务器进行通讯的,只要通过这个协议,就可以用程序来对sieve服务器上的sieve script来进行管理了。

提供这种协议通讯的java包,我只找到一个,gatorsieve:http://gatorsieve.svn.sourceforge.net/viewvc/gatorsieve/
由于这种协议非常简单,并且sieve script的语法也不复杂,所以完全可以在程序中,根据用户的设定,组织好sieve script,然后通过managesieve协议上传导sieve服务器上,这样就可以实现用户的个人定制了。
分享到:
评论

相关推荐

    cyrus-sasl-2.1.23

    2. **Cyrus SASL**:作为实现SASL框架的一个库,Cyrus SASL被广泛用于邮件服务器、IMAP、SMTP等网络服务,提供了灵活的认证机制。它的设计目标是可插拔,这意味着它可以轻松地添加或移除支持的认证方法。 3. **版本...

    cyrus-sasl-2.1.21.tar.gz

    Cyrus SASL 2.1.21是该库的一个特定版本,用于增强邮件系统中的安全性能,特别是对于Postfix这样的邮件服务器来说,它是不可或缺的一部分。 Postfix是一款广泛使用的开源MTA(Mail Transfer Agent),处理电子邮件...

    Cyrus-Beck算法课程设计及源码

    Cyrus-Beck算法是一种在计算机图形学中用于实现抗锯齿的细分曲线算法,特别是在二维光栅化渲染中非常关键。这个算法由Cyrus Beck在1970年提出,它解决了Bézier曲线和样条曲线在屏幕空间中平滑显示的问题,尤其是在...

    cyrus-sasl-2.1.22.tar.gz

    Cyrus SASL 2.1.22 是一个用于实现简单认证与安全层(SASL)协议的开源库,广泛应用于邮件系统和其他需要安全身份验证的服务中。SASL 是一种标准化的认证框架,它允许应用程序在传输层之上添加身份验证功能,支持...

    Postfix + Cyrus-IMAP + Cyrus-SASL + MySQL + IMP 完全指南

    该系统包含Postfix作为SMTP服务器,Cyrus-IMAP作为POP3/IMAP4服务器,通过Cyrus-SASL对存储在MySQL数据库中的用户进行身份验证和授权,并使用IMP提供一个功能完善的Webmail界面。这套方案的目标是构建一个可扩展性强...

    Cyrus_Beck多边形窗口裁剪

    Cyrus_Beck算法是一种在计算机图形学中用于实现多边形窗口裁剪的经典算法。这个算法由Cyrus Beck在1970年提出,解决了如何将一个多边形与一个矩形窗口进行交互的问题,即判断多边形哪些部分位于窗口内,哪些部分在...

    cyrus-sasl-2.1.22 源码,使用VS2005编译,支持w32以及x64版本

    总的来说,Cyrus SASL 2.1.22 的源码提供了一个强大的安全认证解决方案,通过VS2005编译和调试,开发者可以在Windows环境中方便地集成和定制SASL功能。无论是为了学习、研究还是实际项目开发,这份源码都提供了宝贵...

    Cyrus IMAP Server的四个漏洞分析

    Cyrus IMAP Server是广泛使用的邮件服务器软件,它允许用户通过IMAP协议访问和管理邮件。然而,Stefan Esser发现的四个安全漏洞,尤其是IMAPMAGICPLUS预验证远程缓冲区溢出漏洞,对系统的安全性构成了重大威胁。 1....

    Cyrus ImspV1.1

    一个支持发送imsp邮件的类 这个版本为V1.1版 较上个版本增加的功能有: 存取imsp目录的功能 修改了上个版本的一些BUG. 这个Class可以通过PHP4来对imsp服务器进行交互,更多关于IMSP的介绍可以参考...

    cyrus-sasl-2.1.23-13.el6.i686.rpm

    cyrus-sasl-2.1.23-13.el6.i686.rpm

    cyrus-imapd:Cyrus IMAP是电子邮件,联系人和日历服务器

    Cyrus IMAP服务器与其他IMAP服务器实现的不同之处在于,它通常旨在在不允许正常用户登录的“密封”服务器上运行。邮箱数据库存储在文件系统中对服务器专用的部分中。赛勒斯IMAP系统。 所有用户对邮件的访问都是通过...

    OpenGL Cyrus-Beck 算法截取射线

    OpenGL Cyrus-Beck 算法截取射线 OpenGL Cyrus-Beck 算法截取射线 OpenGL Cyrus-Beck 算法截取射线 OpenGL Cyrus-Beck 算法截取射线 OpenGL Cyrus-Beck 算法截取射线 OpenGL Cyrus-Beck 算法截取射线 OpenGL Cyrus-...

    cyrus-sasl-devel-2.1.23-13.el6.i686.rpm

    cyrus-sasl-devel-2.1.23-13.el6.i686.rpm

    cyrus-sasl-2.1.25.tar.gz

    Cyrus SASL 对于任何需要在网络协议中实现安全身份验证的服务来说都是至关重要的。正确地集成和配置它可以显著提高系统的安全性,防止未授权访问和数据泄露。同时,保持库的更新也很重要,以应对不断出现的安全威胁...

    开源项目-cyrus-and-gdb.zip

    开源项目“cyrus-and-gdb.zip”是一个专注于Go语言调试工具GDB的实现,它提供了GDB/MI(GDB Machine Interface)接口。GDB是GNU项目的一个关键部分,是一个强大的源代码级调试器,支持多种编程语言,包括C、C++、...

    Cyrus开源3D打印机图纸

    标题 "Cyrus开源3D打印机图纸" 涉及的知识点主要集中在3D打印技术和开源硬件领域。Cyrus开源3D打印机是一款基于开放源代码理念设计的3D打印设备,用户可以自由访问其设计文件,进行学习、修改或复制。这样的项目鼓励...

    cyrus-sasl-plain-2.1.26-20

    cyrus-sasl-plain-2.1.26-20,用于安装sasl。

Global site tag (gtag.js) - Google Analytics