`
VerRan
  • 浏览: 452533 次
  • 性别: Icon_minigender_1
  • 来自: 陕西.西安
社区版块
存档分类
最新评论

james 数据库存储邮件信息

    博客分类:
  • JAVA
阅读更多

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

 

 

 

分享到:
评论

相关推荐

    Apache James邮件服务器用户信息的数据库存储问题.doc

    Apache James邮件服务器用户信息的数据库存储问题.doc

    james外网配置及使用MYSQL数据库存储邮件内容

    NULL 博文链接:https://xieruilin.iteye.com/blog/1567317

    James+Javamail构建邮件服务

    James提供了比较完善的配置方案,尤其是关于邮件内容存储和用户信息存储部分,可以选择在文件、数据库或其他介质中保存。James性能稳定、可配置性强,还是开源项目,所有源代码不存在版权问题,因此,James在项目中...

    james实现邮件服务器.xls

    james实现邮件服务器 全面讲解安装 配置过程 实现局域网以及外网收发邮件 数据库存储用户及邮件配置等

    jwma (Java Webmail)-开源

    jwma(Java Webmail应用... 它适用于以mbox或maildir格式存储的电子邮件,或存储在derby数据库中的电子邮件; 它已经通过dovecot.james和exim4进行了测试。 有关更多详细信息,请参见http://jwma.sourceforge.net/。

    Mini-CRM:使用Laravel 8构建的Mini-CRM应用程序

    名称(必填),电子邮件,徽标(最小100×100),网站 员工数据库表包含以下字段:名(必填),姓(必填),公司(公司的外键),电子邮件,电话 使用数据库迁移在上面创建那些模式 将公司徽标存储在storage / ...

    base16-connectbot

    感谢 Priyesh Patel 的 connectbot-colors-solarized 存储库: : 安装 您的设备需要植根。 以某种方式将这些 SQL 文件放到你的 android 设备上(复制到 SD 卡,通过电子邮件发送给你自己,不管怎样)。 打开终端...

    JAVA上百实例源码以及开源项目源代码

     通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到张三编码后的公钥,将其解码,李四用张三的公钥加密信息,并发送给李四,张三用自己的私钥解密从李四处收到的信息…… Java利用DES私钥对称加密代码实例 ...

    JAVA上百实例源码以及开源项目

     通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到张三编码后的公钥,将其解码,李四用张三的公钥加密信息,并发送给李四,张三用自己的私钥解密从李四处收到的信息…… Java利用DES私钥对称加密代码实例 ...

    user_sql::locked:应用程序用于使用SQL对Nextcloud用户进行身份验证

    将用户的电子邮件地址与Nextcloud存储的地址同步。 入门 SSH进入您的服务器。 进入Nextcloud安装的apps文件夹,例如/ var / www / nextcloud / apps 。 Git克隆此项目: git clone ...

    java开源包1

    Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...

    java开源包11

    Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...

    java开源包2

    Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...

    java开源包3

    Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...

Global site tag (gtag.js) - Google Analytics