目录
1.导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
2.导入配置
spring:
mail:
default-encoding: UTF-8
username: 18733333368@163.com #1133333341@qq.com
password: SISQHSNBBOXFEJNW #tynmdlqdelfpjiha
host: smtp.163.com #smtp.qq.com
properties:
mail:
smtp:
ssl:
enable: true
3.工具类
package com.atguigu.blog.util;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Properties;
public class EmailUtil {
// 默认邮箱配置
private static final String FROM = "1899999468@163.com";
private static final String HOST = "smtp.163.com";
private static final String PASSWORD = "SISQHSNBBOXFEJNW";
/**
* 自定义发件人邮箱
* @param from 发件人邮箱
* @param to 收件人邮箱
* @param subject 邮件标题
* @param text 邮件内容
* @throws IOException
* @throws MessagingException
*/
public static void sendMail(String from, String[] to, String host, String password, String subject, String text, List<File> fileList) {
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setHost(host);
mailSender.setUsername(from);
mailSender.setPassword(password);
Properties prop = new Properties();
prop.put("mail.smtp.auth", false);// 参数设为true,需服务器进行认证,认证用户名和密码是否正确
prop.put("mail.smtp.timeout", 5000);
mailSender.setJavaMailProperties(prop);
try {
MimeMessage mimeMessage = mailSender.createMimeMessage();
mailSender.setHost(host);
mailSender.setPassword(password);
MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
messageHelper.setSubject(subject);
messageHelper.setText(text, true);
messageHelper.setTo(to);
messageHelper.setFrom(from);
if (fileList.size() != 0) {
for (File file : fileList) {
messageHelper.addAttachment(file.getName(), file);
}
}
mailSender.send(mimeMessage);
} catch (MessagingException e) {
e.printStackTrace();
}
}
/**
* 默认发件人邮箱
* @param to 收件人邮箱
* @param subject 标题
* @param text 内容
* @param fileList 文件
*/
public static void sendMailNoFrom(String[] to, String subject, String text, List<File> fileList) {
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setHost(HOST);
mailSender.setUsername(FROM);
mailSender.setPassword(PASSWORD);
Properties prop = new Properties();
prop.put("mail.smtp.auth", false);// 参数设为true,需服务器进行认证,认证用户名和密码是否正确
prop.put("mail.smtp.timeout", 5000);
mailSender.setJavaMailProperties(prop);
try {
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
messageHelper.setSubject(subject);
messageHelper.setText(text, true);
messageHelper.setTo(to);
messageHelper.setFrom(FROM);
if (fileList.size() != 0) {
for (File file : fileList) {
messageHelper.addAttachment(file.getName(), file);
}
}
mailSender.send(mimeMessage);
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
4.测试
@GetMapping("/sendtoqq")
@Log("测试注解")
public Result sendtoqq() {
// 163
String[] to = {"1135365@qq.com", "3654666661@outlook.com"};// 收件人
List<File> files = new ArrayList<>();
File file = new File("/Users/lizhenghang/Desktop/网上购物系统设计与实现.docx");
files.add(file);
EmailUtil.sendMailNoFrom(to, "测试标题to qq", "测试内容to qq", files);
return Result.ok("发送成功!");
}
@GetMapping("/sendto163")
@Log("测试注解")
public Result sendto163() {
String from = "11366669991@qq.com";// 发件人邮箱
String[] to = {"186666468@163.com"};// 收件人邮箱,支持传
String password = "tynmdlqdelfpjiha";
String host = "smtp.qq.com";
List<File> files = new ArrayList<>();
File file = new File("/Users/lizhenghang/Desktop/网上购物系统设计与实现.docx");
files.add(file);
EmailUtil.sendMail(from, to, host, password, "测试标题11111 to 163", "测试内容11111 to 163", files);
return Result.ok("发送成功!");
}
5.业务功能实现发邮件
@GetMapping("/sendEmailIds/{ids}")
@Log("批量发送邮件")
public Result sendEmailIds(@PathVariable("ids") String[] ids) {
for (String id : ids) {
// 2
EmailTaskDetail info = emailTaskDetailService.getObjectByKey(id);
String templateId = info.getTemplateId();
// 1
EmailTaskTemplate template = emailTaskTemplateService.getObjectByKey(templateId);
String sendEmail = template.getSendEmail();
// 异步发送邮件消息
taskExecutor.execute(() -> {
boolean lang = lang(info, template, sendEmail);
if (lang) {
EmailTaskDetail emailTaskDetail = new EmailTaskDetail();
emailTaskDetail.setId(id);
emailTaskDetail.setIsSend("Y");
emailTaskDetailService.update(emailTaskDetail);
}
});
}
return Result.ok("发送成功!");
}
@GetMapping("/sendEmail")
@Log("单发邮件")
public Result sendEmail(HttpServletRequest request) {
String id = request.getParameter("id");
// 2
EmailTaskDetail info = emailTaskDetailService.getObjectByKey(id);
String templateId = info.getTemplateId();
// 1
EmailTaskTemplate template = emailTaskTemplateService.getObjectByKey(templateId);
String sendEmail = template.getSendEmail();
// 异步发送邮件消息
taskExecutor.execute(() -> {
boolean lang = lang(info, template, sendEmail);
if (lang) {
EmailTaskDetail emailTaskDetail = new EmailTaskDetail();
emailTaskDetail.setId(id);
emailTaskDetail.setIsSend("Y");
emailTaskDetailService.update(emailTaskDetail);
}
});
return Result.ok("发送成功!");
}
/**
* 执行发邮件
* @param info
* @param template
* @param sendEmail
* @return
*/
private boolean lang(EmailTaskDetail info, EmailTaskTemplate template, String sendEmail) {
// 模板
// 中文标题
String titleZh = template.getEmailTitleZh();
// 中文内容
String contentZh = template.getEmailContentZh();
// 英文标题
String titleEn = template.getEmailTitleEn();
// 英文内容
String contentEn = template.getEmailContentEn();
String emailHost = template.getEmailHost();
String emailPassword = template.getEmailPassword();
// 内容
// 收件人邮箱
String recieveEmail = info.getRecieveEmail();
// 收件人姓名
String recieveName = info.getRecieveName();
String content = info.getEmailContent();
String[] email = {recieveEmail};
String type = info.getLanguageType();
String langType = "zh";
if (langType.equals(type)) {
if (StringUtils.isNotBlank(sendEmail)) {
boolean b = EmailUtil.sendMail(sendEmail, email, emailHost, emailPassword, titleZh, content, new ArrayList<File>());
return b;
} else {
boolean b = EmailUtil.sendMailNoFrom(email, titleZh, content, new ArrayList<File>());
return b;
}
} else {
if (StringUtils.isNotBlank(sendEmail)) {
boolean flag = EmailUtil.sendMail(sendEmail, email, emailHost, emailPassword, titleEn, content, new ArrayList<File>());
return flag;
} else {
boolean flag = EmailUtil.sendMailNoFrom(email, titleEn, content, new ArrayList<File>());
return flag;
}
}
}