Apache James配置个人笔记(完整解决DNS问题), 网页版的参考 Claros In Touch webmail(Pop3/IMAP)
2016-04-11 23:15
706 查看
Apache James配置个人笔记(完整解决DNS问题)
Claros In Touch是一个功能强大,多协议支持的webmail(Pop3/IMAP)系统 (后续补充)
经过一番的辛苦努力,终于把James 配置搞定啦,好记性不如烂笔头啊,赶紧记下我的成功经过,以备以后查阅!
首先要做的就是配置域名的MX 记录啦:
先添加一条A记录:
mail.abc.com 指向 你的服务器IP!
然后添加域名的MX 记录,指向mail.abc.com A 记录( 即域名MX 记录的值为mail.abc.com).
OK ,域名的配置就完成啦!
接下来安装配置James :
James 不需要编译安装,解压即可以使用,把james 下载来后,必须先启动一下!
进入James 根目录下的bin 目录,启动:
127.0.0.1[bin]$ ./run.sh
Log 如下:
127.0.0.1[bin]$ ./run.sh
Using PHOENIX_HOME: /usr/local/james-2.3.2
Using PHOENIX_TMPDIR: /usr/local/james-2.3.2/temp
Using JAVA_HOME: /home/java/jdk1.6.0_11
Running Phoenix:
Phoenix 4.2
James Mail Server 2.3.2
Remote Manager Service started plain:4555
POP3 Service started plain:110
SMTP Service started plain:25
NNTP Service started plain:119
FetchMail Disabled
JVM exiting abnormally. Shutting down Phoenix.
然后按Ctrl+C 停止。
第一次运行后,系统会在 apps 目录下面生成一些初始化的配置文件。如果第一次运行有问题,用 netstat 检查一下是否有系统默认的端口被占用了,比如 110,25 等。
进入配置文件目录修改config.xml 文件:
127.0.0.1 [SAR-INF]$ pwd
/usr/local/james-2.3.2/apps/james/SAR-INF
127.0.0.1 [SAR-INF]$ vi config.xml
查找替换所有的 localhost 为你的域名,比如 abc.com
查找所有 autodetect 属性,修改为 false 。 AutodetectIP 也设为 false.
vim命令 :%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky
注释掉
<mailet match="RemoteAddrNotInNetwork=127.0.0.1" class="ToProcessor>
<processor> relay-denied </processor>
<notice>550 - Requested action not taken: relaying denied</notice>
</mailet>
配置 DNS Server ,由于我未配置自己的 DNS 服务器,所以使用 Google 的 Public
DNS :
如果是自己的服务器一般都有dns 查看dns地址:cat /etc/resolv.conf, 没有就用一下公共的吧
<dnsserver>
<servers>
<server>114.114.114.114</server> <!-- 国内公共DNS,比google的要快点 -->
<server>8.8.8.8</server>
<server>8.8.4.4</server>
</servers>
</dnsserver>
设置 autodiscover 为 false
注意 ,设置 DNS 这步很重要,发送邮件不成功的问题经常会出在这里!
有些文章说 ping 域名提供商管理设置的域名 DNS 来获得 IP ,我试过,这种方法基本上是不行了,所以我使用 Google 的Public
DNS 。
当然,也可以自己做 DNS 服务器,使用 Bind 则可,但其麻烦程度不敢苟同,不建议新手使用!
配置 smtp server , pop3 server 等
查找所有 myMailServer, 替换为你的域名。如:
<helloName autodetect="false">myMailServer</helloName> ,将 myMailServer 修改为你的域名。比如: abc.com
注释以下的语句:
<mailet match="RemoteAddrNotInNetwork=127.0.0.1" class="ToProcessor">
<processor> relay-denied </processor>
<notice>550 - Requested action not taken: relaying denied</notice>
</mailet>
打开 smtp 认证
<authRequired>true</authRequired>
smtp 认证的作用在于不让未能授权的人使用你的邮件服务器发送垃圾邮件,在 <servername></servername> 里指定哪些域名可以使用这个邮件服务器,如:
<servername>abc.com</servername>
<servername>abc.com.cn</servername>
则当发送人地址为 XXX.abc.com 或者 XXX.abc.com.cn 时才能通过,如果写成 XXX.bbc.com 的话就不会通过验证,这种方式就禁止了不法人士使用啦!
修改 root 口令。 account login="root" password="mypassword"
启动 James( 使用 Phoenix.sh) :
./Phoenix.sh start
最后使用 telnet 添加邮件用户 ( 具体命令在 telnet 后输入 help 查看 ) :
telnet server-name 4555
转载来自: http://181054867.iteye.com/blog/777797 支持原作!
最近公司发布了一个JAMES邮件服务器, 第二天早一来, 发现spool里面有几万的垃圾邮件.
在网上仔细查了一下, 一般都是自定义一个matcher和一个mailet, 如:
Java代码
package com.eazitour.mailet;
import java.util.Collection;
import java.util.Iterator;
import java.util.Vector;
import javax.mail.MessagingException;
import org.apache.mailet.GenericMatcher;
import org.apache.mailet.Mail;
import org.apache.mailet.MailAddress;
public class FilterSenderMatcher extends GenericMatcher {
private static String[] hosts = null;
@Override
public Collection match(Mail mail) throws MessagingException {
//System.out.println("getCondition:" + getCondition());
if (hosts == null && getCondition() != null) {
hosts = getCondition().split(",");
}
if (hosts == null || hosts.length == 0 || getCondition() == null) {
return mail.getRecipients();
}
MailAddress mailAddress = mail.getSender();
//System.out.println("mailAddress.toString():" + mailAddress.toString());
for (String strTemp : hosts) {
if (mailAddress.toString().toLowerCase().indexOf(strTemp) != -1) {
//System.out.println(mailAddress.toString().toLowerCase().indexOf(strTemp));
return mail.getRecipients();
}
}
//mail.getRecipients().clear();//code1
return null;
}
}
可发现这种做法根本就过滤不了后缀是本服务器域名的邮件, 但JAMES包下的:org\apache\james\transport\matchers很多matche是这种写法. 经过尝试, 得把code1处的注释打开才可以过滤.
正确的操作步骤:
1.编写自己的Matcher, 上面一段code(把code1处的注释打开), 和Mailet.
Java代码
package com.eazitour.mailet;
import javax.mail.MessagingException;
import org.apache.mailet.GenericMailet;
import org.apache.mailet.Mail;
import org.apache.mailet.MailAddress;
public class FilterSenderMailet extends GenericMailet {
@Override
public void service(Mail mail) throws MessagingException {
// MailAddress ma = mail.getSender();
// System.out.println("sender:"+ma.toInternetAddress().toString());
}
}
2. 把这两个JAVA类打包成JAR包, 放到james-2.3.2\apps\james\SAR-INF\lib目录下, 同时也要把james-2.3.2\apps\james.sar里面的james-2.3.2.jar,mail-1.4.1.jar,mailet-2.3.jar,mailet-api-2.3.jar这些包解压出来也放到这个目录下面, 不然会报找不到类的异常.
3.修改config.xml文件, 在<mailetpackages>后面添加:<mailetpackage>com.eazitour.mailet</mailetpackage>, 在<matcherpackages>后面添加:<matcherpackage>com.eazitour.mailet</matcherpackage>, 即是刚才的那两个类的包名.
4.修改config.xml文件, 添加过滤,在<spoolmanager>下面,<mailet match="All" class="PostmasterAlias"/>的后面添加:<mailet match="FilterSenderMatcher=@eazitour.com,@eazitour.cn" class="FilterSenderMailet"/>, FilterSenderMatcher即为Mathcer的类的名字,
FilterSenderMailet也mailet的类的名字, 它会在上面配置的包下面去找这两个类, 先通过matcher, 如果matcher返回的不是null的collection, 刚会下一步调用mailet; 如果matcher返回null, 但mail.getRecipients()不为null, 邮件会发送成功, 但不调用mailet, 所以code1处的注释要打开才不会发送.
OK,大功告成!
Claros In Touch是一个功能强大,多协议支持的webmail(Pop3/IMAP)系统 (后续补充)
经过一番的辛苦努力,终于把James 配置搞定啦,好记性不如烂笔头啊,赶紧记下我的成功经过,以备以后查阅!
首先要做的就是配置域名的MX 记录啦:
先添加一条A记录:
mail.abc.com 指向 你的服务器IP!
然后添加域名的MX 记录,指向mail.abc.com A 记录( 即域名MX 记录的值为mail.abc.com).
OK ,域名的配置就完成啦!
接下来安装配置James :
James 不需要编译安装,解压即可以使用,把james 下载来后,必须先启动一下!
进入James 根目录下的bin 目录,启动:
127.0.0.1[bin]$ ./run.sh
Log 如下:
127.0.0.1[bin]$ ./run.sh
Using PHOENIX_HOME: /usr/local/james-2.3.2
Using PHOENIX_TMPDIR: /usr/local/james-2.3.2/temp
Using JAVA_HOME: /home/java/jdk1.6.0_11
Running Phoenix:
Phoenix 4.2
James Mail Server 2.3.2
Remote Manager Service started plain:4555
POP3 Service started plain:110
SMTP Service started plain:25
NNTP Service started plain:119
FetchMail Disabled
JVM exiting abnormally. Shutting down Phoenix.
然后按Ctrl+C 停止。
第一次运行后,系统会在 apps 目录下面生成一些初始化的配置文件。如果第一次运行有问题,用 netstat 检查一下是否有系统默认的端口被占用了,比如 110,25 等。
进入配置文件目录修改config.xml 文件:
127.0.0.1 [SAR-INF]$ pwd
/usr/local/james-2.3.2/apps/james/SAR-INF
127.0.0.1 [SAR-INF]$ vi config.xml
查找替换所有的 localhost 为你的域名,比如 abc.com
查找所有 autodetect 属性,修改为 false 。 AutodetectIP 也设为 false.
vim命令 :%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky
注释掉
<mailet match="RemoteAddrNotInNetwork=127.0.0.1" class="ToProcessor>
<processor> relay-denied </processor>
<notice>550 - Requested action not taken: relaying denied</notice>
</mailet>
配置 DNS Server ,由于我未配置自己的 DNS 服务器,所以使用 Google 的 Public
DNS :
如果是自己的服务器一般都有dns 查看dns地址:cat /etc/resolv.conf, 没有就用一下公共的吧
<dnsserver>
<servers>
<server>114.114.114.114</server> <!-- 国内公共DNS,比google的要快点 -->
<server>8.8.8.8</server>
<server>8.8.4.4</server>
</servers>
</dnsserver>
设置 autodiscover 为 false
注意 ,设置 DNS 这步很重要,发送邮件不成功的问题经常会出在这里!
有些文章说 ping 域名提供商管理设置的域名 DNS 来获得 IP ,我试过,这种方法基本上是不行了,所以我使用 Google 的Public
DNS 。
当然,也可以自己做 DNS 服务器,使用 Bind 则可,但其麻烦程度不敢苟同,不建议新手使用!
配置 smtp server , pop3 server 等
查找所有 myMailServer, 替换为你的域名。如:
<helloName autodetect="false">myMailServer</helloName> ,将 myMailServer 修改为你的域名。比如: abc.com
注释以下的语句:
<mailet match="RemoteAddrNotInNetwork=127.0.0.1" class="ToProcessor">
<processor> relay-denied </processor>
<notice>550 - Requested action not taken: relaying denied</notice>
</mailet>
打开 smtp 认证
<authRequired>true</authRequired>
smtp 认证的作用在于不让未能授权的人使用你的邮件服务器发送垃圾邮件,在 <servername></servername> 里指定哪些域名可以使用这个邮件服务器,如:
<servername>abc.com</servername>
<servername>abc.com.cn</servername>
则当发送人地址为 XXX.abc.com 或者 XXX.abc.com.cn 时才能通过,如果写成 XXX.bbc.com 的话就不会通过验证,这种方式就禁止了不法人士使用啦!
修改 root 口令。 account login="root" password="mypassword"
启动 James( 使用 Phoenix.sh) :
./Phoenix.sh start
最后使用 telnet 添加邮件用户 ( 具体命令在 telnet 后输入 help 查看 ) :
telnet server-name 4555
转载来自: http://181054867.iteye.com/blog/777797 支持原作!
JAMES 垃圾邮件过滤
最近公司发布了一个JAMES邮件服务器, 第二天早一来, 发现spool里面有几万的垃圾邮件. 在网上仔细查了一下, 一般都是自定义一个matcher和一个mailet, 如:
Java代码
package com.eazitour.mailet;
import java.util.Collection;
import java.util.Iterator;
import java.util.Vector;
import javax.mail.MessagingException;
import org.apache.mailet.GenericMatcher;
import org.apache.mailet.Mail;
import org.apache.mailet.MailAddress;
public class FilterSenderMatcher extends GenericMatcher {
private static String[] hosts = null;
@Override
public Collection match(Mail mail) throws MessagingException {
//System.out.println("getCondition:" + getCondition());
if (hosts == null && getCondition() != null) {
hosts = getCondition().split(",");
}
if (hosts == null || hosts.length == 0 || getCondition() == null) {
return mail.getRecipients();
}
MailAddress mailAddress = mail.getSender();
//System.out.println("mailAddress.toString():" + mailAddress.toString());
for (String strTemp : hosts) {
if (mailAddress.toString().toLowerCase().indexOf(strTemp) != -1) {
//System.out.println(mailAddress.toString().toLowerCase().indexOf(strTemp));
return mail.getRecipients();
}
}
//mail.getRecipients().clear();//code1
return null;
}
}
可发现这种做法根本就过滤不了后缀是本服务器域名的邮件, 但JAMES包下的:org\apache\james\transport\matchers很多matche是这种写法. 经过尝试, 得把code1处的注释打开才可以过滤.
正确的操作步骤:
1.编写自己的Matcher, 上面一段code(把code1处的注释打开), 和Mailet.
Java代码
package com.eazitour.mailet;
import javax.mail.MessagingException;
import org.apache.mailet.GenericMailet;
import org.apache.mailet.Mail;
import org.apache.mailet.MailAddress;
public class FilterSenderMailet extends GenericMailet {
@Override
public void service(Mail mail) throws MessagingException {
// MailAddress ma = mail.getSender();
// System.out.println("sender:"+ma.toInternetAddress().toString());
}
}
2. 把这两个JAVA类打包成JAR包, 放到james-2.3.2\apps\james\SAR-INF\lib目录下, 同时也要把james-2.3.2\apps\james.sar里面的james-2.3.2.jar,mail-1.4.1.jar,mailet-2.3.jar,mailet-api-2.3.jar这些包解压出来也放到这个目录下面, 不然会报找不到类的异常.
3.修改config.xml文件, 在<mailetpackages>后面添加:<mailetpackage>com.eazitour.mailet</mailetpackage>, 在<matcherpackages>后面添加:<matcherpackage>com.eazitour.mailet</matcherpackage>, 即是刚才的那两个类的包名.
4.修改config.xml文件, 添加过滤,在<spoolmanager>下面,<mailet match="All" class="PostmasterAlias"/>的后面添加:<mailet match="FilterSenderMatcher=@eazitour.com,@eazitour.cn" class="FilterSenderMailet"/>, FilterSenderMatcher即为Mathcer的类的名字,
FilterSenderMailet也mailet的类的名字, 它会在上面配置的包下面去找这两个类, 先通过matcher, 如果matcher返回的不是null的collection, 刚会下一步调用mailet; 如果matcher返回null, 但mail.getRecipients()不为null, 邮件会发送成功, 但不调用mailet, 所以code1处的注释要打开才不会发送.
OK,大功告成!
相关文章推荐
- LeetCode Climbing Stairs 70
- Z-Stack分析--zmain_vdd_check()
- MySQL导入.sql文件时出现" failed to open file"错误
- HDFS源码分析之EditLogTailer
- codeforce 606C Sorting Railway Cars
- 赋予人工智能记忆的人,带你梳理深度学习核心算法
- Codeforces Beta Round #8 A. Train and Peter KMP
- Aizu 0189 Convenient Location【floyd】
- Component SAP_GWFND is locked against OCS package
- 山东省第一届ACM省赛 I SDUT 2159 Ivan comes again!(STL-set)
- 山东省第一届ACM省赛 F SDUT 2156 Fairy tale
- Mybaits 批量操作
- 多级导航,转自http://blog.csdn.net/rabbitter/article/details/51125337
- Aizu 2170 Marked Ancestor【并查集】
- 我离baidu.com有几跳
- Main
- MainHome
- Main
- VolleyAir
- lightoj 1076 - Get the Containers 二分答案