局域网中搭建Apache James 搭建邮件服务器并实现与外网收发邮件
一、准备工作
局域网中有两台电脑都用Windows XP SP2系统+JDK1.6.0_02,一台PCA,一台PCB,PCA当服务器,PCB当客户端测试用,当然PCA也可同时充当客户端。
Apache James(Java Apache Mail Enterprise Server)是Apache组织的子项目之一,完全采用纯Java技术开发,实现了SMTP、POP3与NNTP等多种邮件相关协议。
James也是一个邮件应用平台,可以通过Mailet扩充其功能,如Mail2SMS、Mail2Fax等。James提供了比较完善的配置方案,尤其是关于邮件内容存储和用户信息存储部分,可以选择在文件、数据库或其他介质中保存。
James性能稳定、可配置性强,还是开源项目,所有源代码不存在版权问题,因此,James在项目中的应用日益广泛,现在常用版本为2.1,但最新版本2.3已经推出,在本文中,我们将仍以james-2.3.1作为介绍蓝本。
二、安装与配置
James的安装配置过程非常简单。
第一步:安装JDK并配置JAVA_HOME
请使用JDK1.3以上版本(在此使用jdk1.6.0_02),假设安装在D:\installed tools\Java\jdk1.6.0_02,配置java_home在此就不多说了。
第二步:下载James,并解压
可以到Apache网站上下载最新版本james-2.3.1,下载将得到一个压缩文件james-2.3.1.zip,大小为4.45M,将此包解压到D:\installed tools\james-2.3.1.
第三步:直接双击运行D:\installed tools\james-2.3.1\bin\run.bat,若启动无误,将提示如下
C:\Documents and Settings\Administrator>run
Using PHOENIX_HOME: E:\Program Files\james-2.3.1
Using PHOENIX_TMPDIR: E:\Program Files\james-2.3.1\temp
Using JAVA_HOME: E:\Program Files\Java\jdk1.6.0_02
Phoenix 4.2
James Mail Server 2.3.1
Remote Manager Service started plain:4555
POP3 Service started plain:110
SMTP Service started plain:25
NNTP Service started plain:119
FetchMail Disabled
也有可能启动不了,并报JAVA_HOME找不到,如果没有配置JAVA_HOME需要指定JAVA_HOME,或者另一比较简单的方法是在D:\installed tools\james-2.3.1\bin\run.bat中指定JAVA_HOME,修改后的run.bat如下:
……
rem
rem Determine if JAVA_HOME is set and if so then use it
rem
set JAVA_HOME= D:\installed tools\Java\jdk1.6.0_02
if not "%JAVA_HOME%"=="" goto found_java
……
修改完后再运行run.bat,应该就可以正常启动了,如果再出现什么问题就再去官方查找解决了。
linux下面:
进入目录:
执行sh ./run.sh 或者nohup sh ./run.sh & (到后台运行)
三、
a.服务器端配置
启动过一次后就使用Ctrl+C强行关闭James服务器并进行下面的配置。首先找出PCA的计算机名,假设叫itlife365.com,然后打开文件D:\installed tools\james-2.3.1\apps\james\SAR-INF\config.xml。
先拷贝一份作为备份,然后。
在config.xml文件中,找到<postmaster>Postmaster@localhost</postmaster>,把此项改为<postmaster>Postmaster@itlife365.com</postmaster>,同理,找到<servername>localhost</servername>,
把此项改为<servername>itlife365.com</servername>。其实,改这两项就是把默认的localhost改为计算机名或者itlife365.com 最好改为带.com 的,否则在发生邮件的时候,outlook 不能发送,只能接收,这样做是为了让其它机器也能访问邮件系统,当然前提是在局域网上没有与服务器重名的机器。
在PCA上进入命令行模式登录james服务器建立两个新账户,一个是abc,另一个是def.
命令如下:
telnet 192.168.1.102 4555(登录james服务器利用telnet命令192.168.102是PCA的IP地址,4555是james服务器默认的登录端口)
adduser abc 123(添加新邮箱用户abc与def密码都是123)
adduser def 123
quit(退出james服务器,不主动退出过一分钟后会自动超时退出)
b.客户端口配置
在PCB中使用foxmail为客户端口邮件收发软件,建立设置好abc@itlife365.com与def@itlife365.com用户后可以测试收发邮件了。注意在foxmail中配置时:邮件发送SMTP与接收服务器POP3都只填写PCA的IP地址(即james服务器所在电脑的IP地址)
四、深入配置实现与外网联通收发邮件。
前提:你的机器可以连接到外网哦
1.打开james-2.2.0\apps\james\SAR-INF\config.xml文件
2.注释掉以下代码
<!--mailet match="RemoteAddrNotInNetwork=127.0.0.1" class="ToProcessor">
<processor> relay-denied </processor>
<notice>550 - Requested action not taken: relaying denied</notice>
</mailet-->
注释掉此代码后下面将要使用smtp认证方式。
3.配置dnsserver
输入自己上网时获得的运营商分配的DNS地址,配置后如:
<server>127.0.0.1</server>
<server>219.150.32.132</server>
如果只是内网使用只需保留启用<server>127.0.0.1</server>即可。
需要设置 <autodiscover>true</autodiscover>改为false如果设置为自动探测的话,在我的机器上会报错:
James.Mailet: RemoteDelivery: Temporary exception delivering mail (Mail1098776398187-0-to-somedomain.com: javax.mail.MessagingException: There are no DNS entries for the hostname somedomain.com. I cannot determine where to send this message.
at org.apache.james.transport.mailets.RemoteDelivery.deliver(RemoteDelivery.java:398)
at org.apache.james.transport.mailets.RemoteDelivery.run(RemoteDelivery.java:912)
at java.lang.Thread.run(Thread.java:534)
4.修改root口令。account login="root" password="mypassword"此项不修改也没关系。
5.smtpserver打开smtp认证
将<authRequired>false</authRequired>改为<authRequired>true</authRequired>
6.重新启动James就生效了,就可以向163及其它互联网邮件服务器发送邮件了。
五、常见问题
1、 在启动james时,提示POP3或SMTP不能使用?
请检查一下,看“管理工具—>服务”里面,是不是启动了别的邮件服务器,已将110或25端口占用了。
我在安装配置james时就遇到满满一屏错误就是因为我将windowsXP 中IIS服务自带的SMTP服务开启了,关闭后正常。
2、 JAVA_HOME找不到?
请在run.bat中指定JAVA_HOME,若还不行,请在“我的电脑—>系统—>高级—>环境变量”中添加一项JAVA_HOME(最好是用前一种方法)。
3、服务器启动正常,但客户端不能收发邮件?
请检查客户端配置是否正常,参照前面所讲,另外,请检查james下的config.xml,是否把localhost改成了机器名。
六、
JAMES服务器的帐号管理
James的账号管理是通过telnet完成的,登录命令为:
telnet unitname 4555
其中unitname也可以换成IP,4555是端口号。登录时需要用户名和密码,初始的用户名和密码均为root。若登录成功,提示如下:
JAMES Remote Administration Tool 2.1
Please enter your login and password
Login id:
Password:
Welcome root. HELP for a list of commands
需要注意的是,所有敲入的命令都不显示在屏幕上。
输入help,将出现命令的帮助,信息如下:
JAMES Remote Administration Tool 2.1
Please enter your login and password
Login id:
Password:
Welcome root. HELP for a list of commands
Currently implemented commands:
help display this help
listusers display existing accounts
countusers display the number of existing accounts
adduser [username] [password] add a new user
verify [username] verify if specified user exist
deluser [username] delete existing user
setpassword [username] [password] sets a user's password
setalias [alias] [user] locally forwards all email for 'alias' t
o 'user'
unsetalias [alias] unsets an alias
setforwarding [username] [emailaddress] forwards a user's email to another email
address
unsetforwarding [username] removes a forward
user [repositoryname] change to another user repository
shutdown kills the current JVM (convenient when J
ames is run as a daemon)
quit close connection
常用的命令有listusers、countusers、adduser、deluser、setpassword等。
其中添加用户为adduser,例如:adduser holen 123456。
通过这个后台管理界面,管理员就可以实现账号管理及其他相应的管理功能。
总结:
总体而言,James是一款十分优秀的邮件服务器,具有性能稳定、扩展性好、可配置性强、响应速度快、源码公开等优点。同时,由于James的后台管理不够方便、缺少必要的技术支持等原因,限制了james的高端企业级应用。
就目前情况而言,James主要用于1000用户量以内的邮件系统,而且当James用于商业性项目时,开发商一般需要对James进行相应的包装,主要是后台管理这一块。
可以通过修改下面的端口重新配置需要的端口
<smtpserver enabled="true">
<!-- port 25 is the well-known/IANA registered port for SMTP -->
<port>1325</port>
<pop3server enabled="true">
<!-- port 995 is the well-known/IANA registered port for POP3S ie over SSS
L/TLS -->
<!-- port 110 is the well-known/IANA registered port for Standard POP3 -->
<!--<port>110</port>-->
<port>13110</port>
服务器可以指定ip 或者机器名