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