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]).getAddress();
			System.out.println("FROM: " + from);
			// 获取主题
			String subject = message.getSubject();
			System.out.println("SUBJECT: " + subject);
			// 获取信息对象
			Part messagePart = message;
			Object content = messagePart.getContent();
			// 附件
			if (content instanceof Multipart) {
				messagePart = ((Multipart) content).getBodyPart(0);
				System.out.println("[ Multipart Message ]");
			}
			// 获取content类型
			String contentType = messagePart.getContentType();
			// 如果邮件内容是纯文本或者是HTML,那么打印出信息
			System.out.println("CONTENT:" + contentType);
			if (contentType.startsWith("text/plain")
					|| contentType.startsWith("text/html")) {
				InputStream is = messagePart.getInputStream();
				BufferedReader reader = new BufferedReader(
						new InputStreamReader(is));
				String thisLine = reader.readLine();
				while (thisLine != null) {
					System.out.println(thisLine);
					thisLine = reader.readLine();
				}
			}
			System.out.println("-------------- END ---------------");
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}
}

 

显示结果:

FROM: VerRanLiu@localhost
SUBJECT: a test mail
CONTENT:text/plain; charset=us-ascii
this is the email content


-------------- END ---------------

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值