日期:2014-05-16  浏览次数:20650 次

james 数据库存储邮件信息

??1. 修改存储方式

打开:C:\james-2.3.2\apps\james\SAR-INF\config.xml

?

注释掉下面文件存储方式:

      <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>
      

?2. 打开数据库配置信息,根据具体数据库类型进行配置,下面已Oracle为例

<data-source name="maildb" class="org.apache.james.util.mordred.JdbcDataSource">  
                           <driver>oracle.jdbc.driver.OracleDriver</driver>  
                            <dburl>jdbc:oracle:thin:@133.64.41.132:1521:IOMTSTDB</dburl>  
                            <user>mail</user>  
                            <password>mail</password>  
                            <max>20</max>  
</data-source> 

?3. 通过telnet localhost 4555 建立一个用户

??? add user lht lht

??? 这里我测试的时候遇到一个问题,总是报表或试图不存在异常,理论上james 执行adduser命令时会自己创建users表。 不知道为什么我这里总是不能自动建立,不过我们可以通过sqlResources.xml 获取创建sql进行手工建立

sql如下:

CREATE  TABLE users 
(username VARCHAR(64) NOT NULL,
 pwdHash VARCHAR(50), pwdAlgorithm VARCHAR(20), 
 useForwarding INTEGER, 
 forwardDestination VARCHAR(255),
  useAlias INTEGER, 
  alias VARCHAR(255),
   PRIMARY KEY(username))

?

命令执行成功后

执行:

?select * from users 可以看到刚建立的用户了。

?

4.? 执行邮件发送

??? 通过上篇的邮件发送程序发送邮件,查看?? select * from INBOX? 表就可以看到发送的邮件信息了。

5. 接收邮件

package com.spring.mail;

import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
import java.io.*;

public class RecieveMail {
	/**
	 *<br>
	 * 方法说明:主方法,接收用户输入的邮箱服务器、用户名和密码 <br>
	 * 输入参数: <br>
	 * 返回类型:
	 */
	public static void main(String args[]) {
		try {
			String popServer = "localhost";
			String popUser = "dove";
			String popPassword = "dove";
			receive(popServer, popUser, popPassword);
		} catch (Exception ex) {
			System.out.println("Usage: java com.lotontech.mail.POPMail"
					+ " popServer popUser popPassword");
		}
		System.exit(0);
	}

	/**
	 *<br>
	 * 方法说明:接收邮件信息 <br>
	 * 输入参数: <br>
	 * 返回类型:
	 */
	public static void receive(String popServer, String popUser,
			String popPassword) {
		Store store = null;
		Folder folder = null;
		try {
			// 获取默认会话
			Properties props = System.getProperties();
			Session session = Session.getDefaultInstance(props, null);
			// 使用POP3会话机制,连接服务器
			store = session.getStore("pop3");
			store.connect(popServer, popUser, popPassword);
			// 获取默认文件夹
			folder = store.getDefaultFolder();
			if (folder == null)
				throw new Exception("No default folder");
			// 如果是收件箱
			folder = folder.getFolder("INBOX");
			if (folder == null)
				throw new Exception("No POP3 INBOX");
			// 使用只读方式打开收件箱
			folder.open(Folder.READ_ONLY);
			// 得到文件夹信息,获取邮件列表
			Message[] msgs = folder.getMessages();
			for (int msgNum = 0; msgNum < msgs.length; msgNum++) {
				printMessage(msgs[msgNum]);
			}
		} catch (Exception ex) {
			ex.printStackTrace();
		} finally {
			// 释放资源
			try {
				if (folder != null)
					folder.close(false);
				if (store != null)
					store.close();
			} catch (Exception ex2) {
				ex2.printStackTrace();
			}
		}
	}

	/**
	 *<br>
	 * 方法说明:打印邮件信息 <br>
	 * 输入参数:Message message 信息对象 <br>
	 * 返回类型:
	 */
	public static void printMessage(Message message) {
		try {
			// 获得发送邮件地址
			String from = ((InternetAddress) message.getFrom()[0])
					.getPersonal();
			if (from == null)
				from = ((InternetAddress) message.getFrom()[0]).getAddre