有关james邮件服务器中的问题
悬赏:25 发布时间:2008-07-01 提问人:dugang (初级程序员)
最近做一个项目,采用了james邮件服务器,实现的一个功能是每次登录系统的时候读取用户的邮件信息,将邮件信息存储到自己创建的表中,然后从该表中读取邮件信息,显示给用户。以前是采用javamail的方式来读取,发现速度很慢。为了解决这个问题,打算采用直接读取james的表的方式,james可以将自身的表导入到数据库中,邮件信息表是inbox,但是inbox表的邮件信息将邮件的主题及内容和附件存到了message_body字段中,如何能读取inbox表中的邮件信息呢,并将主题及内容和附件分离开,请指教。
该问题已经关闭: 超过15天由系统自动关闭,悬赏平分给所有参与回答的会员
该问题已经关闭: 超过15天由系统自动关闭,悬赏平分给所有参与回答的会员
回答
除非你对james表的message_body有足够的了解,否则建议你还是不要去直接读取其中的数据。有可能你读取数据的时候james正在往message_body写数据呢。
llade (资深程序员) 2008-07-02
正确的做法是使用mailet api写一个自己的mailet,由这个mailet处理经过的邮件并把邮件放到你自己的table里面,打开james.sar里面的SAR-INF\config.xml进行设置。在james.sar的lib里面加上自己的jar。
在此处加上自己的mailet包名,
在root processor里加上自己的mailet。matcher使用哪个视你需要匹配什么而定,通常使用All即可。
这样经过的邮件都会被存到你自己的表里,你原来的那个办法只是在用户登录时直接用javamail读取邮件然后放到自己的表里,用户登录到收到邮件这个过程当然很慢,如果直接在james里侦听经过的邮件并存到自己的表里,那用户根本就不会感觉到收邮件的过程。原来的代码只要把JAVAMAIL那段去掉就行,什么都不用改。
mailet的写法可以参照james自己的java代码,反正它是开源的嘛。
在此处加上自己的mailet包名,
<mailetpackages>
<mailetpackage>org.apache.james.transport.mailets</mailetpackage>
<mailetpackage>org.apache.james.transport.mailets.smime</mailetpackage>
</mailetpackages>
在root processor里加上自己的mailet。matcher使用哪个视你需要匹配什么而定,通常使用All即可。
<mailet match="All" class="YourProcessor"> </mailet>
这样经过的邮件都会被存到你自己的表里,你原来的那个办法只是在用户登录时直接用javamail读取邮件然后放到自己的表里,用户登录到收到邮件这个过程当然很慢,如果直接在james里侦听经过的邮件并存到自己的表里,那用户根本就不会感觉到收邮件的过程。原来的代码只要把JAVAMAIL那段去掉就行,什么都不用改。
mailet的写法可以参照james自己的java代码,反正它是开源的嘛。
llade (资深程序员) 2008-07-02




