美文网首页
James+Javamail构建邮箱服务(二)

James+Javamail构建邮箱服务(二)

作者: Accidentalyf | 来源:发表于2018-07-01 21:42 被阅读0次

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>

     

相关文章

  • James+Javamail构建邮箱服务(二)

    1 Javamail的高级应用 1.1 用Javamail实现对邮件的查找 在邮件的高级应用中,当遇到某个帐户中的...

  • James+Javamail构建邮箱服务(一)

    1 电子邮件是如何工作的? 原则上,电子邮件很简单.使用邮件用户代理(MUA)。MUA有多种形式,包括基于文本的...

  • 使用python3发送163邮件

    1.登录163邮箱开启SMTP服务 开启服务后复制登录密码和服务器地址 2.构建python代码

  • email邮件服务

    email邮箱服务创建步骤 引入 application.yml qq邮箱配置 邮箱服务接口 邮箱服务实现 测试 ...

  • sentry 本地服务搭建

    解决sentry异常服务本地搭建问题 克隆仓库 配置邮箱和key 开始构建 点击头像 > admin > mai...

  • Laravel 自带SMTP配置邮件服务

    开启邮箱服务 要使用邮箱服务就必须开启邮箱的 POP3 服务和 SMTP 服务,本教程演示 QQ邮箱的配置 登录你...

  • 利用Jenkins自带的邮件服务实现构建后邮件发送

    系统设置 163邮箱配置 Jenkins有自带的构建后发邮件的服务,只需要配置就好。Jenkins需要Java环境...

  • Ubuntu部署GitLab

    一、安装并配置必要的依赖项 二、安装邮箱服务 如果不需要配置邮箱服务,该步骤可跳过 三、添加 Gitlab 软件包...

  • 邮箱服务

    邮件服务 参考: laval官网https://laravel.com/docs/5.1/maillaravel学...

  • 集团邮箱切换通知

    本文重点 原邮箱服务切换至 腾讯企业邮箱 原邮箱 停止服务时间2017年3月24日18时 新邮箱服务 启用时间20...

网友评论

      本文标题:James+Javamail构建邮箱服务(二)

      本文链接:https://www.haomeiwen.com/subject/dxphuftx.html