SpringBoot使用JavaMailSender发送邮件(1)

Stella981
• 阅读 681

邮件发送是一个非常常见的功能,最初 Sun 公司提供了 JavaMail 用来实现邮件发送,但是配置烦琐。后来 Spring 中提供了 JavaMailsender 用来简化邮件配置,而 Spring Boot 则提供了 MailSenderAutoConfiguration 对邮件的发送做了进一步简化。

在开始之前我们需要申请开通 POP3/SMTP 服务或者 IMAP/SMTP服务。

这里我使用的163邮箱开通:开通 POP3/SMTP 服务或者 IMAP/SMTP服务

一、添加依赖

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

二、添加配置信息

# 配置邮件服务器的地址
spring.mail.host=smtp.163.com
# 配置邮件服务器的端口(465或587)
spring.mail.port=465
# 配置用户的账号
spring.mail.username=2333@163.com
# 配置用户的密码(即上面我们申请到的授权码)
spring.mail.password=TSSCBFCCJUTABBTB
# 配置默认编码
spring.mail.default-encoding=UTF-8
# SSL 连接配置
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
# 开启 debug,这样方便开发者查看邮件发送日志
spring.mail.properties.mail.debug=true

三、开发代码

(1)编写请求接口

import com.example.demo.service.MailService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.File;

@RestController
public class MailController {

    private final static String FROM_MAIL = "2333@163.com";
    private final static String TO_MAIL = "123@qq.com";

    @Autowired
    MailService mailService;

    @GetMapping("/sendMail")
    public String sendMail() {
        mailService.sendSimpleMail(FROM_MAIL, TO_MAIL, TO_MAIL, "邮件的标题", "邮件的内容");

        return "发送成功";
    }

    @GetMapping("/sendAttachFileMail")
    public String sendAttachFileMail() {
        File file = new File("/Users/gongzhiqiang/Downloads/邮件发送附件.txt");
        mailService.sendAttachFileMail(FROM_MAIL, TO_MAIL, "邮件的标题", "邮件的内容", file);

        return "发送成功";
    }


    @GetMapping("/sendMailWithImg")
    public String sendMailWithImg() {
        String html = "<h3>hello 皮卡丘</h3>" +
                "<div><img width='66px' src='cid:p1'/></div>" +
                "<div><img width='66px' src='cid:p2'/></div>";
        String[] imgUrlArr = {"/Users/gongzhiqiang/Downloads/pikaqiu.jpeg", "/Users/gongzhiqiang/Downloads/pikaqiu1.jpeg"};
        String[] valArr = {"p1", "p2"};
        mailService.sendMailWithImg(FROM_MAIL, TO_MAIL, "邮件的标题", html, imgUrlArr, valArr);

        return "发送成功";
    }

}

(2)编写服务

import java.io.File;

public interface MailService {

    void sendSimpleMail(String from, String to, String cc, String subject, String content);

    void sendAttachFileMail(String from, String to, String subject, String content, File file);

    void sendMailWithImg(String from, String to, String subject, String content,
                         String[] srcPath,String[] resIds);

}

import com.example.demo.service.MailService;
import lombok.extern.slf4j.Slf4j;
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 javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;

@Service
@Slf4j
public class MailServiceImpl implements MailService {

    @Autowired
    JavaMailSender javaMailSender;

    /**
     * 发送邮件
     * @param from 邮件发送者
     * @param to 收件人
     * @param cc 抄送人
     * @param subject 邮件主题
     * @param content 邮件内容
     */
    @Override
    public void sendSimpleMail(String from, String to, String cc, String subject, String content) {
        // 简单邮件直接构建一个 SimpleMailMessage 对象进行配置并发送即可
        SimpleMailMessage simpMsg = new SimpleMailMessage();
        simpMsg.setFrom(from);
        simpMsg.setTo(to);
        simpMsg.setCc(cc);
        simpMsg.setSubject(subject);
        simpMsg.setText(content);
        javaMailSender.send(simpMsg);
    }

    /**
     * 发送待附件的邮件
     * @param from 邮件发送者
     * @param to 收件人
     * @param subject 邮件主题
     * @param content 邮件内容
     * @param file 附件
     */
    @Override
    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();
        }
    }

    @Override
    public void sendMailWithImg(String from, String to, String subject, String content,
                                String[] srcPath,String[] resIds) {
        if (srcPath.length != resIds.length) {
            log.error("发送失败");
            return;
        }

        try {
            MimeMessage message = javaMailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message,true);
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            //第二个参数true表示邮件正文是HTML格式(默认为false)
            helper.setText(content,true);
            for (int i = 0; i < srcPath.length; i++) {
                //通过FileSystemResource构造静态资源,让后调用addInline方法将资源加入到邮件对象中
                FileSystemResource res = new FileSystemResource(new File(srcPath[i]));
                helper.addInline(resIds[i], res);
            }
            javaMailSender.send(message);
        } catch (MessagingException e) {
            log.error("发送失败");
        }
    }

}

四、验证结果

(1)请求发送邮箱接口:http://127.0.0.1:8082/sendMail

SpringBoot使用JavaMailSender发送邮件(1)

(2)请求发送带附件邮箱接口:http://127.0.0.1:8082/sendAttachFileMail

SpringBoot使用JavaMailSender发送邮件(1)

(3)请求发送带图片邮箱接口:http://127.0.0.1:8082/sendMailWithImg

SpringBoot使用JavaMailSender发送邮件(1)

点赞
收藏
评论区
推荐文章
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Easter79 Easter79
3年前
sprintboot
一、邮件发送使用springboot自带的邮件系统就能实现邮件的发送,首先导入依赖:1、新建springboot项目,添加依赖<dependency<groupIdorg.springframework.boot</groupId<artifactIdspringbootstartermail
Stella981 Stella981
3年前
Spring Boot中使用JavaMailSender发送邮件
相信使用过Spring的众多开发者都知道Spring提供了非常好用的JavaMailSender接口实现邮件发送。在SpringBoot的Starter模块中也为此提供了自动化配置。下面通过实例看看如何在SpringBoot中使用JavaMailSender发送邮件。快速入门在SpringBoot的工程中的pom.xm
Easter79 Easter79
3年前
SpringBoot入门 (十) 发送邮件
本文记录学习在SpringBoot中发送邮件。一邮件发送过程发送邮件是一个我们在项目中经常会用到的功能,如在用户注册时发送验证码,账户激活等都会用到。完整的一个邮件发送过程主要包含以下几个步骤:1发件人在用户邮件代理上写邮件内容及收件人的邮箱地址;2用户邮件代理根据发件人填写的邮件信息,生成一封符合邮件格式的邮件;
Easter79 Easter79
3年前
SpringBoot使用JavaMailSender发送邮件(1)
邮件发送是一个非常常见的功能,最初Sun公司提供了JavaMail用来实现邮件发送,但是配置烦琐。后来Spring中提供了JavaMailsender用来简化邮件配置,而SpringBoot则提供了MailSenderAutoConfiguration对邮件的发送做了进一步简化。在开始之前我们需要申请开通POP3/SMTP服
Easter79 Easter79
3年前
SpringBoot使用JavaMailSender发送邮件(2)
为了更容易更规范维护邮件内容,我们推荐使用模板引擎技术。常用的模板引擎有这几种Thymeleaf、FreeMarker、Velocity等。我们在这里就使用前面两种来实现发送邮件。一、使用Thymeleaf模板技术发送邮件Thymeleaf是SpringBoot推荐的官方模板引擎技术,使用非常的简单方便。(1)添加依赖
Wesley13 Wesley13
3年前
thinkphp整合系列之友盟消息推送
上篇文章 thinkphp集成系列之phpmailer批量发送邮件(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fbaijunyao.com%2Farticle%2F69)讲过的;邮件有着零成本、内容丰富的优点;但是一个非常硬的硬伤;这家伙的及时性太差了;尤其是随着90、00
Stella981 Stella981
3年前
Spring Boot demo系列(七):邮件服务
2021.2.24更新1概述SpringBoot整合邮件服务,包括发送普通的文本邮件以及带附件的邮件。2邮箱选择这里选择的是QQ邮箱作为发送的邮箱,当然也可以选择其他的邮箱,只是具体的配置不一样。使用QQ邮箱的话,需要在个人设置中开启SMTP服务:!在这里插入
Stella981 Stella981
3年前
SpringBoot入门 (十) 发送邮件
本文记录学习在SpringBoot中发送邮件。一邮件发送过程发送邮件是一个我们在项目中经常会用到的功能,如在用户注册时发送验证码,账户激活等都会用到。完整的一个邮件发送过程主要包含以下几个步骤:1发件人在用户邮件代理上写邮件内容及收件人的邮箱地址;2用户邮件代理根据发件人填写的邮件信息,生成一封符合邮件格式的邮件;
Stella981 Stella981
3年前
SpringBoot 2.x 集成QQ邮箱、网易系邮箱、Gmail邮箱发送邮件
在Spring中提供了非常好用的JavaMailSender接口实现邮件发送,在SpringBoot的Starter模块中也为此提供了自动化配置。项目源码已托管在GiteeSpringBoot\_Guide(https://gitee.com/javen205/SpringBoot_Guide.git"SpringBoot_Guide")