项目部署环境:Linux
需要使用到:Apache James邮件服务器
作用:个人笔记以后可以来看看(也可以提供给新手一些帮助)
正式开始。。
[b]提前工作:[/b]
需要下载所需要的软件
1.[url]http://james.apache.org/[/url] (我这里下载的是 apache-james-2.3.2.tar.gz)
2.必须的环境应该有的比如jdk啊,之类的..
3.由于Apache James邮件服务需要用到1024以下的端口,因此请用root用户登录进行部署。
[b]安装过程:[/b]
1.把James上传到服务器路径(我用的是/usr/local/)
2.需要使用到命令(这些这就是解压James包,James是可以直接解压使用的)
# cd /usr/local
# tar zxvf james apache-james-2.3.2.tar.gz
# mv james-2.3.2 /usr/local/james
# cd /usr/local/james
# cd bin
# chmod +x run.sh
# chmod +x phoenix
注意不修改可能不能运行
可以运行了
# ./run.sh
好了如果这里你的窗口打印出了一下内容表示你安装正常进行.,这时james已经运行…
[img]http://dl.iteye.com/upload/attachment/0074/0525/1c12b357-8d53-3aef-b081-68621485ab45.jpg[/img]
[b]注意事项[/b]
如果你的窗口不是这样的那表示启动失败,可能的原因有这些。
James 启动时,其SMTP 服务默认在 25 端口启动,POP3 服务默认在 110 端口启动, NNTP 服务默认在 119 端口启动, 请确保这些端口未被占用。Linux下查过这些端口是否被占用的命令是:lsof -i:端口号。
[img]http://dl.iteye.com/upload/attachment/0074/0542/24ee15f9-4f16-306c-a097-050b7f37cb15.jpg[/img]
这表示25端口正在被sendmail服务占用
一般RedHat的系统安装时都会默认安装了sendmail邮件服务,因此在部署Apache James时,需要把sendmail关闭。可以通过以下方法来关闭sendmail,以防止系统重启时又自动启动sendmail服务。
1)用chkconfig --list sendmail命令查看sendmail的情况:
# chkconfig --list sendmail
sendmail 0:关闭 1:关闭 2:启用 3:关闭 4:启用 5:启用 6:关闭
2)通过chkconfig sendmail off命令来关闭sendmail的启动:
# chkconfig sendmail off
3)这时再用chkconfig --list sendmail命令可以查看到sendmail的所有启动级别都已经关闭了:
# chkconfig --list sendmail
sendmail 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭
这样,即使重新启动Linux系统,sendmail服务也不会自动启动了。
好了解决了这些问题。再次启动你的James试试应该就能成功了。
[b]修改配置[/b]
好了启动成功后会生成一个配置文件config.xml 目录在../james-2.3.2/apps/james/SAR-INF
关键的修改主要是这些:
A.找到<servernames autodetect="true" autodetectIP="true"> 设成
autodetect="false" autodetectIP="false"
autodetct设为true会自动侦测你的主机名,设成false会用你指定的server name。
autodetectIP设为true会为你的servername加上ip。
B.设置servername 将默认的为localhost改成你的server名字 如 smtp.51ly.com:
<servername>smtp.51ly.com</servername>
然后修改Linux的hosts主机设置文件:
# vi /etc/hosts
在打开的文件添加一行,然后保存:
192.168.1.177 king.cn king
注意:第一个为IP地址 第二个为主机域名 第三个为主机名称
提示:名字后面应该要加上.com或者.cn这样163等邮件服务器才不会拒绝的。
C.注释掉
<mailet match="RemoteAddrNotInNetwork=127.0.0.1" class="ToProcessor>
<processor> relay-denied </processor>
<notice>550 - Requested action not taken: relaying denied</notice>
</mailet>
D.配置DNS Server,先通过netstat命令查看dns配置
# netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
找到<dnsserver>,在<servers>里最前面添加一行: <server>192.168.1.0</server> ,同时设置 autodiscover为false。
<dnsserver>
<servers>
<!--Enter ip address of your DNS server, one IP address per server -->
<!-- element. -->
<!--
<server>127.0.0.1</server>
-->
<server>10.168.0.10</server>
</servers>
<!-- Change autodiscover to false if you would like to turn off autodiscovery -->
<!-- and set the DNS servers manually in the <servers> section -->
<autodiscover>false</autodiscover>
<authoritative>false</authoritative>
<!-- Maximum number of entries to maintain in the DNS cache -->
<maxcachesize>50000</maxcachesize>
</dnsserver>
[b]优化(借鉴)[/b]
优化一下James内存,在../james/bin/phoenix.sh加入:
# Set Heap Size 2007-0818,fix OutOfMemory bug while transporting big mail
PHOENIX_JVM_OPTS="$PHOENIX_JVM_OPTS -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M"
修改../james/conf/wrapper.conf的jvm配置,设置初始内存128M,最大内存512M
# Initial Java Heap Size (in MB)
#wrapper.java.initmemory=16
wrapper.java.initmemory=128
# Maximum Java Heap Size (in MB)
#wrapper.java.maxmemory=64
wrapper.java.maxmemory=512
还有如果要发送外网邮件需要知道你所在的局域网的外部端口是否被封掉,如果封掉了,和网管说说。
到这里配置就结束了。下面给出Java关键代码。(仅供参考)
好了就写到这里吧,第一次写文章多多包涵,可以给我以后留一个回忆,希望能给初次接触到James的人带来帮助,也希望懂的人,给我提出意见,大家互相学习。。
需要使用到:Apache James邮件服务器
作用:个人笔记以后可以来看看(也可以提供给新手一些帮助)
正式开始。。
[b]提前工作:[/b]
需要下载所需要的软件
1.[url]http://james.apache.org/[/url] (我这里下载的是 apache-james-2.3.2.tar.gz)
2.必须的环境应该有的比如jdk啊,之类的..
3.由于Apache James邮件服务需要用到1024以下的端口,因此请用root用户登录进行部署。
[b]安装过程:[/b]
1.把James上传到服务器路径(我用的是/usr/local/)
2.需要使用到命令(这些这就是解压James包,James是可以直接解压使用的)
# cd /usr/local
# tar zxvf james apache-james-2.3.2.tar.gz
# mv james-2.3.2 /usr/local/james
# cd /usr/local/james
# cd bin
# chmod +x run.sh
# chmod +x phoenix
注意不修改可能不能运行
可以运行了
# ./run.sh
好了如果这里你的窗口打印出了一下内容表示你安装正常进行.,这时james已经运行…
[img]http://dl.iteye.com/upload/attachment/0074/0525/1c12b357-8d53-3aef-b081-68621485ab45.jpg[/img]
[b]注意事项[/b]
如果你的窗口不是这样的那表示启动失败,可能的原因有这些。
James 启动时,其SMTP 服务默认在 25 端口启动,POP3 服务默认在 110 端口启动, NNTP 服务默认在 119 端口启动, 请确保这些端口未被占用。Linux下查过这些端口是否被占用的命令是:lsof -i:端口号。
[img]http://dl.iteye.com/upload/attachment/0074/0542/24ee15f9-4f16-306c-a097-050b7f37cb15.jpg[/img]
这表示25端口正在被sendmail服务占用
一般RedHat的系统安装时都会默认安装了sendmail邮件服务,因此在部署Apache James时,需要把sendmail关闭。可以通过以下方法来关闭sendmail,以防止系统重启时又自动启动sendmail服务。
1)用chkconfig --list sendmail命令查看sendmail的情况:
# chkconfig --list sendmail
sendmail 0:关闭 1:关闭 2:启用 3:关闭 4:启用 5:启用 6:关闭
2)通过chkconfig sendmail off命令来关闭sendmail的启动:
# chkconfig sendmail off
3)这时再用chkconfig --list sendmail命令可以查看到sendmail的所有启动级别都已经关闭了:
# chkconfig --list sendmail
sendmail 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭
这样,即使重新启动Linux系统,sendmail服务也不会自动启动了。
好了解决了这些问题。再次启动你的James试试应该就能成功了。
[b]修改配置[/b]
好了启动成功后会生成一个配置文件config.xml 目录在../james-2.3.2/apps/james/SAR-INF
关键的修改主要是这些:
A.找到<servernames autodetect="true" autodetectIP="true"> 设成
autodetect="false" autodetectIP="false"
autodetct设为true会自动侦测你的主机名,设成false会用你指定的server name。
autodetectIP设为true会为你的servername加上ip。
B.设置servername 将默认的为localhost改成你的server名字 如 smtp.51ly.com:
<servername>smtp.51ly.com</servername>
然后修改Linux的hosts主机设置文件:
# vi /etc/hosts
在打开的文件添加一行,然后保存:
192.168.1.177 king.cn king
注意:第一个为IP地址 第二个为主机域名 第三个为主机名称
提示:名字后面应该要加上.com或者.cn这样163等邮件服务器才不会拒绝的。
C.注释掉
<mailet match="RemoteAddrNotInNetwork=127.0.0.1" class="ToProcessor>
<processor> relay-denied </processor>
<notice>550 - Requested action not taken: relaying denied</notice>
</mailet>
D.配置DNS Server,先通过netstat命令查看dns配置
# netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
找到<dnsserver>,在<servers>里最前面添加一行: <server>192.168.1.0</server> ,同时设置 autodiscover为false。
<dnsserver>
<servers>
<!--Enter ip address of your DNS server, one IP address per server -->
<!-- element. -->
<!--
<server>127.0.0.1</server>
-->
<server>10.168.0.10</server>
</servers>
<!-- Change autodiscover to false if you would like to turn off autodiscovery -->
<!-- and set the DNS servers manually in the <servers> section -->
<autodiscover>false</autodiscover>
<authoritative>false</authoritative>
<!-- Maximum number of entries to maintain in the DNS cache -->
<maxcachesize>50000</maxcachesize>
</dnsserver>
[b]优化(借鉴)[/b]
优化一下James内存,在../james/bin/phoenix.sh加入:
# Set Heap Size 2007-0818,fix OutOfMemory bug while transporting big mail
PHOENIX_JVM_OPTS="$PHOENIX_JVM_OPTS -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M"
修改../james/conf/wrapper.conf的jvm配置,设置初始内存128M,最大内存512M
# Initial Java Heap Size (in MB)
#wrapper.java.initmemory=16
wrapper.java.initmemory=128
# Maximum Java Heap Size (in MB)
#wrapper.java.maxmemory=64
wrapper.java.maxmemory=512
还有如果要发送外网邮件需要知道你所在的局域网的外部端口是否被封掉,如果封掉了,和网管说说。
到这里配置就结束了。下面给出Java关键代码。(仅供参考)
try {
//Mails email = getMailsXML(getPath(companyId)); // 从配置文件获取
// 本来是从配置文件获取的,这里测试就暂时把邮件写死
Mails email = new Mails();
email.setSenderEmailAddr("order-update@51ly.com");
email.setSmtpUserName("order-update");
email.setSmtpPassword("123456");
email.setSmtpServerName("smtp.51ly.com");
//MailUtil.props = new Properties();
// 存储发送邮件服务器的信息
//MailUtil.props.put("mail.smtp.host", email.getSmtpServerName());
// 同时通过验证
//MailUtil.props.put("mail.smtp.auth", "true");
// 根据属性新建一个邮件会话,null参数是一种Authenticator(验证程序) 对象
Session s = Session.getInstance(MailUtil.props, null);
// 设置调试标志,要查看经过邮件服务器邮件命令,可以用该方法
s.setDebug(false);
// 由邮件会话新建一个消息对象
Message message = new MimeMessage(s);
// 设置发件人
Address from = new InternetAddress(email.getSenderEmailAddr());
message.setFrom(from);
// 设置收件人
Address to = new InternetAddress("88888888@qq.com");
message.setRecipient(Message.RecipientType.TO, to);
// 设置主题
message.setSubject("测试邮件");
// 设置信件内容
// message.setText(mailConcept);
message.setContent(mailConcept, "text/html;charset=GB2312");
// 设置发信时间
message.setSentDate(new Date());
// 存储邮件信息
Transport transport = s.getTransport("smtp");
// 要填入你的用户名和密码;
transport.connect(email.getSmtpServerName(), email.getSmtpUserName(),
email.getSmtpPassword());
// 发送邮件,其中第二个参数是所有已设好的收件人地址
transport.sendMessage(message, message.getAllRecipients());
transport.close();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("邮件发送失败,请检查系统邮箱设置! ");
}
好了就写到这里吧,第一次写文章多多包涵,可以给我以后留一个回忆,希望能给初次接触到James的人带来帮助,也希望懂的人,给我提出意见,大家互相学习。。