基于java的邮件服务器以及webmail的搭建
一、准备工作
局域网中有两台电脑都用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
toolsJavajdk1.6.0_02,配置java_home在此就不多说了。
第二步:下载James,并解压
可以到Apache网站上下载最新版本james-2.3.1,下载将得到一个压缩文件james-2.3.1.zip,大小为4.45M,将此包解压到D:installed
toolsjames-2.3.1.
第三步:
需要使用的端口:
Remote Manager Service started plain:4555
POP3 Service started plain:110
SMTP Service started plain:25
NNTP Service started plain:119
检查端口4555,110,25,119 是否被占用:
netstat -an|grep 25
netstat -an|grep 110
如果被占用,linux下一般是sendmail程序占用,咨询别的应用是否使用了sendmail,如果没有用户在使用sendmail就可以停止sendmail:
ps -eaf|grep sendmail
service sendmail stop
直接双击运行D:installed
toolsjames-2.3.1 in un.bat,若启动无误,将提示如下
C:Documents and
SettingsAdministrator>run
Using PHOENIX_HOME: E:Program
Filesjames-2.3.1
Using PHOENIX_TMPDIR: E:Program Filesjames-2.3.1 emp
Using
JAVA_HOME:
E:Program FilesJavajdk1.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
toolsjames-2.3.1 in un.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 toolsJavajdk1.6.0_02
if not "%JAVA_HOME%"=="" goto found_java
……
修改完后再运行run.bat,应该就可以正常启动了,如果再出现什么问题就再去官方查找解决了。
三、
a.服务器端配置
linux 下 运行 hostname
显示计算机名称
启动过一次后就使用Ctrl+C强行关闭James服务器并进行下面的配置。首先找出PCA的计算机名,假设叫xiaochong,然后打开文件D:installed
toolsjames-2.3.1appsjamesSAR-INFconfig.xml。
在config.xml文件中,找到Postmaster@localhost,把此项改为Postmaster@IP地址,同理,找到localhost,
把此项改为ip
地址。其实,改这两项就是把默认的localhost改为计算机名,这样做是为了让其它机器也能访问邮件系统,当然前提是在局域网上没有与服务器重名的机器。
在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@xiaochong与def@xiaochong用户后可以测试收发邮件了。注意在foxmail中配置时:邮件发送SMTP与接收服务器POP3都只填写PCA的IP地址(即james服务器所在电脑的IP地址)
四、深入配置实现与外网联通收发邮件。
1.打开james-2.2.0appsjamesSAR-INFconfig.xml文件
2.注释掉以下代码
注释掉此代码后下面将要使用smtp认证方式。
3.配置dnsserver
输入自己上网时获得的运营商分配的DNS地址,配置后如:
127.0.0.1
219.150.32.132
如果只是内网使用只需保留启用127.0.0.1即可。
需要设置
true改为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认证
将false改为true
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进行相应的包装,主要是后台管理这一块。