最近学习了通过Java Mail库进行邮件发送,参考了不少资料,自己总结一下Java Mail的使用,大概从以下三个方面进行描述,本例子使用QQ邮箱作为邮件服务器:
1. 配置邮件会话(session)
2. 配置简单文本邮件消息(MimeMessage)
3. 发送邮件(Transport)
先介绍邮件属性:收件人(多个),抄送(多个),密送(多个),主体,正文,附件等。
直接上代码:
<!-- 引入java mail包 -->
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.0</version>
</dependency>
1.配置邮件会话
public static Session getMailSession(){
Properties properties = new Properties();
//服务器主机名
properties.put("mail.host","smtp.qq.com");
//协议名称
properties.put("mail.transport.protocol","smtps");
//发送服务器需要身份验证
properties.put("mail.smtp.auth","true");
//设置ssl加密(QQ邮箱必须设置)
properties.put("mail.smtp.ssl.enable","true");
//创建session
Session session = Session.getDefaultInstance(properties);//获取共享session
//开启DEBUG模式,监视发邮件状态
session.setDebug(true);
return session;
}
2.配置简单文本邮件消息
/**
* 生成普通文本邮件
* @param session
* @return
* @throws MessagingException
*/
public static MimeMessage createSimpleMessage(Session session) throws Exception {
//创建邮件
MimeMessage message = new MimeMessage(session);
//发件人
message.setFrom("xxx@qq.com");
//收件人
message.setRecipient(Message.RecipientType.TO, new InternetAddress("xxx@qq.com"));
//标题
message.setSubject("简单邮件");
//To: 增加收件人(可选)
message.addRecipient(MimeMessage.RecipientType.TO, new InternetAddress("xxx@qq.com", "USER_DD", "UTF-8")); //InternetAddress 第二个参数是别名
//Cc: 抄送(可选)
message.setRecipient(MimeMessage.RecipientType.CC, new InternetAddress("xxx@qq.com", "USER_EE", "UTF-8"));
//Bcc: 密送(可选)
message.setRecipient(MimeMessage.RecipientType.BCC, new InternetAddress("xxx@qq.com", "USER_FF", "UTF-8"));
InternetAddress[] addressArr = new InternetAddress[1];
addressArr[0] = new InternetAddress("xxx@qq.com", "xxx", "UTF-8");
//邮件回复接收人
message.setReplyTo(addressArr);
//封装MIME消息
MimeBodyPart text = new MimeBodyPart();
text.setContent("你好啊!", "text/html; charset=UTF-8");
//组合MIME消息
MimeMultipart multipart = new MimeMultipart();
multipart.addBodyPart(text);
//设置邮件内容
message.setContent(multipart);
message.saveChanges();
return message;
}
3.发送邮件(Transport)
public static void sendEmail(MimeMessage msg, Session session) throws Exception {
//得到transport对象
Transport transport = session.getTransport();
//连接邮件服务器(qq邮箱需要使用授权码)password为qq邮箱授权码
//(***此处邮箱必须和发件人一致***)
transport.connect("smtp.qq.com", "xxx@qq.com", "password");
//发送邮件
transport.sendMessage(msg, msg.getAllRecipients());
transport.close();
}
使用QQ邮箱发送邮件需要使用授权码作为密码,授权码获取方式如下:
- 进入QQ邮箱设置界面
- 开启SMTP服务,生成授权码