1 Javamail的高级应用
1.1 用Javamail实现对邮件的查找
在邮件的高级应用中,当遇到某个帐户中的邮件数非常多的时候,而用户往往只需要对其中的某几封邮件进行处理。倘若要把所有的邮件都取出来,再进行对应信息的判断提取,这无疑将大大加重邮件服务器的负担。为了改善这种状况,Javamail内部提供了一个专门用于邮件查找的包:javax.mail.search。这个包将通过对SearchTerm对象进行设置,而后提交给服务器,服务器端有相应的过滤器,根据SearchTerm对象的设置将邮件过滤的结果传回给客户端。以提高工作效率,减轻服务器端负担。下面就让我们一起来做一个例子说明一下我们应该如何使用search这个包吧。
1.1.1 业务描述
编写一个类,实现对helloworld@dascomyun.cn邮件中邮件的条件搜索功能。在本例中实现对主题中包含“测试”,发件人是accidentaly@dascomyun.cn,的邮件的搜索。
1.1.2 SearchMail.java编码实现
本例只展示如何使用Javamail的Search包实现对邮件的搜索功能,在实际应用中,Search包中还存在许多功能相当完备的API,若对这部分内容有兴趣可自行参考Javamail API。
API明细:/javamail-1.4.1/docs/javadocs/javax/mail/search/package-frame.html
值得注意的是,James的用户密码使用的是SHA单向加密算法,若需添加用户或对用户密码进行修改,则会遇到SHA的加密问题。我们应该如何来解决这个问题呢?查看James的源码中org.apache.james.userrepository包中的DefaultUser.java文件,我们可以发现,James中提供verifyPassword()和setPassword()两个方法,verifyPassword()是用来做密码认证的,而setPassword()则是用来实现密码转换的,即将明文密码转换成密文。通过仔细研究这两个方法,可以很容易地实现将自己的密码进行SHA加密了。
2.2 通过操作数据库实现用户信息操作
通过前面文章介绍的将James的用户信息配置到数据库中使用,但会存在SHA加密的问题,在这一节里,我们将讨论如何来解决这个问题,从而真正实现通过操作数据库来操作James服务器的用户信息。
2.2.1 业务描述
本例是基于前面章节“将用户信息配置为数据库存储方式”后,通过操作数据库,即:对数据库的信息进行增、删、查、改等操作。本例只实现用户信息的添加,关键在于使用James源码包中提供的SHA加密算法实现用户密码的加密,其余功能跟一般数据库操作无异,故不赘述。
2.2.2 编码实现
用户添加类:AddUserByDB.java
构造并执行SQL语句,关键在DigestUtil.digestString("881213", "SHA"),实现对密码的SHA加密
注:用户信息的后四个属性需要使用('SHA',0,NULL,0,null)此四个默认值,若用错,则新建用户可能不能使用
上述程序成功运行后,系统将在数据库添加一条hello用户的记录,那么我们应该如何测试此用户是否真正创建成功并可使用呢?方法有很多,可以使用前面所述的,通过Telnet命令中的listusers来查看,当然,同样也可以使用Foxmail将此用户添加进去,帐户能正常接收到Foxmail发送的邮件即表明此用户可正常使用了。
在此例子编写的过程中要注意以下两点:1、用户信息的后四个属性需要使用('SHA',0,NULL,0,null)此四个默认值,若用错,则新建用户可能不能使用;2、在程序运行过程中,需要使用到james-2.3.1.jar包和相应的数据库驱动包,在程序运行前请确保这些包已添加到相关的位置。
这里收件箱和发件箱还是用文件存储的,如果你需要检索,你可以再设置为mysql存储
找到<inboxRepository>这一项,此面默认的内容为注释掉
<inboxRepository>
<repository destinationURL="file://var/mail/inboxes/" type="MAIL"/>
</inboxRepository>
找到下面内容去掉注释
<inboxRepository>
<repository destinationURL="db://maildb/inbox/" type="MAIL"/>
</inboxRepository>
网友评论