spring-boot-starter-mail 邮件发送

Sun公司提供了JavaMail用来实现邮件发送,但是配置烦琐,Spring中提供了JavaMailSender用来简化邮件配置,Spring Boot则提供了MailSenderAutoConfiguration对邮件的发送做了进一步简化。

 

开通POP3/SMTP服务或者IMAP/SMTP服务

使用邮箱发送邮件,首先要申请开通POP3/SMTP服务或者IMAP/SMTP服务。

SMTP全称为Simple Mail Transfer Protocol,译作简单邮件传输协议,它定义了邮件客户端软件与SMTP服务器之间,以及SMTP服务器与SMTP服务器之间的通信规则。

 

添加邮件依赖:

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

 

邮件基本信息配置:

spring:
  mail:
    host: smtp.xxx.com
    username: xxx@xxx.com
    password: xxx
    default-encoding: UTF-8
    properties.mail.smtp.socketFactory.class: javax.net.ssl.SSLSocketFactory
    properties.mail.debug: true

 

发送简单邮件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
@Component
public class MailService {
 
    /**
     * JavaMailSender是Spring Boot在MailSenderPropertiesConfiguration类中配置好的,
     * 该类在Mail自动配置类MailSenderAutoConfiguration中导入,因此这里注入JavaMailSender就可以使用了。
     */
    @Autowired
    JavaMailSender javaMailSender;
 
    /**
     * sendSimpleMail方法的5个参数分别表示邮件发送者、收件人、抄送人、邮件主题以及邮件内容。
     *
     * @param from    发送者
     * @param to      收件人
     * @param cc      抄送人
     * @param subject 主题
     * @param content 内容
     */
    public void sendSimpleMail(String from, String to, String cc, String subject, String content) {
        // 简单邮件可以直接构建一个SimpleMailMessage对象进行配置,配置完成后,通过JavaMailSender将邮件发送出去。
        SimpleMailMessage simpMsg = new SimpleMailMessage();
        simpMsg.setFrom(from);
        simpMsg.setTo(to);
        simpMsg.setCc(cc);
        simpMsg.setSubject(subject);
        simpMsg.setText(content);
        javaMailSender.send(simpMsg);
    }
}

  

发送带附件的邮件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/**
  * 发送带附件的邮件
  *
  * @param from    发送者
  * @param to      收件人
  * @param subject 主题
  * @param content 内容
  * @param file    附件
  */
 public void sendAttachFileMail(String from, String to, String subject, String content, File file) {
     try {
         MimeMessage message = javaMailSender.createMimeMessage();
         /*
          * 这里使用MimeMessageHelper简化了邮件配置,
          * 它的构造方法的第二个参数true表示构造一个multipart message类型的邮件,
          * multipart message类型的邮件包含多个正文、附件以及内嵌资源,邮件的表现形式更加丰富
          */
         MimeMessageHelper helper = new MimeMessageHelper(message, true);
         helper.setFrom(from);
         helper.setTo(to);
         helper.setSubject(subject);
         helper.setText(content);
         helper.addAttachment(file.getName(), file);
         javaMailSender.send(message);
     } catch (MessagingException e) {
         e.printStackTrace();
     }
 }

  

发送带图片资源的邮件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/**
     * 发送带图片资源的邮件
     *
     * @param from    发送者
     * @param to      收件人
     * @param subject 主题
     * @param content 内容
     * @param srcPath 图片资源路径
     * @param resIds  资源id
     */
    public void sendMailWithImg(String from, String to, String subject, String content, String[] srcPath, String[] resIds) {
        if (srcPath.length != resIds.length) {
            System.out.println("发送失败");
            return;
        }
        try {
            MimeMessage message = javaMailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content, true);//第二个参数true表示邮件正文是HTML格式的,该参数不传默认为false。
            for (int i = 0; i < srcPath.length; i++) {
                FileSystemResource res = new FileSystemResource(new File(srcPath[i]));//通过FileSystemResource构造静态资源
                helper.addInline(resIds[i], res);//调用addInline方法将资源加入邮件对象中
            }
            javaMailSender.send(message);
        } catch (MessagingException e) {
            System.out.println("发送失败");
        }
    }

  

使用Thymeleaf构建邮件模板:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
1
2
3
4
5
6
7
8
9
10
11
12
13
public void sendHtmlMail(String from, String to, String subject, String content) {
    try {
        MimeMessage message = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        helper.setTo(to);
        helper.setFrom(from);
        helper.setSubject(subject);
        helper.setText(content, true);
        javaMailSender.send(message);
    } catch (MessagingException e) {
        System.out.println("发送失败");
    }
}

  

测试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
@RunWith(SpringRunner.class)
@SpringBootTest
public class MailServiceTest {
 
    @Autowired
    MailService mailService;
 
    @Test
    public void sendSimpleMail() {
        mailService.sendSimpleMail(
                "xxx@xxx.com ",
                "xxx@xxx.com ",
                "xxx@xxx.com ",
                "测试邮件主题",
                "测试邮件内容");
    }
 
    @Test
    public void sendAttachFileMail() {
        mailService.sendAttachFileMail(
                "xxx@xxx.com ",
                "xxx@xxx.com ",
                "测试邮件主题sendAttachFileMail",
                "测试邮件内容sendAttachFileMail",
                new File("C:\\Usersxxx\\Desktop\\导出导入\\邮件附件.docx"));
    }
 
    @Test
    public void sendMailWithImg() {
        mailService.sendMailWithImg(
                "xxx@xxx.com ",
                "xxx@xxx.com ",
                "测试邮件主题(图片)",
                "<div>hello,这是一封带图片资源的邮件:" +
                        "这是图片1:<div><img src='cid:p01'/></div>" +
                        "这是图片2:<div><img src='cid:p02'/></div>" +
                        "</div>",
                new String[]{
                        "C:\\Usersxxx\\Desktop\\Snipaste_2021-01-11_14-41-57.jpg",
                        "C:\\Usersxxx\\Desktop\\Snipaste_2021-01-11_14-41-57.jpg"
                },
                new String[]{"p01", "p02"});
    }
 
    @Autowired
    TemplateEngine templateEngine;
 
    @Test
    public void sendHtmlMailThymeleaf() {
        /*
         * Thymeleaf提供了TemplateEngine来对模板进行渲染,通过Context构造模板中变量需要的值
         */
        Context ctx = new Context();
        ctx.setVariable("username", "sang");
        ctx.setVariable("gender", "男");
        String mail = templateEngine.process("mailtemplate.html", ctx);
        mailService.sendHtmlMail(
                "xxx@xxx.com ",
                "xxx@xxx.com ",
                "测试邮件主题Thymeleaf",
                mail);
    }
 
}

  

文章来源: Spring Boot+Vue全栈开发实战 - 13.1 邮件发送

 

posted @   草木物语  阅读(2228)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示