前言
之前学Java Web的时候,看到很多教程都有介绍JavaMail,看上去很心动。这个功能还是很好用的,比如在登录注册的时候,发一份包含链接的邮箱到用户邮箱,用户打开邮箱点击链接完成验证。但是教程介绍的都是用QQ、163这类已有的邮件服务器,用这些邮件服务器有个缺点,每天发送邮件的次数有上限,超过了就不给用。今天周六,正好有空,自己搭建了一个邮件服务器,邮件随便发,无上限,妥妥的~哈哈哈
Ubuntu搭建Apache James邮件服务器
这里先介绍一下Apache James邮件服务器。Apache James,Apache Mail Enterprise Server的缩写,是一个用Java编写的开源SMTP和POP3邮件服务器,可以用来收、发电子邮件。我们今天的主角就是它。
1.下载James
到官网下载James,这里我下的是二进制稳定版的,第一次下的是2.3.2.1版,发现总是报错,后来下了2.3.2版就没问题了
2.上传压缩包
将上面下载下来的压缩包通过FTP客户端上传到服务器,我上传到服务器的/opt目录下,上传之前记得给予权限
chmod -R 777 opt
3.安装JDK
James是用Java写的,要运行当然少不了JDK,具体安装步骤我这里不细说,不懂的朋友可以看看我之前的博客Tomcat在Ubuntu中的安装和部署。我的JDK已经装好了,验证一下
4.解压压缩包
tar -zxvf james-binary-2.3.2.1.tar.gz
5.启动James服务器
进入到james的bin目录,运行run.sh脚本
sh run.sh
James服务器启动成功
6.修改配置文件
Ctrl+C停止当前运行的后台,进入/opt/james-2.3.2.1/apps/james/SAR-INF目录
cd /opt/james-2.3.2.1/apps/james/SAR-INF
修改配置文件
vim config.xml
- 修改域名配置
autodetct:false 表示使用指定的server name
autodetectIP:false 表示不会为你的servername加上ip
servername 就改成你所需要的域名就行
- 注释掉这段代码
- 然后再注释掉这段
这里配置局域网广播地址,目的是允许此网段的机子可以访问到这个邮件服务器,所以注释掉
- 配置dnsserver
查找ubuntu服务器配置的DNS
cat /etc/resolv.conf
把这两个IP记录下来
然后再配置SAR-INF下面的config.xml
- 修改james登录密码
7.修改hosts文件
上面配置了jehoiada.cn,所以需要修改一下hosts
vim /etc/hosts
8.重启James服务器
到这里我们就配置好了James,可以让它后台运行了
nohup ./run.sh &
9.添加用户
打开windows的控制台,输入
telnet [IP地址] 4555
提示输入用户名和密码,这个用户名和密码就是你刚刚在config.xml里面设置的
然后添加用户
adduser [用户名] [密码]
JavaMail创建和发送邮件
添加Maven依赖
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-email</artifactId>
<version>1.4</version>
</dependency>
JavaMail发送邮件,相当于邮件客户端
Properties props = new Properties();
// 开启debug调试
props.setProperty("mail.debug", "true");
// 发送服务器需要身份验证
props.setProperty("mail.smtp.auth", "true");
// 设置邮件服务器主机名
props.setProperty("mail.host", "邮件服务器主机名");
// 发送邮件协议名称
props.setProperty("mail.transport.protocol", "smtp");
Session session = Session.getInstance(props);
//邮件内容部分
Message msg = new MimeMessage(session);
msg.setSubject("hello");
msg.setText("hello world");
msg.setFrom(new InternetAddress("double@jehoiada.cn"));
//邮件发送者
msg.setFrom(new InternetAddress("发送人的邮箱地址"));
//发送邮件
Transport transport = session.getTransport();
transport.connect("smtp.qq.com", "发送人的邮箱地址", "你的邮箱密码");
transport.sendMessage(msg, new Address[] { new InternetAddress("接收人的邮箱地址") });
transport.close();