项目GitHub地址 :
https://github.com/FrameReserve/TrainingBoot
https://github.com/FrameReserve/TrainingBoot/releases/tag/0.0.12
pom.xml
增加:
spring-boot-starter-mail
spring-boot-starter-velocity -- 模板
<!-- Email --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-velocity</artifactId> </dependency>
Spring Boot配置文件:
QQ邮箱权限需要在QQ邮箱里设置,163则不用,问题比较少。
src/main/resources/application.yml
mail:
host: smtp.163.com
username: 286352250@163.com
password: 用户密码
properties:
mail:
smtp:
auth: true
timeout: 25000
Email配置类:
后期经常使用发件人邮箱,在这统一定义。
src/main/java/com/training/core/email/EmailConfig.java
package com.training.core.email;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
@Component
public class EmailConfig {
/**
* 发件邮箱
*/
@Value("${spring.mail.username}")
private String emailFrom;
public String getEmailFrom() {
return emailFrom;
}
public void setEmailFrom(String emailFrom) {
this.emailFrom = emailFrom;
}
}
定义Email Service,三种邮件风格:
1. 发送简单邮件。
2. 发送带附件简单邮件
3. 发送模板邮件。
src/main/java/com/training/core/email/EmailService.java
package com.training.core.email;
import java.io.File;
import java.util.List;
import java.util.Map;
import com.training.core.dto.Pair;
public interface EmailService {
/**
* 发送简单邮件
* @param sendTo 收件人地址
* @param titel 邮件标题
* @param content 邮件内容
*/
public void sendSimpleMail(String sendTo, String titel, String content);
/**
* 发送简单邮件
* @param sendTo 收件人地址
* @param titel 邮件标题
* @param content 邮件内容
* @param attachments<文件名,附件> 附件列表
*/
public void sendAttachmentsMail(String sendTo, String titel, String content, List<Pair<String, File>> attachments);
/**
* 发送模板邮件
* @param sendTo 收件人地址
* @param titel 邮件标题
* @param content<key, 内容> 邮件内容
* @param attachments<文件名,附件> 附件列表
*/
public void sendTemplateMail(String sendTo, String titel, Map<String, Object> content, List<Pair<String, File>> attachments);
}
Email Service实现类:
src/main/java/com/training/core/email/EmailServiceImpl.java
package com.training.core.email;
import java.io.File;
import java.util.List;
import java.util.Map;
import javax.mail.internet.MimeMessage;
import org.apache.commons.collections.map.HashedMap;
import org.apache.velocity.app.VelocityEngine;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import org.springframework.ui.velocity.VelocityEngineUtils;
import com.training.core.dto.Pair;
import com.training.core.exception.RuntimeServiceException;
@Service
public class EmailServiceImpl implements EmailService {
@Autowired
private EmailConfig emailConfig;
@Autowired
private JavaMailSender mailSender;
@Autowired
private VelocityEngine velocityEngine;
public void sendSimpleMail(String sendTo, String titel, String content) {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(emailConfig.getEmailFrom());
message.setTo(sendTo);
message.setSubject(titel);
message.setText(content);
mailSender.send(message);
}
public void sendAttachmentsMail(String sendTo, String titel, String content, List<Pair<String, File>> attachments) {
MimeMessage mimeMessage = mailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setFrom(emailConfig.getEmailFrom());
helper.setTo(sendTo);
helper.setSubject(titel);
helper.setText(content);
for (Pair<String, File> pair : attachments) {
helper.addAttachment(pair.getLeft(), new FileSystemResource(pair.getRight()));
}
} catch (Exception e) {
throw new RuntimeServiceException(e);
}
mailSender.send(mimeMessage);
}
public void sendInlineMail() {
MimeMessage mimeMessage = mailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setFrom(emailConfig.getEmailFrom());
helper.setTo("286352250@163.com");
helper.setSubject("主题:嵌入静态资源");
helper.setText("<html><body><img src=/"cid:weixin/" ></body></html>", true);
FileSystemResource file = new FileSystemResource(new File("weixin.jpg"));
helper.addInline("weixin", file);
} catch (Exception e) {
throw new RuntimeServiceException(e);
}
mailSender.send(mimeMessage);
}
public void sendTemplateMail(String sendTo, String titel, Map<String, Object> content, List<Pair<String, File>> attachments) {
MimeMessage mimeMessage = mailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setFrom(emailConfig.getEmailFrom());
helper.setTo(sendTo);
helper.setSubject(titel);
String text = VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, "template.vm", "UTF-8", content);
helper.setText(text, true);
for (Pair<String, File> pair : attachments) {
helper.addAttachment(pair.getLeft(), new FileSystemResource(pair.getRight()));
}
} catch (Exception e) {
throw new RuntimeServiceException(e);
}
mailSender.send(mimeMessage);
}
}
测试邮件发送:
src/main/java/com/training/email/controller/DemoEmailController.java
package com.training.email.controller;
import io.swagger.annotations.ApiOperation;
import javax.annotation.Resource;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.training.core.controller.BaseController;
import com.training.core.dto.ResultDataDto;
import com.training.core.email.EmailService;
@RestController
@RequestMapping(value="/email")
public class DemoEmailController extends BaseController {
@Resource
private EmailService emailService;
/**
* 测试邮件发送
*/
@ApiOperation(value="测试邮件发送", notes="getEntityById")
@RequestMapping(value = "/getTestDemoEmail", method = RequestMethod.GET)
public @ResponseBody ResultDataDto getEntityById() throws Exception {
String sendTo = "1265400024@qq.com";
String titel = "测试邮件标题";
String content = "测试邮件内容";
emailService.sendSimpleMail(sendTo, titel, content);
return ResultDataDto.addSuccess();
}
}