文章转载http://www.cnblogs.com/liyazhou
Apache James 简称 James, 是 Java Apache Mail Enterprise Server的缩写。James 是100%基于Java的电子邮件服务器。它是一种独立的邮件服务器,并提供了一个完整的电子邮件解决方案,用来收、发电子邮件。
本文不赘述James服务器的参数细节,这个以后有机会再详细讨论,这里先从服务器搭建开始,用搭建的服务器收、发电子邮件来熟悉一下Apache James。本人也是新手,希望能得到各位高手的指点,使大家能悟到进阶的方向。
开始之前,先声明一下本文操作的系统环境:
1. JDK 6u10b
2. JMail API v1.4.2
3. JAF API v1.1(JavaBean Activation Framework)
4. Apache James 2.3.1
5. Eclipse 3.4 for J2EE Developers
6. Windows 2000 Server sp4
1。请下载安装JDK,并设置好其环境变量:JAVA_HOME=…… 、PATH=…… 、CLASSPATH=…… Eclipse 3.4 是目前的最新版本,可以从http://www.eclipse.org/下载。
2。请下载JMail API、JAF API,可以在www.java.sun.com找到他们,找不到也不要紧,本文附件示例代码免费提供一份(^_^)。
3。Apache James 的官方网站为:http://james.apache.org/,当前 Server的最新版为 2.3.1版. 安装非常简单,下载后得到james-binary-2.3.1.zip 文件,解压后即可。这里假设解压到D盘(D:\james-2.3.1),目录结构如下:
D:\james-2.3.1
|--- apps
|--- bin
|
…………
4。启动 James 服务器
双击或在命令行下执行D:\james-2.3.1\bin 目录下的 run.bat文件,即可启动 James 服务器。
启动后能在控制台看到如下信息,说明启动成功:
- UsingPHOENIX_HOME:D:\james-2.3.1
- UsingPHOENIX_TMPDIR:D:\james-2.3.1\temp
- UsingJAVA_HOME:D:\Java\jdk1.6.0_10
- Phoenix4.2
- JamesMailServer2.3.1
- RemoteManagerServicestartedplain:4555
- POP3Servicestartedplain:110
- SMTPServicestartedplain:25
- NNTPServicestartedplain:119
- FetchMailDisabled
要关闭 James 服务,请使用 Ctrl + C
说明:启动前请确保您的JDK环境变量如JAVA_HOME等已经设置好;James 启动时,其SMTP 服务默认在 25 端口启动,POP3 服务默认在 110 端口启动, NNTP 服务默认在 119 端口启动, 请确保这些端口未被占用。比如本系统下就已经安装了Microsoft的 SMTP 服务,造成 James无法启动,解决方法为:开始--->设置--->控制面板--->管理工具--->服务,打开后找到“Simple Mail Transport Protocol(SMTP)”服务项,关闭即可。
5。配置服务
服务器启动后会在本机配置一个默认的服务,这可以用来在本机上本服务器范围内收发邮件,但是邮件发不到163等外网邮箱。我们这里关注的重点就是配置一个能发到外网如163这样的邮箱的邮件,这样才有价值。不过由于本人是在本机上测试,一时不能获取公司的域名参数,无法测试接收外网邮箱(如163)的邮件,见晾,不过做法都是一样的,至少我们可以向外网邮箱发送邮件,局域网内可以收、发邮件。
打开D:\james-2.3.1\apps\james\SAR-INF 下的 config.xml 文件,初次启动James之前,不会有这个文件,只有当James服务启动一次之后才自动构件该文件。
找到
- ……
- <postmaster>Postmaster@localhost</postmaster>
- ……
- <servernamesautodetect="true"autodetectIP="true">
- <servername>localhost</servername>
- </servernames>
- ……
把localhost该成你自己想要的邮箱域名,把自动探测IP属性设置为“false”这里假设改成 zhaipuhong.com如果开了一个帐号 zph ,那么他的邮件地址就是zph@zhaipuhong.com(^_^)修改结果如下:
- ……
- <postmaster>Postmaster@zhaipuhong.com</postmaster>
- ……
- <servernamesautodetect="false"autodetectIP="false">
- <servername>zhaipuhong.com</servername>
- </servernames>
- ……
找到
- <mailetmatch="RemoteAddrNotInNetwork=127.0.0.1"class="ToProcessor">
- <processor>relay-denied</processor>
- <notice>550-Requestedactionnottaken:relayingdenied</notice>
- </mailet>
将其注释,结果如下:
- <!--mailetmatch="RemoteAddrNotInNetwork=127.0.0.1"class="ToProcessor">
- <processor>relay-denied</processor>
- <notice>550-Requestedactionnottaken:relayingdenied</notice>
- </mailet-->
找到下面元素,去掉其注释
- <authRequired>true</authRequired>
这样邮箱访问需要帐号验证,你不希望别人用你的帐号收发消息吧……^_^
如此,James服务配置已经完成。
6。创建邮件帐号
创建邮件帐号后,就可以用来收发邮件了。James的账号管理是通过基于Telnet客户机的远程管理器,这点颇为不爽,尤其是我的操作系统下的命令行控制台是不显示telnet命令输入字符的,经常出错。
现在进入命令行控制台,在telnet localhsot 4555 进入James管理器,操作如下:
- C:\DocumentsandSettings\db2admin>telnetlocalhost4555
将进入
- JAMESRemoteAdministrationTool2.3.1PleaseenteryourloginandpasswordLoginid:
默认的登陆id 为root 密码也为 root ,登陆成功后结果如下:
- JAMESRemoteAdministrationTool2.3.1
- Pleaseenteryourloginandpassword
- Loginid:
- Password:
- Welcomeroot.HELPforalistofcommands
创建新用户的命令是:adduser username password
这里创建了两个账户来作为演示使用: zhaipuhong/zhangpuhong; zph/zph
说明:你可以输入help来获取命令帮助
- helpdisplaythishelp显示帮助信息
- listusersdisplayexistingaccounts显示现有账户
- countusersdisplaythenumberofexistingaccounts显示现有账户数量
- adduser[username][password]addanewuser添加一个新用户
- verify[username]verifyifspecifieduserexist核实指定用户是否存在
- deluser[username]deleteexistinguser删除存在的用户
- setpassword[username][password]setsauser'spassword设置用户密码
- setalias[user][alias]locallyforwardsallemailfor'user'to'alias'设置邮箱别名
- showalias[username]showsauser'scurrentemailalias显示别名
- unsetalias[user]unsetsanaliasfor'user'删除用户别名
- setforwarding[username][emailaddress]forwardsauser'semailtoanotheremailaddress转发用户的电子邮件地址到另一个电子邮件地址
- showforwarding[username]showsauser'scurrentemailforwarding显示用户的当前邮件转发
- unsetforwarding[username]emovesaforward删除转发
- user[repositoryname]changetoanotheruserrepository改变另一个用户库
- shutdownkillsthecurrentJVM(convenientwhenJamesisrunasadaemon)关闭当前的服务
- quitcloseconnection关闭连接
账号创建成功后,使用quit退出管理器。现在我们可以开始部署我们的JMail应用了。
7。用James收发邮件
现在我们来写两个简单的程序来体验一下如何使用James收发邮件。请注意,示例程序是通用的。关于如何用JMail API收发邮件,这里不详细介绍,如果还没有接触过请参考一下我之前的文章:
http://zhaipuhong.javaeye.com/admin/blogs/213005
关于接受邮件部分,我们在代码中通过注释来描述。另外我们来回忆一下上述步骤配置James服务器的参数:
1。smtp 服务器:192.168.1.98或者localhost 192.168.1.98是我的局域网IP,由于我James服务就装在我的机器上,所以我可以用localhost
2。两个邮件帐号:zhaipuhong/zhaipuhong 对应邮箱地址: zhaipuhong@zhaipuhong.com
zph/zph 对应邮箱地址: zph@zhaipuhong.com
注意:邮箱域名我们配置的是zhaipuhong.com
示例程序:
- packagecom.zhaipuhong.j2ee.jmail;
- importjava.io.IOException;
- importjava.util.Properties;
- importjavax.mail.Authenticator;
- importjavax.mail.Folder;
- importjavax.mail.Message;
- importjavax.mail.MessagingException;
- importjavax.mail.PasswordAuthentication;
- importjavax.mail.Session;
- importjavax.mail.Store;
- importjavax.mail.Transport;
- importjavax.mail.internet.InternetAddress;
- importjavax.mail.internet.MimeMessage;
- importjavax.mail.internet.MimeUtility;
- publicclassHelloJMail{
- //发送邮件
- publicstaticvoidsendMail(){
- //Stringhost="192.168.1.98";//指定的smtp服务器,本机的局域网IP
- Stringhost="localhost";//本机smtp服务器
- //Stringhost="smtp.163.com";//163的smtp服务器
- Stringfrom="zhaipuhong@zhaipuhong.com";//邮件发送人的邮件地址
- Stringto="zph@zhaipuhong.com";//邮件接收人的邮件地址
- finalStringusername="zhaipuhong";//发件人的邮件帐户
- finalStringpassword="zhaipuhong";//发件人的邮件密码
- //创建Properties对象
- Propertiesprops=System.getProperties();
- //添加smtp服务器属性
- props.put("mail.smtp.host",host);
- props.put("mail.smtp.auth","true");
- //创建邮件会话
- Sessionsession=Session.getDefaultInstance(props,newAuthenticator(){
- @Override
- publicPasswordAuthenticationgetPasswordAuthentication(){
- returnnewPasswordAuthentication(username,password);
- }
- });
- try{
- //定义邮件信息
- MimeMessagemessage=newMimeMessage(session);
- message.setFrom(newInternetAddress(from));
- message.addRecipient(Message.RecipientType.TO,newInternetAddress(
- to));
- //message.setSubject(transferChinese("我有自己的邮件服务器了"));
- message.setSubject("Ihavamyownmailserver");
- message.setText("Fromnow,youhaveyourownmailserver,congratulation!");
- //发送消息
- session.getTransport("smtp").send(message);
- //Transport.send(message);//也可以这样创建Transport对象发送
- System.out.println("SendMailProcessOver!");
- }catch(MessagingExceptione){
- e.printStackTrace();
- }
- }
- //接受邮件
- publicstaticvoidgetMail(){
- Stringhost="localhost";
- finalStringusername="zph";
- finalStringpassword="zph";
- //创建Properties对象
- Propertiesprops=newProperties();
- //创建邮件会话
- Sessionsession=Session.getDefaultInstance(props,newAuthenticator(){
- @Override
- publicPasswordAuthenticationgetPasswordAuthentication(){
- returnnewPasswordAuthentication(username,password);
- }
- });
- try{
- //获取邮箱的pop3存储
- Storestore=session.getStore("pop3");
- store.connect(host,username,password);
- //获取inbox文件
- Folderfolder=store.getFolder("INBOX");
- folder.open(Folder.READ_ONLY);//打开,打开后才能读取邮件信息
- //获取邮件消息
- Messagemessage[]=folder.getMessages();
- for(inti=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(IOExceptione){
- e.printStackTrace();
- }
- }
- //关闭资源
- folder.close(false);
- store.close();
- }catch(MessagingExceptione){
- e.printStackTrace();
- }
- System.out.println("GetMailProcessOver!");
- }
- //邮件主题中文字符转换
- publicstaticStringtransferChinese(StringstrText){
- try{
- strText=MimeUtility.encodeText(newString(strText.getBytes(),"GB2312"),"GB2312","B");
- }catch(Exceptionex){
- ex.printStackTrace();
- }
- returnstrText;
- }
- publicstaticvoidmain(String[]args){
- HelloJMail.sendMail();
- //HelloJMail.getMail();
- }
- }
说明: 执行测试时,先执行发送,在main方法中注释掉邮件接受方法调用,等待片刻,再注释掉邮件发送方法调用,执行邮件接受方法调用。因为就算163这样优秀的企业级邮箱也不可能瞬间就能收到发送的邮件。
在邮件发送方法中:sendMail(), 可以尝试一下又本邮件服务器向163邮箱发送邮件,如果想通过163邮件服务器想本地发送邮件,你需要配置DSN。
以下为本机接收James邮件服务器提供服务的邮件结果:
- 0:zhaipuhong@zhaipuhong.comIhavamyownmailserver
- Return-Path:<zhaipuhong@zhaipuhong.com>
- Delivered-To:zph@zhaipuhong.com
- Received:from127.0.0.1([127.0.0.1])
- byZPH(JAMESSMTPServer2.3.1)withSMTPID693
- for<zph@zhaipuhong.com>;
- Wed,9Jul200819:58:38+0800(CST)
- Date:Wed,9Jul200819:58:38+0800(CST)
- From:zhaipuhong@zhaipuhong.com
- To:zph@zhaipuhong.com
- Message-ID:<11627000.01215604718796.JavaMail.db2admin@ZPH>
- Subject:Ihavamyownmailserver
- MIME-Version:1.0
- Content-Type:text/plain;charset=us-ascii
- Content-Transfer-Encoding:7bit
- Fromnow,youhaveyourownmailserver,congratulation!
从上面的结果可以看出,该邮件是由zhaipuhong@zhaipuhong.com发给 zph@zhaipuhong.com 的。
多发几封电子邮件,就会发现,James 的邮件接收是一个栈结构,最近收到的邮件编号为0,依次类推……
相关推荐
本文将重点介绍如何通过Apache James搭建邮件服务器并实现基本的邮件收发功能。 #### 二、搭建环境准备 在正式搭建Apache James邮件服务器之前,需要准备以下软件环境: 1. **JDK 6u10b**:Java运行环境。 2. **...
对于希望使用开源软件搭建邮件服务器的用户来说,Apache James 是一个非常不错的选择。 #### 二、搭建准备 在正式开始搭建 Apache James 邮件服务器之前,我们需要做一些准备工作: 1. **JDK**:首先确保计算机上...
总的来说,Apache James是一个功能全面且高度可定制的Java邮件服务器,其源代码对于Java开发者来说是一份宝贵的教育资源,有助于理解邮件服务器的工作原理,同时为构建自己的邮件系统或扩展已有功能提供了可能。...
刚进个小公司就让我搭建个服务器,研究了一个星期,总算是搞定了,网上找了很多资料,看了很久也研究了很久,最后总结了下...搭建成功...收发邮件都没问题...不过如果是收邮件的话必须要有注册的域名,也就是公网的域名才...
### Apache邮件服务器James简单配置详解 #### 背景与简介 Apache James是Apache软件基金会下的一个开源邮件服务器项目,完全基于Java语言构建,具备高度的可配置性和扩展性,同时确保了系统的稳定性。它提供了包括...
在教学实践中,学生们往往需要使用邮件系统来完成项目作业,尤其是在没有公网连接的环境下,如何搭建一套简易且高效的邮件服务器成为了一项迫切的需求。Apache James 作为一种开源邮件服务器解决方案,提供了高度...
总的来说,Apache James邮件服务器的配置涉及多个层面,从基本的环境搭建到复杂的业务逻辑定制,都需要细心操作。理解其工作原理和配置细节,对于管理和维护一个稳定的邮件服务至关重要。通过不断学习和实践,我们...
4. **测试与使用**:启动James服务器后,你可以通过邮件客户端(如Foxmail)进行收发邮件的测试,验证服务器是否正常工作。 总结起来,搭建JavaMail邮箱服务器Apache James是一项涉及硬件、软件配置及服务器管理的...
使用James+Javamail构建邮件服务的过程涉及服务器安装配置、用户管理、邮件收发等多个环节。通过上述步骤,不仅可以搭建起具备基本邮件过滤和操作功能的邮件服务器,还能在此基础上进一步扩展其功能,满足更多复杂的...
例如,可以使用FetchPOP来接收邮件,并将其存储在邮件服务器中。 Apache James的NNTP Apache James的NNTP提供了NNTP协议的实现,可以实现新闻组的管理和阅读。例如,可以使用NNTP来管理新闻组,并将新闻组的内容...
Apache James 是一款开源的邮件服务器软件,主要用于处理电子邮件的接收、发送、存储等任务。本文将详细介绍如何在Linux CentOS 5.1环境下安装配置Apache James邮件服务器。 首先,我们需要准备以下环境: 1. 操作...
Apache James Mailserver是一款开源的邮件服务器软件,它基于Java构建,提供全面的邮件服务功能,包括SMTP、POP3和IMAP协议支持。James的核心设计目标是可扩展性和灵活性,允许用户根据需求定制邮件服务。这款服务器...
通过以上步骤和理解,您可以成功地在本地搭建并运行Apache James邮件服务器,为您的组织或个人提供可靠的邮件服务。请务必根据实际需求调整配置,并保持软件更新以获取最新的安全补丁和功能改进。
Apache James邮件系统是一款开源的邮件服务器软件,专为组织和个人提供高效、安全的电子邮件服务。在3.0.0版本中,它集成了最新的技术,提供了丰富的功能和强大的可扩展性,使得用户能够轻松地搭建自己的邮件服务器...