搭建一个邮件服务器 James claros inTouch 就发送不了邮件到外网,下面的是James的log
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了搭建一个邮件服务器 James claros inTouch 就发送不了邮件到外网,下面的是James的log相关的知识,希望对你有一定的参考价值。
04/09/10 23:58:19 INFO dnsserver: DNS Server is: byzh.com
04/09/10 23:58:19 INFO dnsserver: DNS Server is: smtp.163.com
04/09/10 23:58:36 WARN dnsserver: Query error!
java.net.PortUnreachableException
at sun.nio.ch.DatagramDispatcher.read0(Native Method)
at sun.nio.ch.DatagramDispatcher.read(DatagramDispatcher.java:25)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:233)
at sun.nio.ch.IOUtil.read(IOUtil.java:206)
at sun.nio.ch.DatagramChannelImpl.read(DatagramChannelImpl.java:324)
at org.xbill.DNS.UDPClient.recv(UDPClient.java:49)
at org.xbill.DNS.UDPClient.sendrecv(UDPClient.java:70)
at org.xbill.DNS.SimpleResolver.send(SimpleResolver.java:256)
at org.xbill.DNS.ExtendedResolver$Resolution.start(ExtendedResolver.java:93)
at org.xbill.DNS.ExtendedResolver.send(ExtendedResolver.java:359)
at org.apache.james.dnsserver.DNSServer.rawDNSLookup(DNSServer.java:337)
at org.apache.james.dnsserver.DNSServer.lookup(DNSServer.java:291)
at org.apache.james.dnsserver.DNSServer.findMXRecordsRaw(DNSServer.java:202)
at org.apache.james.dnsserver.DNSServer.findMXRecords(DNSServer.java:237)
at org.apache.james.dnsserver.DNSServer$1.<init>(DNSServer.java:427)
at org.apache.james.dnsserver.DNSServer.getSMTPHostAddresses(DNSServer.java:426)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.avalon.phoenix.components.application.BlockInvocationHandler.invoke(BlockInvocationHandler.java:134)
at $Proxy0.getSMTPHostAddresses(Unknown Source)
at org.apache.james.James.getSMTPHostAddresses(James.java:860)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.avalon.phoenix.components.application.BlockInvocationHandler.invoke(BlockInvocationHandler.java:134)
at $Proxy9.getSMTPHostAddresses(Unknown Source)
at org.apache.james.transport.mailets.RemoteDelivery.deliver(RemoteDelivery.java:452)
at org.apache.james.transport.mailets.RemoteDelivery.run(RemoteDelivery.java:1139)
at java.lang.Thread.run(Thread.java:619)
04/09/10 23:58:36 INFO dnsserver: Couldn't resolve MX records for domain sina.com.
04/09/10 23:58:51 WARN dnsserver: Query error!
手动搭建apache james邮件服务器,实现邮件功能
最近一直在搞邮件这块,本来我们邮件发送是用的腾讯免费的企业邮箱,邮件功能没有问题,但是由于邮件的限制,如下:
这些限制导致我们的部分客户是收不到邮件的,哪怕付费,这样的固定频率限制也是无法解决的,可以说我们国内的邮件厂商都是这样,而国外的却要收费。
那么问题来了,如何突破发送邮件的频率限制?
1. 成为该企业用户的白名单,也就是说有关系,让邮件厂商后台开放就行
2. 自己搭建邮件服务器,其实这个就是最实在的
周末花了两天时间搭建了邮件服务器,也走了不少弯路,那么咱们今天就来说说
我自己搭了两款,一款是sendMail,这个搭建过程十分简单,一步一步安装,然后解析一下域名就能发送,sendMail只限于linux部署
而我们做java的接触的最多的就是apache的各大开源组件,而apache恰恰提供了邮件服务,那就是james
james目前已经更新到了3.0的beta5版本,这个版本不是稳定版的
而且在jdk7+会有bug存在,我也试过的确会报错
既然3.0还没有稳定版本并且带有bug,而我们仅仅只需要收发邮件,那么使用2.3的稳定版本是当然没有问题的
好!那我们现在开始使用jame2.3.2的稳定版本来做我们的邮件服务器:
首先需要在linux上安装jdk,我们使用的是JDK7(安装步骤略)
邮件服务器的smtp使用25端口,必须保证此端口没有被占用
如果被占用了,关闭即可
推荐如下命令:
#service postfix stop
#chkconfig postfix off
使用ftp工具把james-2.3.2的压缩包上传至服务器:
解压缩并且重命名后:
进入bin目录,并且运行run.sh
哎哟,发现报错,没有这个命令
没关系,我们给phoenix.sh加上权限即可
然后服务器启动成功!
接下来我们就来进行james的相关配置:
ctrl+c 可以退出运行着的后台,然后我们进入以下目录
修改config.xml这个配置文件
找到并且修改这段配置
改为:
autodetct:true 表示自动侦测主机名,设成false会使用指定的server name
autodetectIP:true 表示会为你的servername加上ip,所以直接false就行
servername就改成你所需要的域名就行
注释掉此段代码
配置DNS Server,查看DNS
再查看主机dns
然后再设置如下:
找到并且注释这段代码
然后再修改hosts
然后我们在来优化一下James内存使用,修改此目录下的这个文件
改成此配置即可
最后在bin下的phoenix.sh中添加如下配置
配置完后reboot一下
computer rebooting... ...
重启完后启动james,sh run.sh
这个时候启动完毕,james配置成功。这个时候,我们还是需要用户的,没有用户就不能不收发邮件了
修改用户名密码,这个主要用来登录james进行相关操作的
修改完后保存,这个时候我们就要添加用户了
先登录连接上james,但是发现命令不存在
那么直接安装一下即可
再次登录发现成功
james主要提供了如下命令,看名字就知道怎么用,十分简单
按照命令添加用户
OK,至此所以配置完毕,我们使用javamail来测试一下吧!
测试发送到163,搜狐,以及qq邮箱,163可以接受,而搜狐和qq不能接受,设置白名单就行
最终受到邮件就是这样的,红框匹配james中新增加的用户以及域名
关于发送的邮件被其他邮件厂商当成垃圾邮件,这个暂时没有解决,如果哪位大侠知道请随时指点一二!
以上是关于搭建一个邮件服务器 James claros inTouch 就发送不了邮件到外网,下面的是James的log的主要内容,如果未能解决你的问题,请参考以下文章