用 Apache James 搭建邮件服务器来收发邮件实践.docx_第1页
用 Apache James 搭建邮件服务器来收发邮件实践.docx_第2页
用 Apache James 搭建邮件服务器来收发邮件实践.docx_第3页
用 Apache James 搭建邮件服务器来收发邮件实践.docx_第4页
用 Apache James 搭建邮件服务器来收发邮件实践.docx_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

用 Apache James 搭建邮件服务器来收发邮件实践 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 sp41。请下载安装JDK,并设置好其环境变量:JAVA_HOME= 、PATH= 、CLASSPATH= Eclipse 3.4 是目前的最新版本,可以从/下载。2。请下载JMail API、JAF API,可以在找到他们,找不到也不要紧,本文附件示例代码免费提供一份(_)。 3。Apache James 的官方网站为:/,当前 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.1bin 目录下的 run.bat文件,即可启动 James 服务器。 启动后能在控制台看到如下信息,说明启动成功:Java代码 UsingPHOENIX_HOME:D:james-2.3.1 UsingPHOENIX_TMPDIR:D:james-2.3.1temp UsingJAVA_HOME:D:Javajdk1.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.1appsjamesSAR-INF 下的 config.xml 文件,初次启动James之前,不会有这个文件,只有当James服务启动一次之后才自动构件该文件。 找到Java代码 Postmasterlocalhost localhost 把localhost该成你自己想要的邮箱域名,把自动探测IP属性设置为“false”这里假设改成 如果开了一个帐号 zph ,那么他的邮件地址就是(_)修改结果如下:Xml代码 P 找到Xml代码 relay-denied 550-Requestedactionnottaken:relayingdenied 将其注释,结果如下:Xml代码 relay-denied 550-Requestedactionnottaken:relayingdenied 找到下面元素,去掉其注释Xml代码 true 这样邮箱访问需要帐号验证,你不希望别人用你的帐号收发消息吧_ 如此,James服务配置已经完成。6。创建邮件帐号创建邮件帐号后,就可以用来收发邮件了。James的账号管理是通过基于Telnet客户机的远程管理器,这点颇为不爽,尤其是我的操作系统下的命令行控制台是不显示telnet命令输入字符的,经常出错。现在进入命令行控制台,在telnet localhsot 4555 进入James管理器,操作如下:C代码 C:DocumentsandSettingsdb2admintelnetlocalhost4555 将进入C代码 JAMESRemoteAdministrationTool2.3.1PleaseenteryourloginandpasswordLoginid: 默认的登陆id 为root 密码也为 root ,登陆成功后结果如下:C代码 JAMESRemoteAdministrationTool2.3.1 Pleaseenteryourloginandpassword Loginid: Password: Welcomeroot.HELPforalistofcommands 创建新用户的命令是:adduser username password这里创建了两个账户来作为演示使用: zhaipuhong/zhangpuhong; zph/zph 说明:你可以输入help来获取命令帮助C代码 helpdisplaythishelp显示帮助信息 listusersdisplayexistingaccounts显示现有账户 countusersdisplaythenumberofexistingaccounts显示现有账户数量 adduserusernamepasswordaddanewuser添加一个新用户 verifyusernameverifyifspecifieduserexist核实指定用户是否存在 deluserusernamedeleteexistinguser删除存在的用户 setpasswordusernamepasswordsetsauserspassword设置用户密码 setaliasuseraliaslocallyforwardsallemailforusertoalias设置邮箱别名 showaliasusernameshowsauserscurrentemailalias显示别名 unsetaliasuserunsetsanaliasforuser删除用户别名 setforwardingusernameemailaddressforwardsausersemailtoanotheremailaddress转发用户的电子邮件地址到另一个电子邮件地址 showforwardingusernameshowsauserscurrentemailforwarding显示用户的当前邮件转发 unsetforwardingusernameemovesaforward删除转发 userrepositorynamechangetoanotheruserrepository改变另一个用户库 shutdownkillsthecurrentJVM(convenientwhenJamesisrunasadaemon)关闭当前的服务 quitcloseconnection关闭连接 账号创建成功后,使用quit退出管理器。现在我们可以开始部署我们的JMail应用了。 7。用James收发邮件 现在我们来写两个简单的程序来体验一下如何使用James收发邮件。请注意,示例程序是通用的。关于如何用JMail API收发邮件,这里不详细介绍,如果还没有接触过请参考一下我之前的文章: /admin/blogs/213005 关于接受邮件部分,我们在代码中通过注释来描述。另外我们来回忆一下上述步骤配置James服务器的参数: 1。smtp 服务器:8或者localhost 8是我的局域网IP,由于我James服务就装在我的机器上,所以我可以用localhost 2。两个邮件帐号:zhaipuhong/zhaipuhong 对应邮箱地址: zph/zph 对应邮箱地址: 注意:邮箱域名我们配置的是 示例程序:Java代码 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; ernet.InternetAddress; ernet.MimeMessage; ernet.MimeUtility; publicclassHelloJMail /发送邮件 publicstaticvoidsendMail() /Stringhost=8;/指定的smtp服务器,本机的局域网IP Stringhost=localhost;/本机smtp服务器 /Stringhost=;/163的smtp服务器 Stringfrom=;/邮件发送人的邮件地址 Stringto=;/邮件接收人的邮件地址 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;in;i+) System.out.println(i+:+messagei.getFrom()0 +t+messagei.getSubject(); try messagei.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(Stringargs) HelloJMail.sendMail(); /HelloJMail.getMail(); 说明: 执行测试时,先执行发送,在main方法中注释掉邮件接

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论