`
avery_leo
  • 浏览: 388366 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

James学习笔记

    博客分类:
  • JAVA
阅读更多

 Apache James 简称 James, 是 Java Apache Mail Enterprise Server的缩写。James 是100%基于Java的电子邮件服务器。它是一种独立的邮件服务器,并提供了一个完整的电子邮件解决方案,用来收、发电子邮件。

 

James2.3.1下载(文后提供下载)

javamail-1_4_1.zip(文后提供下载)

 

启动 James 服务器

      

 双击\james-2.3.1\bin 目录下的 run.bat文件,即可启动 James 服务器。

 

控制台显示如下:

Using PHOENIX_HOME:   F:\项目\James\james-2.3.1rc1
Using PHOENIX_TMPDIR: F:\项目\James\james-2.3.1rc1\temp
Using JAVA_HOME:      C:\Program Files\Java\jdk1.6.0_03

Phoenix 4.2

James Mail Server 2.3.1rc1
Remote Manager Service started plain:4555
POP3 Service started plain:110
SMTP Service started plain:25
NNTP Service started plain:119
FetchMail Disabled

 

 

启动成功。关闭Ctrl + C

 

说明:启动前请确保您的JDK环境变量如JAVA_HOME等已经设置好;James 启动时,其SMTP 服务默认在 25 端口启动,POP3 服务默认在 110 端口启动, NNTP 服务默认在 119 端口启动, 请确保这些端口未被占用。

 

服务配置:

 

打开F:\项目\James\james-2.3.1rc1\apps\james\SAR-INF 下的 config.xml 文件,初次启动James之前,不会有这个文件,只有当James服务启动一次之后才自动构件该文件。

 

需要修改的地方:

 

Java代码 复制代码
  1. ……    
  2. <postmaster>Postmaster@localhost</postmaster>    
  3. ……    
  4. <servernames autodetect="true" autodetectIP="true">    
  5.     <servername>localhost</servername>    
  6. </servernames>    
  7. ……   
…… 
<postmaster>Postmaster@localhost</postmaster> 
…… 
<servernames autodetect="true" autodetectIP="true"> 
	<servername>localhost</servername> 
</servernames> 
…… 

  

  

        把localhost该成你自己想要的邮箱域名, 把自动探测IP属性设置为“false”这里假设改成 lixiaobo.com 如果开了一个帐号 leo ,那么他的邮件地址就是 leo@lixiaobo.com (^_^)修改结果如下:

 

Xml代码 复制代码
  1. ……    
  2. <postmaster>Postmaster@lixiaobo.com</postmaster>    
  3. ……    
  4. <servernames autodetect="false" autodetectIP="false">    
  5.     <servername>lixiaobo.com</servername>    
  6. </servernames>    
  7. ……  
…… 
<postmaster>Postmaster@lixiaobo.com</postmaster> 
…… 
<servernames autodetect="false" autodetectIP="false"> 
	<servername>lixiaobo.com</servername> 
</servernames> 
……

   

        找到

Xml代码 复制代码
  1. <mailet match="RemoteAddrNotInNetwork=127.0.0.1" class="ToProcessor">    
  2.     <processor> relay-denied </processor>    
  3.     <notice>550 - Requested action not taken: relaying denied</notice>    
  4. </mailet>  
<mailet match="RemoteAddrNotInNetwork=127.0.0.1" class="ToProcessor"> 
	<processor> relay-denied </processor> 
	<notice>550 - Requested action not taken: relaying denied</notice> 
</mailet>

   

        将其注释,结果如下:

Xml代码 复制代码
  1. <!--mailet match="RemoteAddrNotInNetwork=127.0.0.1" class="ToProcessor">    
  2.     <processor> relay-denied </processor>    
  3.     <notice>550 - Requested action not taken: relaying denied</notice>    
  4. </mailet-->  
<!--mailet match="RemoteAddrNotInNetwork=127.0.0.1" class="ToProcessor"> 
	<processor> relay-denied </processor> 
	<notice>550 - Requested action not taken: relaying denied</notice> 
</mailet-->

    

         找到下面元素,去掉其注释

Xml代码 复制代码
  1. <authRequired>true</authRequired>  
<authRequired>true</authRequired>

  

 

         这样邮箱访问需要帐号验证,你不希望别人用你的帐号收发消息吧……^_^

        

         如此,James服务配置已经完成。

 

 

        6。创建邮件帐号

        创建邮件帐号后,就可以用来收发邮件了。James的账号管理是通过基于Telnet客户机的远程管理器,这点颇为不爽,尤其是我的操作系统下的命令行控制台是不显示telnet命令输入字符的,经常出错。

 

        现在进入命令行控制台,在telnet localhsot 4555 进入James管理器,操作如下:

 复制代码
  1. C:\Documents and Settings>telnet localhost 4555   
C:\Documents and Settings>telnet localhost 4555 

  

 

        将进入

 复制代码
  1. JAMES Remote Administration Tool 2.3.1 Please enter your login and password Login id:  
JAMES Remote Administration Tool 2.3.1 Please enter your login and password Login id:

   

 

        默认的登陆id 为root 密码也为 root ,登陆成功后结果如下:

 复制代码
  1. JAMES Remote Administration Tool 2.3.1    
  2. Please enter your login and password    
  3. Login id:    
  4. Password:    
  5. Welcome root. HELP for a list of commands    
JAMES Remote Administration Tool 2.3.1 
Please enter your login and password 
Login id: 
Password: 
Welcome root. HELP for a list of commands  

 

       创建新用户的命令是:adduser username password

    这里创建了两个账户来作为演示使用: leo/123,crb/123

 

代码示例:

 

 

import java.io.IOException;
import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeUtility;

public class HelloJMail {
	
	//发送邮件
	public static void sendMail() {
		//String host = "192.168.10.191"; // 指定的smtp服务器,本机的局域网IP
//		String host = "localhost"; // 本机smtp服务器
		String host = "smtp.163.com"; // 163的smtp服务器
		String from = "leo@lixiaobo.com"; // 邮件发送人的邮件地址
//		String to = "crb@lixiaobo.com"; // 内网邮件接收人的邮件地址
		String to = "lixiaobo618@163.com"; // 外网邮件接收人的邮件地址
		final String username = "leo";  //发件人的邮件帐户
		final String password = "123";   //发件人的邮件密码

		// 创建Properties 对象
		Properties props = System.getProperties();

		// 添加smtp服务器属性
		props.put("mail.smtp.host", host);
		props.put("mail.smtp.auth", "true");

		// 创建邮件会话
		Session session = Session.getDefaultInstance(props, new Authenticator(){
			@Override
			public PasswordAuthentication getPasswordAuthentication() {
				return new PasswordAuthentication(username, password);
			}
			
		});

		try {
			// 定义邮件信息
			MimeMessage message = new MimeMessage(session);
			message.setFrom(new InternetAddress(from));
			message.addRecipient(Message.RecipientType.TO, new InternetAddress(
					to));
			//message.setSubject(transferChinese("我有自己的邮件服务器了"));
			message.setSubject("I hava my own mail server");
			message.setText("From now, you have your own mail server, congratulation!");

			// 发送消息
			session.getTransport("smtp").send(message);  
			//Transport.send(message); //也可以这样创建Transport对象发送
			System.out.println("SendMail Process Over!");

		} catch (MessagingException e) {
			e.printStackTrace();
		}
	}
	
	//接受邮件
	public static void getMail(){
		String host = "localhost";
	    final String username = "crb";
		final String password = "123";

		// 创建Properties 对象
	    Properties props = new Properties();

		// 创建邮件会话
		Session session = Session.getDefaultInstance(props, new Authenticator(){
			@Override
			public PasswordAuthentication getPasswordAuthentication() {
				return new PasswordAuthentication(username, password);
			}
			
		});

	    
		try {
			// 获取邮箱的pop3存储
			Store store = session.getStore("pop3");
			store.connect(host, username, password);

	        // 获取inbox文件
		    Folder folder = store.getFolder("INBOX");
		    folder.open(Folder.READ_ONLY);  //打开,打开后才能读取邮件信息

		    // 获取邮件消息
		    Message message[] = folder.getMessages();

		    for (int i=0, n=message.length; i<n; i++) {
		    	System.out.println(i + ": " + message[i].getFrom()[0]
		    	                               + "\t" + message[i].getSubject());
		    	try {
					message[i].writeTo(System.out);
				} catch (IOException e) {
					e.printStackTrace();
				}

		    }

		    // 关闭资源
		    folder.close(false);
		    store.close();
		    
		} catch (MessagingException e) {
			e.printStackTrace();
		}
		
		System.out.println("GetMail Process Over!");

	}
	
	//邮件主题中文字符转换
	public static String transferChinese(String strText){
		try{
			strText = MimeUtility.encodeText(new String(strText.getBytes(), "GB2312"), "GB2312", "B");
		}catch(Exception ex){
			ex.printStackTrace();
		}
		return strText;
	}

	public static void main(String[] args) {
		HelloJMail.sendMail();
//		HelloJMail.getMail();
	}

}

 

 

分享到:
评论
5 楼 stenlylee 2009-03-12  
请问一下,James能实现多域名管理么?
如果不能,有第三方的东西来实现么?
4 楼 avery_leo 2009-02-27  
shaker_86 写道

请问有没有编程式的添加帐号的方法?

你的问题我理解为,动态变换邮箱账号,来发送邮件。当然可以采用编程的方式实现。
3 楼 shaker_86 2009-02-17  
请问有没有编程式的添加帐号的方法?
2 楼 avery_leo 2008-12-01  
jakey0613 写道

james具体有什么作用啊? 只能实现发邮件吗? 楼主能给解释一下吗?

Apache James 简称 James, 是 Java Apache Mail Enterprise Server的缩写。James 是100%基于Java的电子邮件服务器。它是一种独立的邮件服务器,并提供了一个完整的电子邮件解决方案,用来收、发电子邮件。
1 楼 jakey0613 2008-11-27  
james具体有什么作用啊?
只能实现发邮件吗?
楼主能给解释一下吗?

相关推荐

    韩顺平编写的java学习笔记(全)

    ### 韩顺平编写的Java学习笔记概览 #### Java平台分类与运行机制 - **J2SE(Java 2 Platform, Standard Edition)**: 标准版Java开发平台,适用于桌面应用程序开发。 - **J2EE(Java 2 Platform, Enterprise ...

    JAVA学习笔记最新ppt版1

    JAVA学习笔记最新ppt版1 JAVA 是一种面向对象的程序语言,具有更高的跨平台可能性。它是 Sun 公司 GreenProject 中撰写 Star7 应用程序的一个程序语言,由 James Gosling 创造。Java 的特性包括简单、面向对象、...

    java学习笔记

    ### Java学习笔记知识点详解 #### Java 平台与开发概述 - **Java平台分类:** - **J2SE(Java SE):** 标准版,适用于桌面应用程序开发。 - **J2EE(Java EE):** 企业版,专为Web应用和服务端应用程序设计。 -...

    jdk6.0学习笔记

    ### JDK 6.0 学习笔记精要 #### 一、Java 概览 - **Java 的起源与发展** - Java 最初是由 Sun Microsystems 的 Green Project 开发出来的,最初是为了设计 Star7 应用程序而创建的一种编程语言。 - 名称由来:...

    韩顺平java从入门到精通视频教程(全94讲)学习笔记整理(齐全).docx

    韩顺平 Java 从入门到精通视频教程学习笔记整理(齐全) 本资源是韩顺平 Java 从入门到精通视频教程的学习笔记,涵盖了 Java 基础知识、面向对象编程、图形界面开发、数据库编程、文件IO流编程、网络编程、多线程...

    flex学习笔记,技巧学习

    根据提供的信息,我们可以总结出以下关于Flex学习笔记中的关键技术知识点: ### 1. Flex 基础设置 在Flex开发中,通常会涉及到基础样式的设置。例如,在给定的部分内容中提到了字体大小、颜色及背景色的设置。虽然...

    java学习笔记,疯狂讲义

    在这个“Java学习笔记,疯狂讲义”中,我们可以期待涵盖Java的基础到高级概念。 首先,基础部分会讲解Java的历史和特点,包括其创始人James Gosling,以及为什么Java被称为“一次编写,到处运行”的语言。接下来,...

    JAVA学习笔记-java学习笔记WORD样式.docx

    ### JAVA学习笔记知识点详解 #### 一、计算机概述 1. **计算机**:电子设备,用于处理信息。 2. **计算机硬件**: - **中央处理器(CPU)**:计算机的大脑,负责处理指令。 - **内存(RAM)**:临时存储数据,...

    java lecture note(Java学习笔记)

    Java学习笔记:全面掌握Java编程的核心知识与技能 在当今的软件开发领域,Java作为一种流行的、功能强大的面向对象编程语言,被广泛应用于各种场景,包括Web应用、移动应用、企业级应用等。本篇Java学习笔记旨在为...

    java从入门到精通-学习笔记整理863页.doc

    Java 从入门到精通学习笔记整理 本资源摘要信息中,我们将从 Java 的基本概念到高级开发技术进行详细的介绍,涵盖了 Java 平台、Java 开发平台、Java 程序的运行机制、Java 编程语言的特点、Java 语言的基本语法、...

    Java课堂笔记学习Java课堂笔记学习

    ### Java课堂笔记学习 #### 软件定义与软件开发 - **软件**:软件是运行在硬件之上的一组指令集,这些指令集能够完成特定的功能。软件开发过程包括设计和编码两个主要阶段。 #### 编程语言的重要性 - **编程语言...

    Python与Java对比学习笔记.pdf

    Python与Java对比学习笔记 Python与Java是两种流行的编程语言,它们都有其自己的优缺点和应用场景。本笔记旨在通过对比学习Python与Java,帮助读者更好地理解和选择适合自己的编程语言。 Python语言概述 ...

Global site tag (gtag.js) - Google Analytics