使用Spring Boot发送邮件

1 简介

Spring Mail对Java Mail进行了封装,大大简化了邮件的发送,Spring Boot Mail在Spring Mail的基础上对邮件发送再次进行了封装,使邮件发送更加简单。
本文主要包含以下内容

  • 发送文本邮件
  • 发送带有附件的邮件
  • 发送HTML邮件
  • 发送图片邮件
  • 发送模板邮件

2 示例

先设置好用于发送邮件邮箱的POP3/IMAP/SMTP,记住授权码

2.1 项目搭建

  1. 新建spring-boot-mail maven项目。
  2. 加入pom依赖。
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.4.RELEASE</version>
</parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
</dependencies>
  1. 编写配置文件。
# 设置邮箱主机
spring.mail.host=smtp.163.com 
# 邮箱名
spring.mail.username=freech1688@163.com
# 开通服务授权码
spring.mail.password=xxx

注意:spring.mail.password此处的密码不是邮箱登录密码,而是开通POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务的授权码,授权码是用于登录第三方邮件

  1. 创建主启动程序。创建主启动程序。
@SpringBootApplication
public class MailApplication {
	public static void main(String[] args) {
		SpringApplication.run(MailApplication.class, args);
	}
}
  1. 编写测试类。
@RunWith(SpringRunner.class)
@SpringBootTest
public class MailApplicationTest {
}

2.2 编写实践代码

2.2.1 发送文本邮件

测试类中编写以下代码

@Autowired
private JavaMailSender sender;
//邮件发送者
private String from = "freech1688@163.com";
//邮件接收者
private String to = "569265915@qq.com";

/**
 * 发送文本邮件
 */
@Test
public void sendTextEmail() {
    SimpleMailMessage message = new SimpleMailMessage();
    //发送者
    message.setFrom(from);
    //接收者
    message.setTo(to);
    //邮件主题
    message.setSubject("文本邮件");
    //邮件内容
    message.setText("你好,这是一份文本文件");
    sender.send(message);
}

运行结果:
在这里插入图片描述

2.2.2 发送带有附件的邮件

 /**
 * 发送带有附件的邮件
 */
@Test
public void sendAttachmentFilesEmail() throws MessagingException {
    MimeMessage message = sender.createMimeMessage();
    MimeMessageHelper helper = new MimeMessageHelper(message, true);
    helper.setFrom(from);
    helper.setTo(to);
    helper.setSubject("带有附件的邮件");
    helper.setText("你好,这是一份带有附件的邮件");

    //获取文件对象.
    FileSystemResource file1 = new FileSystemResource(new File("D:/test.rar"));
    //添加附件,切记attachmentFilename要带文件格式后缀,否则无法识别。
    helper.addAttachment("attachmentFile1.rar", file1);
    //添加多个附件,直接修改一下attachmentFilename。
    helper.addAttachment("attachmentFile2.rar", file1);

    sender.send(message);
}

运行结果:
在这里插入图片描述

2.2.3 发送HTML邮件

@Test
public void sendHtmlMail() throws MessagingException {
    MimeMessage message = sender.createMimeMessage();
    MimeMessageHelper helper = new MimeMessageHelper(message, true);
    helper.setFrom(from);
    helper.setTo(to);
    helper.setSubject("HTML邮件");
    String content = new StringBuffer().append("<html>").append("<head>").append("<title>HTML邮件</title>")
            .append("</head>").append("<body>").append("<h1>这是一份HTML邮件</h1>").append("</body>").append("</html>").toString();
    // 邮件内容,第二个参数指定发送的是HTML格式
    helper.setText(content, true);
    sender.send(message);

}

运行结果:
在这里插入图片描述

2.2.4 发送图片邮件

@Test
public void sendImagesMail() throws MessagingException {
    MimeMessage message = sender.createMimeMessage();
    MimeMessageHelper helper = new MimeMessageHelper(message, true);
    helper.setFrom(from);
    helper.setTo(to);
    helper.setSubject("图片邮件");
    String imgPath1 = "D:/images/1.jpg";
    String imgPath2 = "D:/images/2.jpg";
    String rscId1 = "001";
    String rscId2 = "002";
    String conntent = "<html><body><h3>带图片的邮件:</h3>图片一:<img style='width:200px;height:200px' src='cid:"+rscId1+"'><br>图片二:</img><img style='width:200px;height:200px'  src='cid:"+rscId2+"'></img></body></html>";
    helper.setText(conntent, true);
    FileSystemResource file1 = new FileSystemResource(new File(imgPath1));
    FileSystemResource file2 = new FileSystemResource(new File(imgPath2));
    helper.addInline(rscId1,file1);
    helper.addInline(rscId2,file2);
    sender.send(message);
}

运行结果:
在这里插入图片描述

2.2.5 发送模板邮件(freemarker示例)

2.2.5.1 添加模板引擎依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>

2.2.5.2 将模板引擎注入到Spring容器中

@Component
public class FreeMarkerConfig {
    @Bean
    public FreeMarkerConfigurer freeMarkerConfigurer() {
        FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();
        configurer.setTemplateLoaderPath("classpath:templates");
        return configurer;
    }
}

2.5.5.3 在resources/templates新建template.ftl模板文件

<html>  
<body>  
    <span>您好! ${name}, 感谢您的注册!请点击下面的验证链接完成注册,谢谢您的支持!</span><br>
    <a href="https://blog.csdn.net/qwqw3333333/article/details/83538247">点击验证</a>
</body>  
</html>

2.5.5.4 编写发送邮件代码

//注入FreeMarkerConfigurer
@Autowired
private FreeMarkerConfigurer freeMarkerConfigurer;
/**
 * 发送模板邮件
 */
@Test
public void sendTemplateMail() throws MessagingException, IOException, TemplateException {

    MimeMessage message = sender.createMimeMessage();

    MimeMessageHelper helper = new MimeMessageHelper(message, true);
    helper.setFrom(from);
    helper.setTo(to);
    helper.setSubject("模板邮件");

    Map<String, Object> model = new HashMap<>();
    model.put("name", "Freech");

    freeMarkerConfigurer.setTemplateLoaderPath("classpath:templates");
    //加载模板文件
    Template template = freeMarkerConfigurer.getConfiguration().getTemplate("template.ftl");
    String html = FreeMarkerTemplateUtils.processTemplateIntoString(template, model);
    helper.setText(html, true);
    sender.send(message);
}

运行结果:
在这里插入图片描述

看源码点这里

posted @ 2018-11-06 11:04  _chenyl  阅读(73)  评论(0编辑  收藏  举报