javax.mail
javax.mail-api
1.6.2
com.sun.mail
javax.mail
1.6.2
2、Email工具类:mailUtil.java
package utils;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
import java.io.File;
import java.util.*;
public class MailUtil {
public static MimeMessage simpleMail(Session session,String mailFrom,String mailTo,String mailTittle,String mailContent){
//创建默认的MimeMessage 对象
MimeMessage msg = new MimeMessage(session);
try {
//邮件发送人
msg.setFrom(mailFrom);
//邮件接收人
msg.setRecipients(Message.RecipientType.TO, mailTo);
//邮件标题头
msg.setSubject(mailTittle);
//邮件发送日期
msg.setSentDate(new Date());
//邮件文本内容
msg.setContent(mailContent, "text/html;charset=UTF-8");
}catch (Exception mex){
mex.printStackTrace();
}
return msg;
}
public static MimeMessage attachMail(Session session,Map contentMap, List attachments){
// 创建邮件对象
MimeMessage mimeMessage = new MimeMessage(session);
try {
//邮件发送人
mimeMessage.setFrom(contentMap.get("mailFrom").toString());
//邮件接收人
mimeMessage.setRecipients(Message.RecipientType.TO, contentMap.get("mailTo").toString());
//邮件主题
mimeMessage.setSubject(contentMap.get("mailTittle").toString());
//创建多重消息
MimeMultipart multipart = new MimeMultipart();
//邮件正文
BodyPart contentPart = new MimeBodyPart();
contentPart.setContent(contentMap.get("mailContent").toString(),"text/html;charset=UTF-8");
multipart.addBodyPart(contentPart);
//邮件附件
if(attachments != null) {
for(File attachment : attachments) {
BodyPart attachmentPart = new MimeBodyPart();
DataSource source = new FileDataSource(attachment);
attachmentPart.setDataHandler(new DataHandler(source));
//避免中文乱码的处理
attachmentPart.setFileName(MimeUtility.encodeWord(attachment.getName()));
multipart.addBodyPart(attachmentPart);
}
}
mimeMessage.setContent(multipart,"UTF-8");
//保存邮件
mimeMessage.saveChanges();
}
catch (Exception mex){
mex.printStackTrace();
}
return mimeMessage;
}
public static void sendEmail(Map contentMap){
sendEmail(contentMap,null);
}
public static void sendEmail(Map contentMap, List attaches){
try {
//获取系统属性
Properties pros = new Properties();
pros.setProperty("mail.transport.protocol", "smtp");// 使用的协议
pros.setProperty("mail.smtp.host", contentMap.get("host").toString());// 发件人的邮箱的SMTP服务器地址
pros.setProperty("mail.smtp.auth", "true");// 需要请求认证
//设置邮件服务器
Session session = Session.getInstance(pros);
if (attaches==null) {
//发送简单的文本邮件
MimeMessage msg = simpleMail(session, contentMap.get("mailFrom").toString(), contentMap.get("mailTo").toString(), contentMap.get("mailTittle").toString(), contentMap.get("mailContent").toString());
Transport.send(msg, contentMap.get("mailFrom").toString(), contentMap.get("passwd").toString());
System.out.println("Sent simpleMail successfully...");
} else {
//发送带附件邮件
MimeMessage mimeMessage=attachMail(session,contentMap,attaches);
Transport.send(mimeMessage, contentMap.get("mailFrom").toString(), contentMap.get("passwd").toString());
System.out.println("Sent attaches Email successfully...");
}
}catch (Exception mex){
mex.printStackTrace();
}
}
}
3、执行和邮件示例
3.1、调用
public class Test{
public static void main(String[] args) {
//发送方信息配置
Map map = new HashMap<>();
map.put("host","smtp.exmail.qq.com");
map.put("mailFrom","hmf@xxx.com");
map.put("passwd","xxx");
map.put("mailTo","xxx@qq.com");
//标题和内容配置
map.put("mailTittle","这是邮件的主题");
map.put("mailContent","这是邮件的内容");
//发送简单邮件
sendEmail(map);
//附件配置
List attaches = new ArrayList<>();
File attach1 = new File("./data.csv");
File attach2 = new File("./11.log");
attaches.add(attach1);
attaches.add(attach2);
//发送带附件邮件
sendEmail(map,attaches);
}
}
简单邮件示例:
带附件邮件示例:
参考:https://blog.csdn.net/z2012c/article/details/84696287
https://www.cnblogs.com/g177w/p/12504153.html



