SpringBoot——邮件服务简单实现(文本、HTML、附件、多个附件、图片)

原文出处链接:https://blog.csdn.net/qq_36761831/article/details/104129547

很多时候邮件发送并不是主业务必须关注的结果,比如通知类、提醒类的业务可以允许延时或者失败。这个时候可以采用异步的方式来发送邮件,加快主交易执行速度,在实际项目中可以采用MQ发送邮件相关参数,监听到消息队列之后启动发送邮件。

1、在pom.xml文件中添加SpringBoot-mail引用

        <!--整合SpringBoot-mail-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
        <!--整合SpringBoot-thymeleaf模板引擎-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

2、SpringBoot的application.properties文件中添加邮箱配置

##配置发送邮件的服务器地址、用户名、邮箱授权码、编码
spring.mail.host=smtp.qq.com
spring.mail.username=用户名(邮箱地址)
spring.mail.password=邮箱授权码
spring.mail.default-encoding=UTF-8

3、文本、HTML、附件、多个附件、图片邮件发送的简单实现代码

package com.hern.service;
 
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.MailException;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMailMessage;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
 
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
import java.util.ArrayList;
 

@Service
public class MailService {
 
    private final Logger logger = LoggerFactory.getLogger(this.getClass());
 
    //指定发送者
    @Value("${spring.mail.username}")
    private String from;
 
    @Autowired
    private JavaMailSender mailSender;
 
    public void sayHello(){
        System.out.println("Hello World");
    }
 
    /*
    * 发送简单文本邮件
    * to:发送给谁
    * subject:发送的主题(邮件主题)
    * content:发送的内容
    * */
    public void sendSimpleMail(String to, String subject, String content){
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        simpleMailMessage.setTo(to);
        simpleMailMessage.setSubject(subject);
        simpleMailMessage.setText(content);
        simpleMailMessage.setFrom(from);
 
        //发送邮件
        try {
            mailSender.send(simpleMailMessage);
            logger.info("简单邮件发送成功");
        } catch (MailException e) {
            logger.error("简单邮件发送失败",e);
        }
    }
 
    /*
     * 发送HTML邮件
     * to:发送给谁
     * subject:发送的主题(邮件主题)
     * content:发送的内容
     * */
    public void sendHtmlMail(String to, String subject, String content) throws MessagingException {
 
        MimeMessage mimeMailMessage = mailSender.createMimeMessage();
 
        MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMailMessage,true);
        mimeMessageHelper.setTo(to);
        mimeMessageHelper.setSubject(subject);
        mimeMessageHelper.setText(content,true);
        mimeMessageHelper.setFrom(from);
 
        try {
            mailSender.send(mimeMailMessage);
            logger.info("HTML邮件发送成功!");
        } catch (MailException e) {
            logger.error("HTML邮件发送失败!",e);
        }
    }
 
    /*
     * 发送附件邮件
     * to:发送给谁
     * subject:发送的主题(邮件主题)
     * content:发送的内容
     * filePath:附件路径
     * */
    public void sendAttachmentsMail(String to, String subject, String content, String filePath) throws MessagingException {
 
        MimeMessage mimeMessage = mailSender.createMimeMessage();
 
        MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage,true);
        mimeMessageHelper.setTo(to);
        mimeMessageHelper.setSubject(subject);
        mimeMessageHelper.setText(content);
 
        //获取文件路径以及文件名称
        FileSystemResource fileSystemResource = new FileSystemResource(new File(filePath));
        String fileName = fileSystemResource.getFilename();
 
        mimeMessageHelper.addAttachment(fileName,fileSystemResource);
 
        mimeMessageHelper.setFrom(from);
 
        try {
            mailSender.send(mimeMessage);
            logger.info("附件邮件发送成功!");
        } catch (MailException e) {
            logger.error("附件邮件发送失败!",e);
        }
    }
 
    /*
     * 发送多个附件邮件
     * to:发送给谁
     * subject:发送的主题(邮件主题)
     * content:发送的内容
     * filePath:附件路径
     * */
    public void sendAttachmentsMails(String to, String subject, String content, ArrayList filePaths) throws MessagingException {
 
        MimeMessage mimeMessage = mailSender.createMimeMessage();
 
        MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage,true);
        mimeMessageHelper.setTo(to);
        mimeMessageHelper.setSubject(subject);
        mimeMessageHelper.setText(content);
 
        //获取文件路径以及文件名称
 
        for (Object filepath:filePaths) {
            FileSystemResource fileSystemResource = new FileSystemResource(new File((String) filepath));
            String fileName = fileSystemResource.getFilename();
 
            mimeMessageHelper.addAttachment(fileName,fileSystemResource);
        }
        mimeMessageHelper.setFrom(from);
 
        try {
            mailSender.send(mimeMessage);
            logger.info("附件邮件发送成功!");
        } catch (MailException e) {
            logger.error("附件邮件发送失败!",e);
        }
    }
 
    /*
     * 发送图片件
     * to:发送给谁
     * subject:发送的主题(邮件主题)
     * content:发送的内容
     * imagePath:图片路径
     * imageId:图片ID
     * */
    public void sendImage(String to, String subject, String content, String imagePath, String imageId) throws MessagingException {
 
        MimeMessage mimeMessage = mailSender.createMimeMessage();
 
        MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage,true);
        mimeMessageHelper.setTo(to);
        mimeMessageHelper.setSubject(subject);
        mimeMessageHelper.setText(content,true);
 
        FileSystemResource fileSystemResource = new FileSystemResource(new File(imagePath));
 
        mimeMessageHelper.addInline(imageId,fileSystemResource);
        mimeMessageHelper.setFrom(from);
 
        try {
            logger.info("图片邮件发送成功!");
            mailSender.send(mimeMessage);
        } catch (MailException e) {
            logger.error("图片邮件发送失败!",e);
        }
    }
}

模板邮件

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>邮件模板</title>
</head>
<body>
    <h3>您好,感谢您的注册,这是一封验证邮件,请点击下面的链接完成注册,感谢您的支持!</h3>
    <a href="#" th:href="@{ http://www.hernsong.com/register/{id}(id=${id}) }">激活账号</a>
</body>
</html>

4、目录结构
在这里插入图片描述
5、测试邮件发送单元测试

package com.hern.service;
 
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
 
import javax.annotation.Resource;
import javax.mail.MessagingException;
import java.util.ArrayList;
 
@RunWith(SpringRunner.class)
@SpringBootTest
public class MailServiceTest {
 
    @Resource
    MailService mailService;
 
    @Resource
    TemplateEngine templateEngine;
 
    //测试简单文本文件
    @Test
    public void sendSimpleMail(){
        mailService.sendSimpleMail("123456789@163.com","Springboot-Mail测试","基于SpringBoot的邮件系统的文本邮件");
    }
 
    //发送HTML邮件
    @Test
    public void sendHtmlMail() throws MessagingException {
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("<html>\n").append("<body>\n").append("<h1>HTML邮件系统测试</h1>\n").append("</body>\n").append("</html>\n");
        //String content = "<html>\n"+"<body>\n"+"<h1>HTML邮件系统测试</h1>\n"+"</body>\n"+"</html>\n";
        mailService.sendHtmlMail("123456789@163.com","HTML邮件测试", String.valueOf(stringBuilder));
    }
 
    //发送单个附件邮件
    @Test
    public void sendAttachmentsMail() throws MessagingException {
 
        String filePath = "src/main/resources/templates/2019.12杨寨工资明细.xls";
 
        mailService.sendAttachmentsMail("123456789@163.com","多个附件邮件测试","附件邮件",filePath);
    }
 
    //发送多个附件邮件
    @Test
    public void sendAttachmentsMails() throws MessagingException {
 
        String filePath = "src/main/resources/templates/2019.12杨寨工资明细.xls";
        String filePath2 = "src/main/resources/templates/2019.12杨寨工资明细2.xls";
 
        ArrayList<String> filePaths = new ArrayList();
        filePaths.add(filePath);
        filePaths.add(filePath2);
 
        mailService.sendAttachmentsMails("123456789@163.com","多个附件邮件测试","附件邮件",filePaths);
    }
 
    @Test
    public void sendImage() throws MessagingException {
 
        String imagePath = "src/main/resources/templates/ZoomOut_ZH-CN4471982075_1920x1080.jpg";
        String imageId = "123";
        StringBuilder content = new StringBuilder();
        content.append("<html>\n").append("<body>\n").append("<img src=\"").append(imagePath).append("\">\n").append("</body>\n").append("</html>");
        mailService.sendImage("123456789@163.com","图片邮件","图片邮件",imagePath,imageId);
 
    }
 
    @Test
    public void templateMail() throws MessagingException {
        Context context = new Context();
        context.setVariable("id","123");
 
        String emailContent = templateEngine.process("emailTemplate",context);
        mailService.sendHtmlMail("123456789@163.com","模板邮件",emailContent);
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值