邮件上网系统构建(二)服务器搭建
2008/07/19
1。就是它-james
本来天真的想自己找找API做个简单的服务器的,又一想,还是原始人的思考方式,什么东东都从头做起,不好不好。于是乎,找到了james,james是apache的一个开源项目。James 是一个企业级的邮件服务器,它完全实现了smtp 和 pops 以及nntp 协议。同时,james服务器又是一个邮件应用程序平台。James的核心是Mailet API,而james 服务齐是一个mailet的容器。它可以让你非常容易的实现出很强大的邮件应用程序。James开源项目被广泛的应用于与邮件有关的项目中。你可以通过它来搭建自己的邮件服务器。我们可以利用Mailet API,编程接口来实现自己所需的业务。James集成了Avalon 应用程序框架以及Phoenix Avalon 框架容器。Phoenix为james 服务器提供了强大的支持。关键点是,1.JAVA 2.过滤器的借口,写个类就可以自动反信了,太合适了。
2。服务器安装
http://james.apache.org/download.cgi到这里下载了最新的james,james-binary-2.3.1.zip,找个地方直接解压。比如俺把他放到F:/james。找到 F:/james/james-2.3.1/bin/run.bat ,双击 run.bat 就可以了。前提是:你的电脑中必须已经安装了 JDK,并且设置了JAVA_HOME环境变量,如果没有设置的话,建议修改一下加到系统变量或者修改一下run.bat,修改run.bat的方法如下(假设你的JDK目录是c:/jdk1.3):
…… rem rem Determine if JAVA_HOME is set and if so then use it rem set JAVA_HOME= c:/jdk1.3 if not "%JAVA_HOME%"=="" goto found_java ……
启动画面如下,就是正常启动了。
Using PHOENIX_HOME: F:/james/james-2.3.1 Using PHOENIX_TMPDIR: F:/james/james-2.3.1/temp Using JAVA_HOME: Phoenix 4.2 James Mail Server 2.3.1 Remote Manager Service started plain:4567 POP3 Service started plain:110 SMTP Service started plain:25 NNTP Service started plain:119 FetchMail Disabled
3。创建用户
James以telnet 的方式提供了接口用来添加用户。
a.telnet localhost 4555 回车(4555是默认端口这个可以在config.xml中修改)
b.然后输入管理员用户名和密码(user/pwd : root/root 是默认设置这个可以在config.xml中修改)
JAMES Remote Administration Tool 2.3.1 Please enter your login and password Login id: root Password: root Welcome root. HELP for a list of commands
c.你可以打help查看所有的命令,这里只提供了几个简单的用户命令。添加用户就是adduser [username] [password]。我们先建立两个测试用户test1和test2,密码都是123456
adduser test1 123456 User test1 added Adduser test2 123456 User test2 added
d.好了,已经创建成功了,现在你的服务器是只有本机能用。用foxmail创建两个邮箱,然后两个就可以通讯了,地址是[email protected]和[email protected]。
4。调试外网邮件收发
这一步真是费了好些劲了,网上的资料五花八门啊,就是没有能直接拿来用的。写下来探索过程,供还在探索的同志查看。成功之路分三步,其中的细枝末节就不涂了。
第一步:a.做一下端口映射,因为俺用的是adsl拨号上网,路由器多人共享上网。把路由器的对外端口的SMTP和POP3的端口25和110映射到本机的25和110。这样对于外网请求就可以直接转发到俺的服务器了。
b.对配置文件F:/james/james-2.3.1/apps/james/SAR-INF/config.xml作如下修正:
(注释掉防止第三方转送的保护程序,因为要使用SMTP的authentication) 4321 (这个是remotemanager的port,也就是telnet管理登陆的端口,默认的总感觉不安全,还是换个吧) (修改管理员账号密码) true (使用SMTP的authentication,只对收件人是本服务器用户的邮件提供relay服务,其他的不要找我啊)
c.结果,对外发送邮件OK,狂喜了一下。不过使用IP地址的外部邮件发不过来。邮件服务器根本没有受到请求。163邮箱报这个错:
你发送到[email protected]的邮件由于以下原因被退回 : [email protected] DNS query error: 221.218.xxx.xxx
俺们公司的邮箱给这个错:
mail.xxxx.com 550 5.7.1 ... Relaying denied. IP name loopup failed [221.218.xxx.xxx]
第二步:被网上说的没有固定IP不能做邮件服务器吓到了,以为这个构想这么快就要夭折了呢。幸亏没有放弃,咱们用动态域名解决。网上有几个可以域名动态IP绑定的东东吧,不过不是哪个都行,要他们提供支持邮件服务的服务才行。把免费的二级域名绑定到自己asdl拨号的动态IP上,并且把邮件服务用的MX纪录指向二级域名。找到一个希网(http://www.3322.org/),有这个免费动态域名服务,申请了一个abcd.8866.org。绑定域名和MX指向后,再来测试。没成功,被俺的邮件服务器拒绝了,发了一封拒绝relay的信。163信箱:
你发送到[email protected]的邮件由于以下原因被退回 : [email protected] SMTP error, RCPT TO: 530 5.7.1 Authentication Required
俺们公司的邮箱:
The original message was received at Sat, 19 Jul 2008 14:21:04 +0800 (CST) from root@localhost ----- The following addresses had permanent fatal errors ----- [email protected] (reason: 530 5.7.1 Authentication Required) ----- Transcript of session follows ----- ... while talking to abcd.8866.org.: >>> DATA <<< 530 5.7.1 Authentication Required 554 5.0.0 Service unavailable <<< 503 5.5.0 No recipients specified
虽然没成功,但是进步了,服务器已经响应了。既然是权限的事目标还是配置文件。
第三步:修改配置文件F:/james/james-2.3.1/apps/james/SAR-INF/config.xml如下:
(取消自动探测服务器名) abcd.8866.org (设置服务器名,这样就可以把[email protected]看作自己服务器的用户,提供服务了。)
再来测试,哈哈哈,OK了,从本机到163从163到本机,或者和我们公司的邮件服务器之间,畅通无阻了。
5。服务器准备完毕
服务器准备好了,下面该进入mailet的开发了。
这里声明一点啊,动态IP提供邮件服务是违反国家规定的,邮件服务需要有许可证的。咱们这里只是用来技术学习的,不要想歪主意哦!