apache james 搭建邮件服务器实践
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.2
?????? 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 服务器。
?
?????? 启动后能在控制台看到如下信息,说明启动成功:
Using PHOENIX_HOME: D:\james-2.3.2???
Using PHOENIX_TMPDIR: D:\james-2.3.2\temp???
Using JAVA_HOME: D:\Java\jdk1.6.0_10???
?
Phoenix 4.2???
?
James Mail Server 2.3.2???
Remote Manager Service started plain:4555???
POP3 Service started plain:110???
SMTP Service started plain:25???
NNTP Service started plain:119???
FetchMail Disabled?
要关闭 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>???
……???
<servernames autodetect="true" autodetectIP="true">???
??? <servername>localhost</servername>???
</servernames>???
……?
?把localhost该成你自己想要的邮箱域名, 把自动探测IP属性设置为“false”这里假设改成 zjc.com 如果开了一个帐号 zph ,那么他的邮件地址就是 (^_^)修改结果如下:
……???
<postmaster>Postmaster@zjc.com</postmaster>???
……???
<servernames autodetect="false" autodetectIP="false">???
??? <servername>zjc.com</servername>???
</servernames>???
……?
?找到
<mailet match="RemoteAddrNotInNetwork=127.0.0.1" + 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();??
??? }??
?
}?
????? 说明: 执行测试时,先执行发送,在main方法中注释掉邮件接受方法调用,等待片刻,再注释掉邮件发送方法调用,执行邮件接受方法调用。因为就算163这样优秀的企业级邮箱也不可能瞬间就能收到发送的邮件。
????? 在邮件发送方法中:sendMail(), 可以尝试一下又本邮件服务器向163邮箱发送邮件,如果想通过163邮件服务器想本地发送邮件,你需要配置DSN。
?? 本文来自互联网,只做个人学习之用!