JavaMail是一种处理电子邮件的编程接口,它是Sun发布的用来处理email的API,通俗地讲,就是帮助我们用java代码实现邮件的发送和接收。
javamail在web开发中的应用
1.用户注册后,网站发送一封激活邮件验证
2.用户过生日,系统发送生日祝福邮件
3.将最新活动和优惠以邮件的形式告知会员
...
邮件开发中的基本术语
1.电子邮箱
电子邮箱(E-mail address)是用户在某个邮箱服务器上申请的一个帐号,用户使用邮箱服务器分配的帐号和内存空间,进行邮件的发送和保存。
2.邮箱服务器
就像安装了tomcat的电脑能充当web服务器一样,安装了邮件服务器软件的电脑就称为邮箱服务器,当然,用来作为服务器的主机,其硬件配置比普通电脑要好很多。网络上有很多提供邮件服务的厂商,他们有拥有专门的邮箱服务器,比如新浪、网易、搜狐等。这些服务器类似于现实生活中的邮局,负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中。
3.邮件收发协议
SMTP(simple mail transfer protocol),SMTP协议定义了通讯规则,它属于TCP/IP协议簇,帮助每台计算机在发送或中转信件时找到下一个目的地。通常把处理用户SMTP请求(邮件发送请求)的邮件服务器称之为SMTP服务器。
默认端口:25
POP3(Post Office Protocol - Version3)即“邮局协议版本3”,此协议主要用于支持客户端远程管理位于服务器上的邮件。服务器通过POP3把保存在服务器上的邮件发送到个人终端上。通常把处理用户POP3请求(邮件接收请求)的邮件服务器称之POP3服务器。
默认端口:110
我们可以使用邮箱服务器软件,比如易邮邮件服务器,搭建自己的服务器,接着我们可以在此服务器上申请邮箱,进行邮件收发。我们还可以使用foxmail、outlook等客户端软件来管理我们的邮箱,这样我们就无需打开QQ邮箱,网易邮箱等网页了。使用foxmail等客户端软件需要配置一下与邮箱对应的提供商的smtp服务器和pop3服务器。
JavaMail的简单使用
1.导入mail.jar包
2.使用java代码实现激活邮件的发送
代码如下:
package com.bbs.utils;
import java.util.Properties;
import java.util.UUID;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.Message.RecipientType;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import com.sun.mail.util.MailSSLSocketFactory;
/**
* 发送注册激活邮件的工具类
*
* @author holien
* @create_Time 2017年5月31日 下午8:24:08
*/
public class MailUtil {
/**
* @param toAddr:接收方邮箱
* @param code:使用UUID产生的随机激活码
*/
public static void sendEmail(String toAddr, String code) throws Exception {
String fromAddr = "707680958@qq.com"; // 发送方邮箱
String licenseCode = "menfeesxhkyebdgd"; // QQ邮箱的授权码
// 1.创建属性对象,本质就是属性文件的key-value
Properties properties = new Properties();
properties.put("mail.smtp.host", "smtp.qq.com"); // 设置邮件服务器
properties.put("mail.smtp.auth", "true"); // 打开认证
// QQ邮箱需要下面这段代码,使用SSL加密
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
properties.put("mail.smtp.ssl.enable", "true");
properties.put("mail.smtp.ssl.socketFactory", sf);
// 2.由发送者发起会话,并创建认证(发送者邮箱的帐号密码)
Session session = Session.getDefaultInstance(properties, new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(fromAddr, licenseCode);
}
});
// 3.创建邮件消息
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(fromAddr));
message.addRecipient(RecipientType.TO, new InternetAddress(toAddr));
message.setSubject("来自XXX网站的帐号激活");
String content = "<h1>帐号激活</h1><h3>请点击此链接完成帐号激活<a href='http://localhost:8080/miniBBS/activeUser?code=" + code
+ "'>http://localhost:8080/miniBBS/activeUser?code=" + code + "</a></h3>";
message.setContent(content, "text/html;charset=UTF-8");
//message.setText("https://www.baidu.com"); // 纯字符串文本
// 4.发送邮件
Transport.send(message);
}
/**
* @return UUID生成的随机32位激活码
*/
public static String getCode() {
return UUID.randomUUID().toString().replace("-", "");
}
public static void main(String[] args) throws Exception {
// System.out.println(UUID.randomUUID().toString().replace("-", ""));
sendEmail("18969492@qq.com", getCode());
}
}
用户注册时生成激活码并存进用户数据表,然后发送激活邮件给用户,
用户点击激活链接后,在后台对用户发送的url中的code参数与数据库对比,
若一致,则把用户帐号设置为可用,并把激活码清空,防止多次激活。
用户登录时不仅检查帐号密码,还检查激活状态,未激活的帐号不可用。
注意:
1.运行此java application例子,需要联网,因为我们需要连接比如QQ邮箱 的smtp服务器
2.若使用QQ邮箱,则发送方需要到QQ邮箱网页开启SMTP服务器,通过验证后获取授权码,比如menfeesxhkyebdgd,不再需要邮箱本身的密码