SpringBoot 2.X從0到1實現郵件發送功能



Spring中提供了JavaMailSender接口實現郵件發送功能,在SpringBoot2.X中也封裝了發送郵件相關的Starter並且提供了自動化配置。

本文目錄

一、添加對應的Starter二、添加發送郵件相關的配置三、實現發送郵件功能四、實現過程中踩過的坑1.中文附件亂碼問題2.無法注入JavaMailSender問題

一、添加對應的Starter

pom.xml中添加下面依賴

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

二、添加發送郵件相關的配置

application.properties中添加郵件配置

spring.mail.host = smtp.163.com
spring.mail.port = 465
spring.mail.username = xxx@163.com
spring.mail.password = xxx
spring.mail.properties.mail.smtp.auth = true
spring.mail.properties.mail.smtp.timeout = 25000
spring.mail.properties.mail.smtp.socketFactory.class = javax.net.ssl.SSLSocketFactory
spring.mail.properties.mail.smtp.starttls.enable = true
spring.mail.properties.mail.smtp.starttls.required = true

三、實現發送郵件功能

本例中封裝了一個MailServiceImpl,里面注入javaMailSender即可,具體代碼如下

MailServiceImpl.java部分代碼:

    /**
     * 發送郵件
     *
     * @Author: java碎碎念
     */

    public void sendMail(Email email) {
        long start = System.currentTimeMillis();
        try {
            MimeMessage mimeMessage = javaMailSender.createMimeMessage();
            //true表示需要創建一個multipart message
            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true"UTF-8");
            helper.setFrom(mailUserName);
            helper.setTo(email.getToAddress().toArray(new String[email.getToAddress().size()]));
            helper.setSubject(email.getSubject());
            helper.setText(email.getContent(), true);

            if (null != email.getAttachments() && email.getAttachments().size() > 0) {
                for (File curFile : email.getAttachments()) {
                    FileSystemResource file = new FileSystemResource(curFile);
                    helper.addAttachment(MimeUtility.encodeWord(file.getFilename(), "utf-8""B"), file);
                }
            }
            log.info("郵件開始發送");
            javaMailSender.send(mimeMessage);
            long sendMillTimes = System.currentTimeMillis() - start;
            log.info("郵件發送成功,sendTimes=" + sendMillTimes);
        } catch (Exception e) {
            log.error("發送html郵件時發生異常!", e);
        }
    }

MailController.java部分代碼:

@RequestMapping(value = "/sendMail")
    public String sendEmail() {
        Email email_email = new Email();
        List<String> addressList = new ArrayList<String>();
        addressList.add("xxx@qq.com");
        email_email.setToAddress(addressList);
        email_email.setSubject("java碎碎念-主題測試");// 主題
        email_email.setContent("你好!<br><br> 測試郵件發送成功!");
        // 發送郵件
        mailService.sendMail(email_email);

        return "ok";
    }

項目啟動成功后訪問http://localhost:8080/sendMail即可成功發送郵件,收到郵件截圖如下:


收到郵件截圖

到此發送郵件功能全部實現,有問題歡迎留言溝通哦!
完整源碼地址: https://github.com/suisui2019/springboot-study

四、實現過程中踩過的坑

1.中文附件亂碼問題

java mail發郵件是附件名過長默認會被截斷顯示亂碼,在程序啟動時設置主動設置為false可正常顯示,具體設置代碼如下

public static void main(String[] args) {
        //java mail發郵件時附件名過長默認會被截斷,附件名顯示【tcmime.29121.29517.50430.bin】,主動設為false可正常顯示附件名
        System.setProperty("mail.mime.splitlongparameters""false");
        SpringApplication.run(SendMailApplication.class, args);
    }

2.無法注入JavaMailSender問題

在application.properties中配置spring.mail.host即可。

推薦閱讀

1.Spring Boot入門-快速搭建web項目
2.Spring Boot 2.X 整合Redis
3.Spring Boot 2.X 如何優雅的解決跨域問題?
4.Spring Boot 2.X 如何添加攔截器?
5.Spring Boot 2.X 集成spring session實現session共享
6.Redis Cluster搭建高可用Redis服務器集群
7.為什么單線程的Redis這么快?
8.一篇文章搞定SpringMVC參數綁定
9.SpringMVC+Mybatis 如何配置多個數據源並切換?
10.Spring條件注解@Conditional


限時領取免費Java相關資料,涵蓋了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo/Kafka、Hadoop、Hbase、Flink等高並發分布式、大數據、機器學習等技術。
關注下方公眾號即可免費領取:

Java碎碎念公眾號Java碎碎念公眾號

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM