首先导入jar
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<version>2.4.5</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
<version>2.4.5</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-configuration2</artifactId>
<version>2.3</version>
</dependency>
邮箱要打开 POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务
这里以qq邮箱为例:
点击设置:
点击账户:
开启:
application.yml 文件配置
#暂时改为个人邮箱smtp服务器进行测试
spring:
mail:
#坑爹的地方:host 通道个人邮箱和企业邮箱通道不同。163的个人邮箱:smtp.163.com ,企业邮箱:smtp.qiye.163.com
# 腾讯的,个人smtp.qq.com, 企业的:smtp.exmail.qq.com
host: smtp.qq.com
username: ****@qq.com
# 口令是QQ邮箱开通的smtp服务后得到的客户端授权码,不是你的邮箱登录密码
password: ****
default-encoding: UTF-8
properties:
mail:
smtp:
auth: true
socketFactory:
class: javax.net.ssl.SSLSocketFactory
port: 465
# 开启debug,方便查看邮件发送日志
debug: true
#这个是自己后续为了方便获取到发送者邮箱的账号
EmaiHelper:
util:
username: ****@qq.com
工具类 EmaiHelper
package com.myb.util;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.File;
@Service
public class EmaiHelper {
/**
* JavaMailSender是Spring Boot在MailSenderPropertiesConfiguration 类中配直好的,该类在 Mail
* 自动配置类 MailSenderAutoConfiguration 中导入 因此这里注入 JavaMailSender 就可以使用了
*/
@Autowired
private JavaMailSender mailSender;
//从配置文件获取的发件人邮箱
@Value("${EmaiHelper.util.username}")
private String mailUsername ;
/**
* 发送带附件,支持HTML文件发送的的邮件
* @param mailFrom 发件人
* @param mailFromNick 发件人昵称
* @param mailTo 收件人 多个用,分开
* @param cc 抄送人 多个用,分开
* @param subject 主题
* @param content 内容 支持html形似
* @param files 附件 文件路径数组 多个用,分开
*/
public void sendMail (String mailFrom, String mailFromNick, String mailTo, String cc,
String subject, String content, String files) throws Exception {
mailFromNick = isNullString(mailFromNick);
mailTo = isNullString(mailTo);
cc = isNullString(cc);
subject = isNullString(subject);
content = isNullString(content);
files = isNullString(files);
mailFrom = this.mailUsername;
MimeMessage mimeMessage = mailSender.createMimeMessage();
try {
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
/*
第二个参数true表示构造一个multipart message类型的邮件,multipart message类型的邮件包含多个正文、附件以及内嵌资源,
邮件的表现形式更丰富
*/
mimeMessageHelper.setFrom(new InternetAddress(mailFromNick + " <" + mailFrom + ">"));
mimeMessageHelper.setSubject(subject);
mimeMessageHelper.setText(content, true);
// 设置多个收件人
String[] toAddress = mailTo.split(",");
mimeMessageHelper.setTo(toAddress);
//多个抄送
if (!StringUtils.isEmpty(cc)) {
String[] toAddcc = cc.split(",");
mimeMessageHelper.setCc(toAddcc);
}
//多个附件
if (!StringUtils.isEmpty(files)){
String[] toAddFiles = files.split(",");
for (String toAddFile : toAddFiles) {
File imgFile = new File(toAddFile);
mimeMessageHelper.addAttachment(imgFile.getName(), imgFile);
}
}
} catch (Exception e) {
//运行时异常
throw new RuntimeException(e.getMessage());
}
//发送邮件
mailSender.send(mimeMessage);
}
//判断如果为null就返回""的方法
private String isNullString(String str){
if (null == str){
return "";
}
return str;
}
}
测试
package com.myb.mailUtil.controller;
import com.myb.util.EmaiHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@RestController
public class TestController {
@Resource
EmaiHelper emaiHelper;
@RequestMapping("/email")
public String testSendAttachment() {
// // 发件人要跟yml配置文件里填写的邮箱一致
String mailFrom = "";
// 收件人
String mailTo = "****@qq.com,****@qq.com";
// 抄送
String cc = "****@qq.com,****@qq.com";
String fillist = "C:\\Users\\Administrator\\Desktop\\Work\\lock_wallpaper.png," +
"C:\\Users\\Administrator\\Desktop\\Work\\desk_wallpaper.jpg";
String content = "<table border=\"1\">\n" +
" <tr>\n" +
" <td>用户名</td>\n" +
" <td >Ma y b</td>\n" +
" </tr>\n" +
" <tr>\n" +
" <td>年龄</td>\n" +
" <td>1 8 </td>\n" +
" </tr>\n" +
"</table>";
String result = "发送邮件成功";
try {
emaiHelper.sendMail(mailFrom, "Mayb", mailTo, cc, "TestMail", content,fillist);
} catch (Exception e) {
result = "发送邮件失败!";
}
return result;
}
}