【SpringBoot】邮件服务——发送邮件

如果饿了就吃,困了就睡,渴了就喝,人生就太无趣了
源码地址:https://github.com/keer123456789/springbootstudy/tree/master/maildemo


1.邮件基础知识

常见的邮件协议有两种:SMTPPOP3两种。它们的工作内容如图1:
在这里插入图片描述
①发信人使用用户代理来撰写邮件,用户代理使用SMTP协议将邮件发送到发送方邮件服务器。
②发送方邮件服务器将邮件放入缓存队列中,等待发送。
③发送方的邮件服务器发现有等待发送的邮件,就想接收端的邮件服务器建立TCP连接。
④TCP连接建成后,使用SMTP协议发送邮件。邮件发送成功后,关闭TCP连接。
⑤接收端的邮件服务器接收到邮件后,将邮件发到接收者的邮箱中。
⑥收信人打算收信时,调用用户代理,使用POP3协议将邮件从接收端邮件服务器的邮箱取出。

2.准备工作

使用qq邮箱作为发送邮箱,需要在邮箱中将POP3SMTP开启。

  1. 登录qq邮箱,打开设置,如图2:
    在这里插入图片描述
  2. 点击账户,找到POP3和SMTP服务,点击开启,会给一个授权码,保存好,有大用如图3:
    在这里插入图片描述

3.添加依赖,配置

###3.1 添加依赖
可以在创建项目时勾选,如图4:
在这里插入图片描述

pom.xml中的依赖如下

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

3.2 添加配置

spring.mail.password=**********
spring.mail.username=*******@qq.com
#465 或者 587
spring.mail.port=587
spring.mail.host=smtp.qq.com
spring.mail.default-encoding=UTF-8
  • password:刚刚开启SMTPPOP3的授权码,不是登录密码
  • username:你的邮箱
  • port:qq邮箱的STMP端口,一般是456或者587

3.发送邮件的四种方式

创建发送邮件的服务接口MailService,代码如下:

public interface MailService {
    /**
     * 发送简单的文字邮件
     *
     * @param receiverMail 接受者邮箱
     * @param subject      邮件主题
     * @param content      邮件内容
     */
    void sendSimpleMail(String receiverMail, String subject, String content);

    /**
     * 发送html文件的邮件
     *
     * @param receiverMail 接受者邮箱
     * @param subject      邮件主题
     * @param content      邮件内容
     */
    void sendHtmlMail(String receiverMail, String subject, String content);

    /**
     * 发送带有附件的邮件
     *
     * @param receiverMail 接受者邮箱
     * @param subject      邮件主题
     * @param content      邮件内容
     * @param filePath     附件文件地址
     */
    void sendAttachmentsMail(String receiverMail, String subject, String content, String filePath);

    /**
     * 发送模板文件
     *
     * @param receiverMail 接受者邮箱
     * @param subject      邮件主题
     * @param user         发送模板信息
     */
    void sendThymeleafMail(String receiverMail, String subject, User user);

}

3.1 发送简单的文字邮件

其中mailSenderJavaMailSender的实例。

public void sendSimpleMail(String receiverMail, String subject, String content) {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(senderMail); //设置发送者邮箱
        message.setTo(receiverMail); //设置接受者邮箱 
        message.setSubject(subject); //设置主题
        message.setText(content);    //设置发送内容
        try {
            mailSender.send(message);
            logger.info("简单邮件已经发送");
        } catch (Exception e) {
            e.printStackTrace();
            logger.error("简单邮件发送失败!!!");
        }
    }

测试发送:

	@Test
    @DisplayName("发送简单邮件")
    public void testSimpleMail() {
        mailService.sendSimpleMail("1511***[email protected]", "Test use springboot send mail", "简单邮件测试文件");
    }

如图5:
在这里插入图片描述

3.2 发送html格式的邮件

其中mailSenderJavaMailSender的实例。

	public void sendAttachmentsMail(String receiverMail, String subject, String content, String filePath) {
        MimeMessage message = mailSender.createMimeMessage();
        try {
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(senderMail);
            helper.setTo(receiverMail);
            helper.setSubject(subject);
            helper.setText(content, true);

            FileSystemResource file = new FileSystemResource(new File(filePath));
            String filename = file.getFile().getName();
            helper.addAttachment(filename, file);

            mailSender.send(message);
            logger.info("带附件的邮件已经发送。");

        } catch (MessagingException e) {
            e.printStackTrace();
            logger.error("发送带附件的邮件时发生异常!");
        }
    }

测试发送:

	@Test
    @DisplayName("发送html邮件")
    public void testHtmlMail() {
        StringBuffer sb = new StringBuffer();
        sb.append("<html><body><h1>使用springboot 发送html邮件 测试文件!!!</h1>")
                .append("<p >测试成功</p>")
                .append("<p >测试时间" + new Date() + "</p></body></html>");
        mailService.sendHtmlMail("1511***[email protected]", "Test use springboot send mail", sb.toString());
    }

如图6:
在这里插入图片描述

3.3 发送带附件的邮件

其中mailSenderJavaMailSender的实例。

	public void sendAttachmentsMail(String receiverMail, String subject, String content, String filePath) {
        MimeMessage message = mailSender.createMimeMessage();
        try {
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(senderMail);
            helper.setTo(receiverMail);
            helper.setSubject(subject);
            helper.setText(content, true);

            FileSystemResource file = new FileSystemResource(new File(filePath));
            String filename = file.getFile().getName();
            helper.addAttachment(filename, file);

            mailSender.send(message);
            logger.info("带附件的邮件已经发送。");

        } catch (MessagingException e) {
            e.printStackTrace();
            logger.error("发送带附件的邮件时发生异常!");
        }

    }

测试代码:

	@Test
    @DisplayName("发送附件邮件")
    public void testAttachmentsMail() {
        String path = "./testMailFile.txt";
        StringBuffer sb = new StringBuffer();
        sb.append("<html><body><h1>使用springboot 发送附件邮件 测试文件!!!</h1>")
                .append("<p >测试成功</p>")
                .append("<p >测试时间" + new Date() + "</p></body></html>");
        mailService.sendAttachmentsMail("[email protected]", "Test use springboot send mail", sb.toString(), path);
    }

结果如图7:
在这里插入图片描述

3.4 发送thymeleaf模板邮件

  1. 引入Thymeleaf的依赖
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
  1. 创建mail.html模板文件
    resources/templates文件加下创建mail.html模板文件
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<bo
<p>hello 欢迎加入 Springboot大家庭,您的入职信息如下:</p>
<table border="1">
    <tr>
        <td>姓名</td>
        <td th:text="${username}"></td>
    </tr>
    <tr>
        <td>工号</td>
        <td th:text="${num}"></td>
    </tr>
    <tr>
        <td>部门</td>
        <td th:text="${department}"></td>
    </tr>
</table>
<div style="color: #ff1a0e">一起学习,共同努力!!</div>
</body>
</html>
  1. 创建相应的对象类User
    根据模板文件创建相应的对象类
	public class User {
	    private String name;
	    private String num;
	    private String department;
	
	    public User() {
	    }
	
	    public String getName() {
	        return name;
	    }
	
	    public String getNum() {
	        return num;
	    }
	
	    public String getDepartment() {
	        return department;
	    }
	
	    public void setName(String name) {
	        this.name = name;
	    }
	
	    public void setNum(String num) {
	        this.num = num;
	    }
	
	    public void setDepartment(String department) {
	        this.department = department;
	    }
	}
	
  1. 邮件发送代码
	public void sendThymeleafMail(String receiverMail, String subject, User user) {
        MimeMessage message = mailSender.createMimeMessage();
        try {
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(senderMail);
            helper.setTo(receiverMail);
            helper.setSubject(subject);

            Context context = new Context();
            context.setVariable("username", user.getName());
            context.setVariable("num", user.getNum());
            context.setVariable("department", user.getDepartment());
            String process = templateEngine.process("mail.html", context);

            helper.setText(process, true);
            mailSender.send(message);
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }
  1. 测试代码
	@Test
    @DisplayName("发送模板html邮件")
    public void testThymeleafMail() {
        User user = new User();
        user.setName("keer");
        user.setNum("135");
        user.setDepartment("mail");
        mailService.sendThymeleafMail("1511***[email protected]", "Test use springboot send mail", user);
    }

如图8
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fWE2CGqO-1583589905995)(img/11.png)]

发布了35 篇原创文章 · 获赞 4 · 访问量 2496

猜你喜欢

转载自blog.csdn.net/weixin_41938180/article/details/104723587