龙空技术网

Spring Boot 进阶-SpringBoot整合JavaMailSender发送邮件

从程序员到架构师 866

前言:

现在朋友们对“html格式邮件”可能比较珍视,姐妹们都需要学习一些“html格式邮件”的相关知识。那么小编也在网上搜集了一些对于“html格式邮件””的相关知识,希望我们能喜欢,姐妹们一起来学习一下吧!

使用过Spring 开发者对JavaMailSender应该不陌生,它是Spring 提供邮件发送的接口。在Spring Boot中对这块应用也进行了自动化的封装。下面我们就来实际操作一下如何在Spring Boot项目中使用JavaMailSender进行邮件的发送操作。

创建项目

首先我们需要创建一个Maven项目并且引入Spring Boot的基本依赖,然后再引入邮件发送相关的场景启动器,代码如下。

<?xml version="1.0" encoding="UTF-8"?><project xmlns="; xmlns:xsi=";         xsi:schemaLocation=" ;>    <modelVersion>4.0.0</modelVersion>    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>2.7.5</version>        <relativePath/> <!-- lookup parent from repository -->    </parent>    <groupId>com.example</groupId>    <artifactId>demo</artifactId>    <version>0.0.1-SNAPSHOT</version>    <name>demo</name>    <description>Demo project for Spring Boot</description>    <properties>        <java.version>1.8</java.version>    </properties>    <dependencies>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <dependency>            <groupId>org.projectlombok</groupId>            <artifactId>lombok</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-mail</artifactId>        </dependency>    </dependencies>    <build>        <plugins>            <plugin>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-maven-plugin</artifactId>            </plugin>        </plugins>    </build></project>

第二步,在引入了自动配置场景启动类之后,剩余的配置与之前的其他配置一样,需要在application.yml 或者是application.properties中进行配置。下面我们演示利用QQ邮箱邮件发送效果。

spring:  #邮箱基本配置  mail:    #配置smtp服务主机地址    host: smtp.qq.com    #发送者邮箱    username: xxxxxxx@qq.com    #配置密码,注意不是真正的密码,而是刚刚申请到的授权码    password: xxxxxxxxxxx    #端口号465或587    port: 587    #默认的邮件编码为UTF-8    default-encoding: UTF-8    #其他参数    properties:     mail:        #配置SSL 加密工厂      smtp:        ssl:          #本地测试,先放开ssl          enable: false          required: false        #开启debug模式,这样邮件发送过程的日志会在控制台打印出来,方便排查错误      debug: true

指定邮箱类型如下图所示

创建邮件发送实体类

这里我们创建一个一般邮件格式都有的实体类,包括收件人、邮件主题、邮件内容、以及附件路径等内容。

@Datapublic class MailRequest implements Serializable {    /**     * 接收人     */    private String sendTo;    /**     *  邮件主题     */    private String subject;    /**     *  邮件内容     */    private String text;    /**     *  附件路径     */    private String filePath;}
定义一个邮件服务

完成邮件实体配置之后,我们需要定义一个邮件服务。

public interface SendMailService {    /**     * 简单文本邮件     *     * @param mailRequest     * @return     */    void sendSimpleMail(MailRequest mailRequest);    /**     * Html格式邮件,可带附件     *     * @param mailRequest     * @return     */    void sendHtmlMail(MailRequest mailRequest);}

邮件服务实现

@Servicepublic class SendMailServiceImpl implements SendMailService {    //注入邮件工具类    @Autowired    private JavaMailSender javaMailSender;    @Value("${spring.mail.username}")    private String sendMailer;    private static final Logger logger = LoggerFactory.getLogger(SendMailServiceImpl.class);    public void checkMail(MailRequest mailRequest) {        Assert.notNull(mailRequest,"邮件请求不能为空");        Assert.notNull(mailRequest.getSendTo(), "邮件收件人不能为空");        Assert.notNull(mailRequest.getSubject(), "邮件主题不能为空");        Assert.notNull(mailRequest.getText(), "邮件收件人不能为空");    }    @Override    public void sendSimpleMail(MailRequest mailRequest) {        SimpleMailMessage message = new SimpleMailMessage();        checkMail(mailRequest);        //邮件发件人        message.setFrom(sendMailer);        //邮件收件人 1或多个        message.setTo(mailRequest.getSendTo().split(","));        //邮件主题        message.setSubject(mailRequest.getSubject());        //邮件内容        message.setText(mailRequest.getText());        //邮件发送时间        message.setSentDate(new Date());        javaMailSender.send(message);        logger.info("发送邮件成功:{}->{}",sendMailer,mailRequest.getSendTo());    }    @Override    public void sendHtmlMail(MailRequest mailRequest) {        MimeMessage message = javaMailSender.createMimeMessage();        checkMail(mailRequest);        try {            MimeMessageHelper helper = new MimeMessageHelper(message,true);            //邮件发件人            helper.setFrom(sendMailer);            //邮件收件人 1或多个            helper.setTo(mailRequest.getSendTo().split(","));            //邮件主题            helper.setSubject(mailRequest.getSubject());            //邮件内容            helper.setText(mailRequest.getText(),true);            //邮件发送时间            helper.setSentDate(new Date());            String filePath = mailRequest.getFilePath();            if (StringUtils.hasText(filePath)) {                FileSystemResource file = new FileSystemResource(new File(filePath));                String fileName = filePath.substring(filePath.lastIndexOf(File.separator));                helper.addAttachment(fileName,file);            }            javaMailSender.send(message);            logger.info("发送邮件成功:{}->{}",sendMailer,mailRequest.getSendTo());        } catch (MessagingException e) {            logger.error("发送邮件时发生异常!",e);        }    }}
定义Controller对邮件发送服务进行调用
@RestController@RequestMapping("/sendmail")public class SendMailController {    @Autowired    private SendMailService sendMailService;    @PostMapping("/simple")    public void SendSimpleMessage(@RequestBody MailRequest mailRequest) {        sendMailService.sendSimpleMail(mailRequest);    }    @PostMapping("/html")    public void SendHtmlMessage(@RequestBody MailRequest mailRequest) {       sendMailService.sendHtmlMail(mailRequest);    }}
总结

完成配置之后,调用Controller接口就可以实现对指定的邮箱发送消息了。

标签: #html格式邮件