James的存储方式:文件与数据库
转载:https://blog.csdn.net/Earl_yuan/article/details/50452018
邮件数据存储选择,根据xml来看,提供的有3中数据存储方式:
1.file:// 文件存储
2.db:// 数据库存储
3.dbfile:// 数据文件式存储
默认情况下,James在其james-2.3.2\apps\james\var\users路径下将用户信息以文件形式存储。它还提供了以数据库为存储介质来存储的形式。下面就来说说如何将服务器数据存储到数据库中。
James将各种信息都使用配置文件来进行管理,所以要改变存储介质,我们需要修改james-2.3.2\apps\james\SAR-INF路径下的config.xml这个非常重要的配置文件。找到<users-store>
,这个标签内部管理的是存储介质,如下:
<users-store>
<repository name="LocalUsers" class="org.apache.james.userrepository.UsersFileRepository">
<destination URL="file://var/users/"/>
</repository>
<!--
<repository name="LocalUsers" class="org.apache.james.userrepository.JamesUsersJdbcRepository" destinationURL="db://maildb/users">
<sqlFile>file://conf/sqlResources.xml</sqlFile>
</repository>
</users-store>
-->
将UsersFileRepository内容注释掉,将原本注释掉的JamesUsersJdbcRepository去掉注释。这时我们就将使用文件作为存储介质修改为使用数据库作为存储介质。
配置SPOOL到MySQL数据库
在config.xml找到
<spoolrepository destinationURL="file://var/mail/spool/" type="SPOOL"/>
注释之,添加如下配置
<spoolrepository destinationURL="db://maildb/spool/spool" type="SPOOL"/>
使用数据库就需要配置数据库的连接信息,所以我们还需要修改数据源的配置,这里我们使用的是mysql数据库。还是在config.xml中,找到如下关于mysql的data-source配置,去掉注释,并设置当前数据库连接相关信息。
<data-source name="maildb" class="org.apache.james.util.dbcp.JdbcDataSource">
<driver>com.mysql.jdbc.Driver</driver>
<dburl>jdbc:mysql://127.0.0.1/mail?autoReconnect=true</dburl>
<user>root</user>
<password>123456</password>
<max>20</max>
</data-source>
接下来还需要修改收信邮箱的配置信息,默认依旧是存储在james-2.3.2\apps\james\var\mail\inboxes路径下,所以我们现在需要将其修改为存储到数据表中。依旧是config.xml,找到<inboxRepository>
的配置,如下:
<inboxRepository>
<repository destinationURL="file://var/mail/inboxes/" type="MAIL"/>
</inboxRepository>
<!--
<inboxRepository>
<repository destinationURL="db://maildb/inbox/" type="MAIL"/>
</inboxRepository>
-->
将以文件存储的内容注释掉,将数据库存储的内容去掉注释。
到这里,存储介质的切换就完成了。在数据库中新建数据库mail,重启James,然后使用adduser命令添加用户,再看mail数据库,新建了三张表users,inbox,spool。表users存储的是邮件服务器的用户信息。表inbox存储的是收件箱的内容。表spool存储的是还未查看的邮件,一旦邮件被查看,就会从这张表中删除,转而存储到inbox中。
如果启动James报错,首行是java.lang.ClassNotFoundException: org.gjt.mm.mysql.Driver......说明了没有发现MySQl的数据库驱动。还需要从Apache官方下载MySQL的驱动包我用的是mysql-connector-java-5.1.6-bin.jar将其放到james-2.3.1的lib目录下。