目录[-]
环境介绍:
- Java 版本:1.8.0_191
- JavaMail 版本:1.6.2
一、配置邮箱
为了设置发件邮箱能有发送邮件权限,请先设置邮箱开启 POP3/SMPT/IMAP 等选项。
这里用的是 163 邮箱
二、Maven 引入包
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
三、邮件实体类
邮件内容实体类,定义一些发送邮件的属性。
注意,为了简化实体类写法,这里使用了 lombok 工具。实体类
import lombok.Data;
@Data
public class SimpleMail {
private String[] to;
private String[] cc;
private String[] bcc;
private String from;
private String host;
private String subject;
private String body;
private String[] attachment;
private String username;
private String password;
private Boolean isHtml;
}
四、发送邮件工具类
发送邮件工具类,用词工具调用 JavaMail 发送邮件。
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.io.UnsupportedEncodingException;
import java.util.*;
public class MailUtils {
/**
* 发送邮件
* @param simpleMail
*/
public static void sendMail(SimpleMail simpleMail) {
/** 获取系统属性 **/
Properties properties = System.getProperties();
/** 设置邮件服务器 **/
properties.setProperty("mail.smtp.host", simpleMail.getHost());
/** 设置服务器验证为true **/
properties.put("mail.smtp.auth", "true");
/** 获取默认session对象 **/
Session session = Session.getDefaultInstance(properties, new Authenticator() {
// 设置提供的发件邮箱与给的邮箱授权码
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(simpleMail.getUsername(), simpleMail.getPassword());
}
});
try {
/** 创建默认的 MimeMessage 对象 **/
MimeMessage message = new MimeMessage(session);
/** 设置发件人 **/
message.setFrom(new InternetAddress(simpleMail.getFrom()));
/** 设置收件人、抄送、密送 **/
List<InternetAddress> toList = new ArrayList<>();
List<InternetAddress> ccList = new ArrayList<>();
List<InternetAddress> bccList = new ArrayList<>();
if (simpleMail.getTo() != null) {
for (String str : simpleMail.getTo()) {
toList.add(new InternetAddress(str));
}
message.addRecipients(Message.RecipientType.TO, toList.toArray(new InternetAddress[]{}));
}
if (simpleMail.getCc() != null) {
for (String str : simpleMail.getCc()) {
toList.add(new InternetAddress(str));
}
message.addRecipients(Message.RecipientType.CC, ccList.toArray(new InternetAddress[]{}));
}
if (simpleMail.getBcc() != null) {
for (String str : simpleMail.getBcc()) {
toList.add(new InternetAddress(str));
}
message.addRecipients(Message.RecipientType.BCC, bccList.toArray(new InternetAddress[]{}));
}
// 设置标题Subject
message.setSubject(simpleMail.getSubject());
//message.setText(simpleMail.getBody());
/** 创建消息部分 **/
// 创建消息体对象
BodyPart messageBodyPart = new MimeBodyPart();
// 创建多重消息对象
Multipart multipart = new MimeMultipart();
/** 设置消息 **/
//messageBodyPart.setText(simpleMail.getBody());
if (simpleMail.getIsHtml()) {
messageBodyPart.setContent(simpleMail.getBody(), "text/html;charset=utf-8");
} else {
messageBodyPart.setContent(simpleMail.getBody(), "text/plain;charset=utf-8");
}
// 添加到 multipart
multipart.addBodyPart(messageBodyPart);
/** 设置附件 **/
if (simpleMail.getAttachment()!=null){
for (String str:simpleMail.getAttachment()){
messageBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource(str);
messageBodyPart.setDataHandler(new DataHandler(source));
// 设置文件名
System.out.println(str);
messageBodyPart.setFileName(MimeUtility.encodeText(str.substring(str.lastIndexOf("/")+1)));
// 添加到 multipart
multipart.addBodyPart(messageBodyPart);
}
}
/** 设置消息内容与附件 **/
message.setContent(multipart);
/** 发送消息 **/
Transport.send(message);
System.out.println("发送成功!");
} catch (MessagingException | UnsupportedEncodingException mex) {
mex.printStackTrace();
}
}
}
五、测试的 Main 方法
先编写自定义的实体对象,将邮件内容、收件人、发件人等等定义好,在用此实体对象当参数调用邮件发送工具类发送邮件。
public static void main(String[] args) {
/** 1、设置发送邮件内容对象 **/
SimpleMail simpleMail = new SimpleMail();
// 指定发送邮件的主机
simpleMail.setHost("smtp.163.com");
// 收件人电子邮箱
simpleMail.setTo(new String[]{"32******7@qq.com", "mydlq.club@gmail.com"});
// 收件人抄送
simpleMail.setCc(new String[]{"123456789@qq.com"});
// 收件人密送
simpleMail.setTo(new String[]{"111111111@qq.com"});
// 发件人电子邮箱
simpleMail.setFrom("m*******lq@163.com");
// 邮件主题
simpleMail.setSubject("测试邮件");
// 邮件内容
//simpleMail.setBody("这是一封测试邮件");
simpleMail.setBody("<html>" +
"<p>主题:测试</p>" +
"<p>结果:签到人数:xxx</p>" +
"</html>");
// 是否为 HTML 格式邮件
simpleMail.setIsHtml(true);
// 邮件附件
simpleMail.setAttachment(new String[]{"d://非签到表.xlsx", "d://签到表.xlsx"});
// 设置发件邮箱的用户名、验证码
simpleMail.setUsername("m******lq@163.com");
simpleMail.setPassword("a*******0");
/** 2、调用方法发送邮件 **/
// 发送邮件测试
sendMail(simpleMail);
}
六、查看收到的邮件效果
上面代码执行成功后邮箱就会收到一条邮件信息,如下: