iLife's 博客http://blog.youkuaiyun.com/fei1502816
最近公司做的一个项目,用户注册需要邮箱验证,本想调用别人的服务器,调用apache自带的email包实现!
但Boos发话,要自己搭建一个邮箱服务器。。。
先前使用了winMail,但是收费的,最终不了了之
后续又看了sendMail,只不过sendMail是在linux下,而我们的项目是部署在windowss 平台下...
最终选定了Apache James,个人认为还算好用
在网上整理了整理,最终还是想写个笔记,分享给大家
1.环境搭建
下载JDK
下载james 到apache网站下载:http://apache.freelamp.com/james/server/apache-james-2.3.2.zip
下载javamail相关jar包
如果下载不到,可到优快云资源里去下载,专门上传了一份
james-binary-2.3.1.zip:http://download.youkuaiyun.com/detail/fei1502816/6241713
mail.jar:http://download.youkuaiyun.com/detail/fei1502816/6241757
2. 启动james
进入james安装目录:C:\james-2.3.2\bin
运行run.bat
默认我们不更改C:\james-2.3.2\apps\james\SAR-INF 下的config.xml
如果不修改,邮件服务器的域名默认为localhost,则跳过第三步骤
注意:C:\james-2.3.2\apps\james\SAR-INF 下的config.xml配置文件是在james第一次启动时生成的
3. 修改james-2.3.2\apps\james\SAR-INF\config.xml配置文件
(1)查找替换所有的localhost为你的域名,比如bjservice.com
【如果你没有一个域名,那么可以在system32/drivers/etc/hosts文件中添加一个伪域名用于测试, 192.168.0.45 bjservice.com】
(2)找到
……
<postmaster>Postmaster@localhost</postmaster>
……
<servernames autodetect="true" autodetectIP="true">
<servername>localhost</servername>
</servernames>
……
把localhost该成你自己想要的邮箱域名, 把自动探测IP属性设置为“false”这里假设改成 bjservice.com 如果开了一个帐号 bjxc ,那么他的邮件地址就是 bjxc@bjservice.com 修改结果如下:
……
<postmaster>Postmaster@bjservice.com</postmaster>
……
<servernames autodetect="false" autodetectIP="false">
<servername>bjservice.com</servername>
</servernames>
……
(3)注释掉以下代码
<!--mailet match="RemoteAddrNotInNetwork=127.0.0.1" class="ToProcessor">
<processor> relay-denied </processor>
<notice>550 - Requested action not taken: relaying denied</notice>
</mailet-->
(4)配置DNS Server
在cmd中用ipconfig /all 命令查看你的dns server ip
DNS Servers . . . . . . . . . . . : 202.106.46.151
202.106.195.68
如果是伪域名,还需要将本机地址也列进去,最好放到第一位。<server>192.168.0.45</server>
添加如下:
<dnsserver>
<servers>
<server>192.168.0.45</server>
<server>202.106.46.151</server>
<server>202.106.195.68</server>
</servers>
<autodiscover>false</autodiscover>
<authoritative>false</authoritative>
<maxcachesize>50000</maxcachesize>
</dnsserver>
(5)配置smtp server,pop3 server等
查找所有myMailServer,替换为你的域名。如:
<helloName autodetect="false">myMailServer</helloName>,将myMailServer修改为你的域名。比如:bjservice.com
(6)设置smtpserver
打开smtp认证 <authRequired>true</authRequired>
James服务配置完成
注:以上设置好之后,重启james服务
四.创建邮件帐号
进入控制台命令:C:\james\bin>telnet localhost 4555
然后将进入:JAMES Remote Administration Tool 2.3.1
Please enter your login and password
Login id:
默认的登陆id 为root 密码也为 root ,登陆成功后结果如下:
创建新用户的命令是:adduser username password,如下图
账号创建成功后,退出管理器我们就可以开始我们的Mail应用了。
代码如下:
package test;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;
public class MyFirstMail {
/**
* 发送邮件
* @param contents 邮件内容
* @param toEmail 收件人
* @throws EmailException
*/
public static void sendMail(String contents, String toEmail) throws EmailException {
try {
HtmlEmail email = new HtmlEmail();
// 设定smtp服务器
email.setHostName("192.168.0.45");
// 设定收件人
email.addTo(toEmail);
//发送的邮件地址
email.setFrom("bjtest@bjservice.com", "xxx");
// 设定smtp服务器的认证资料信息
email.setAuthentication("bjtest", "123456");
email.setSubject("标题");
// 设定是否使用SSL
//email.setSSL(Boolean.TRUE);
// 设定SSL端口gmail端口465、其它25
//email.setSslSmtpPort("465");
//设定Debug输出信息
//email.setDebug(true);
//设定内容的语言集
email.setCharset("UTF-8");
email.setHtmlMsg(contents);
email.send();
System.out.println("邮件发送成功");
} catch (Exception e) {
System.out.println("邮件发送失败");
e.printStackTrace();
}
}
public static void main(String[] args) throws EmailException {
String str = "<html>您好,xxx!</html>";
String email="xxx@126.com";
sendMail(str,email);;
}
}
OK,大功告成!!!
路的尽头仍然是路 只要你愿意走...
iLiFe's 博客http://blog.youkuaiyun.com/fei1502816