Java Mail 环境准备
以163邮箱为例
登录 163 邮箱后,设置邮箱账户开通 smtp 服务,需要根据注册时的⼿机号发送的验证码来开通获取邮箱客户端授权码。开通成功后,会显示个⼈授权访问码,该授权码是后⾯通过 Java mail 发送邮件的认证密码,⾮常重要。
在prom.xml中添加mail的依赖
<!-- Java Mail -->
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency> <dependency>
<groupId>javax.mail</groupId>
<artifactId>javax.mail-api</artifactId>
<version>1.6.2</version>
</dependency>
发送普通文本内容的邮件
package com.shsxt;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.util.Date;
import java.util.Properties;
public class MailTest01 {
public static void main(String[] args) throws Exception{
Properties prop = new Properties();
// 设置邮件服务器主机名 (163 邮件服务器地址:"mail.smtp.host" "smtp.163.com")
prop.setProperty("mail.smtp.host", "smtp.163.com");
// 设置邮件服务器的端⼝
prop.setProperty("mail.smtp.port", "25");
// 设置邮件服务器认证属性 (设置为true表示发送服务器需要身份验证)
prop.setProperty("mail.smtp.auth", "true");
// 使⽤JavaMail发送邮件的5个步骤
// 1. 创建session
Session session = Session.getInstance(prop);
// 开启Session的debug模式,这样就可以查看到程序发送Email的运⾏状态
session.setDebug(true);
// 2. 通过session得到transport对象
Transport ts = session.getTransport();
// 3. 使⽤邮箱的⽤户名和密码连上邮件服务器(⽤户名只需写@前⾯的即可,密码是指授权码)
ts.connect("smtp.163.com", "用户名", "密码");
// 4. 创建邮件
// 发送普通⽂本的邮件
Message message = createSimpleTxtMail(session);
// 5. 发送邮件
ts.sendMessage(message, message.getAllRecipients());
// 关闭transport对象
ts.close();
}
/**
* HTML内容邮件
* 创建⼀封包含html内容的邮件
*/
private static Message createSimpleTxtMail(Session session) throws Exception{
// 创建邮件对象
MimeMessage mimeMessage = new MimeMessage(session);
// 设置邮件的发件⼈的邮箱地址
mimeMessage.setFrom(new InternetAddress("发件⼈的邮箱地址"));
// 设置邮件的收件⼈的邮箱地址 (现在发件⼈和收件⼈是⼀样的,那就是⾃⼰给⾃⼰发)
mimeMessage.setRecipient(Message.RecipientType.TO,new InternetAddress("收件⼈的邮箱地址"));
// 邮件的主题
mimeMessage.setSubject("测试第一封HTML邮件");
// 设置发送⽇期
message.setSentDate(new Date());
// 邮件的⽂本内容 (setText():纯⽂本内容)
message.setText("你好,这是⼀封测试邮件!");
// 返回创建好的邮件对象
return message;
}
}
发送HTML内容的邮件
/**
* HTML内容邮件
* 创建⼀封包含html内容的邮件
*/
private static Message createSimpleTxtMail(Session session) throws Exception{
// 创建邮件对象
MimeMessage mimeMessage = new MimeMessage(session);
// 设置邮件的发件⼈的邮箱地址
mimeMessage.setFrom(new InternetAddress("发件⼈的邮箱地址"));
// 设置邮件的收件⼈的邮箱地址 (现在发件⼈和收件⼈是⼀样的,那就是⾃⼰给⾃⼰发)
mimeMessage.setRecipient(Message.RecipientType.TO,new InternetAddress("收件⼈的邮箱地址"));
// 邮件的主题
mimeMessage.setSubject("测试第二封HTML邮件");
// 设置发送⽇期
mimeMessage.setSentDate(new Date());
// 准备邮件数据
/**
* Message表示⼀个邮件,messgaes.getContent()返回⼀个Multipart对象。
* ⼀个Multipart对象包含⼀个或多个BodyPart对象,来组成邮件的正⽂部分(包括附件)。
*/
// 创建多媒体对象
MimeMultipart multipart = new MimeMultipart();
// 创建邮件体对象
MimeBodyPart bodyPart = new MimeBodyPart();
// 设置HTML内容
StringBuffer sb = new StringBuffer();
sb.append("<html><body><a href='https://www.bilibili.com/'>bilibili</a></body></html>");
bodyPart.setContent(sb.toString(),"text/html;charset=UTF-8");
// 将bodyPart对象设置到multipart对象中
multipart.addBodyPart(bodyPart);
// 将multipart对象设置到message对象中 (setContent():)
mimeMessage.setContent(multipart);
// 返回创建好的邮件对象
return mimeMessage;
}
}
发送包含附件的邮件
/**
* 包含附件的邮件
* 创建⼀封包含附件的邮件
* @param session
* @return
* @throws MessagingException
*/
public static MimeMessage createAttachMail(Session session) throws
MessagingException {
// 创建邮件对象
MimeMessage message = new MimeMessage(session);
// 设置邮件的发件⼈的邮箱地址
message.setFrom(new InternetAddress("发件⼈的邮箱地址"));
// 设置邮件的收件⼈的邮箱地址 (现在发件⼈和收件⼈是⼀样的,那就是⾃⼰给⾃⼰发)
message.setRecipient(Message.RecipientType.TO, new InternetAddress("收件⼈的邮箱地址"));
// 邮件的主题
message.setSubject("测试第三封包含附件的邮件");
// 设置发送⽇期
message.setSentDate(new Date());
// 创建邮件正⽂
MimeBodyPart bodyPart = new MimeBodyPart();
bodyPart.setContent("使⽤JavaMail创建的带附件的邮件", "text/html;charset=UTF-8");
// 创建附件
MimeBodyPart attachPart = new MimeBodyPart();
// 本地⽂件
DataHandler dh = new DataHandler(new FileDataSource("C:\\work\\邮件附件.txt"));
attachPart.setDataHandler(dh);
// 附件名
attachPart.setFileName(dh.getName());
// 创建容器描述数据关系
MimeMultipart multipart = new MimeMultipart();
// 添加正⽂
multipart.addBodyPart(bodyPart);
// 添加附件
multipart.addBodyPart(attachPart);
// 如果在邮件中要添加附件,设置为mixed;。
multipart.setSubType("mixed");
// 设置邮件的内容
message.setContent(multipart);
// 返回创建好的邮件对象
return message;
}
}