前言:
最近在研究springboot,就拿发送邮件的实例来练练,希望学习的小伙伴可以看文章,也可以下载源码进行交流学习,源码地址:https://github.com/nanrt/email
准备
由于使用qq邮箱的比较多,就以此为测试,在使用之前,你需要登录你的邮箱,设施SMTP,获得16位授权码,设置如下:设置—>账户
项目的整体目录:
PO实体类:
读取配置文件中邮件的发送者和接收者,不过你自己也可以写死(不建议,这个不灵活)
@Component
@ConfigurationProperties(prefix = "maail")
public class MailPo {
private String from;
private String to;
public String getFrom() {
return from;
}
public void setFrom(String from) {
this.from = from;
}
public String getTo() {
return to;
}
public void setTo(String to) {
this.to = to;
}
}
配置文件:
spring:
mail:
host: smtp.qq.com
username: xxxx@qq.com
#这个是授权码,不是邮箱的密码
password: ocvyzhapzzbwbjaj
maail:
from: ${spring.mail.username}
to: xxxxx@qq.com
pom文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>email</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>email</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
配置类和配置文件准备好了,开始编码发邮件吧!邮件可分为三种:简单邮件,带附件邮件和模板邮件,具体的源码如下:
package com.example.demo.service;
import com.example.demo.po.MailPo;
import freemarker.template.Configuration;
import freemarker.template.TemplateException;
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.freemarker.FreeMarkerTemplateUtils;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
import java.io.IOException;
import java.util.Map;
/**
* <dl>
* <dt>MainService</dt>
* <dd>Description:</dd>
* <dd>CreateDate: 2019-02-19 9:41</dd>
* </dl>
*
* @author nanrt
*/
@Service
public class MailService {
@Autowired
JavaMailSender jms;
@Autowired
MailPo mailPo;
/**
* @param subject
* @param text
* @description:发送简单邮件
* @date: 2019/2/19 11:30
* @author:nrt
*/
public void sendSimplEmail(String subject, String text) {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(mailPo.getFrom());
message.setTo(mailPo.getTo());
message.setSubject(subject);
message.setText(text);
jms.send(message);
}
/**
* @description:发送带附件邮件
* @param subject
* @param text
* @param attachmentMap
* @return:
* @date: 2019/2/20 15:37
* @author:nrt
*/
public void sendHtmlEmail(String subject, String text, Map<String, File> attachmentMap) throws MessagingException {
MimeMessage mimeMessage = jms.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
mimeMessageHelper.setFrom(mailPo.getFrom());
mimeMessageHelper.setTo(mailPo.getTo());
mimeMessageHelper.setSubject(subject);
mimeMessageHelper.setText(text);
if (attachmentMap != null) {
attachmentMap.entrySet().stream().forEach(entrySet -> {
try {
File file = entrySet.getValue();
if (file.exists()) {
mimeMessageHelper.addAttachment(entrySet.getKey(), new FileSystemResource(file));
}
} catch (MessagingException e) {
e.printStackTrace();
}
});
}
jms.send(mimeMessage);
}
/**
* @description:发送模板邮件
* @param subject
* @param text
* @date: 2019/2/20 15:38
* @author:nrt
*/
public void sentTemplateEmail(String subject, Map<String, Object> text) throws MessagingException, IOException, TemplateException {
MimeMessage mimeMessage = jms.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
mimeMessageHelper.setFrom(mailPo.getFrom());
mimeMessageHelper.setTo(mailPo.getTo());
Configuration configuration = new Configuration(Configuration.VERSION_2_3_0);
configuration.setClassForTemplateLoading(this.getClass(), "/templates");
String html = FreeMarkerTemplateUtils.processTemplateIntoString(configuration.getTemplate("template.ftl"), text);
mimeMessageHelper.setSubject(subject);
mimeMessageHelper.setText(html, true);
jms.send(mimeMessage);
}
}
测试类:
package com.example.demo.mail;
import com.example.demo.service.MailService;
import freemarker.template.TemplateException;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.core.io.ClassPathResource;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import javax.mail.MessagingException;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
/**
* <dl>
* <dt>MailTest</dt>
* <dd>Description:</dd>
* <dd>CreateDate: 2019-02-19 10:09</dd>
* </dl>
*
* @author nanrt
*/
@SpringBootTest
@RunWith(SpringJUnit4ClassRunner.class)
public class MailTest {
@Autowired
MailService mailService;
/**
* @description:测试简单邮件
* @date: 2019/2/20 15:39
* @author:nrt
*/
@Test
public void test() {
mailService.sendSimplEmail("nrt", "邮件发送成功");
}
/**
* @description: 测试发送附件邮件
* @date: 2019/2/20 15:39
* @author:nrt
*/
@Test
public void testHtmlEmail() throws MessagingException, IOException {
Map<String, File> aa = new HashMap<>();
File file = new ClassPathResource("file.txt").getFile();
aa.put("附件", file);
mailService.sendHtmlEmail("nanrt", "你好", aa);
System.out.println("success");
}
/**
* @description:测试发送模板邮件
* @date: 2019/2/20 15:40
* @author:nrt
*/
@Test
public void testTemplateEmail() throws MessagingException, IOException, TemplateException {
Map<String, Object> params = new HashMap<>();
params.put("username", "nanrt");
mailService.sentTemplateEmail("nanrt", params);
}
}
测试结果:
第一种,简单邮件
第二种,带附件邮件:
第三种,模板附件: