基于java的邮件服务器以及webmail的搭建

2019-07-14 12:25发布

一、准备工作 局域网中有两台电脑都用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进行相应的包装,主要是后台管理这一块。