Spring Boot使用JavaMailSender發送郵件


Spring提供了非常好用的JavaMailSender接口實現郵件發送。在Spring Boot中也提供了相應的自動化配置。

這篇文章主要講如何在Spring Boot中使用JavaMailSender發送郵件。

 

發送郵件

1,pom.xml中引入spring-boot-starter-mail依賴:

 

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-mail</artifactId>

</dependency>

 

 

2,application.properties中配置相應的屬性:(我這里模擬的是163郵箱給QQ郵箱發送郵件)

spring.mail.host=smtp.163.com

spring.mail.username=郵箱用戶名 so****@163.com

spring.mail.password=郵箱密碼

spring.mail.default-encoding=UTF-8

 

3,寫發送郵件的測試類

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.mail.SimpleMailMessage;

import org.springframework.mail.javamail.JavaMailSender;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

 

@RestController

@RequestMapping("/mail")

public class MailController {

 

private final Logger logger = LoggerFactory.getLogger(this.getClass());

 

@Autowired

    private JavaMailSender mailSender;

 

@RequestMapping("/send")

public void sendMail(){

        SimpleMailMessage message = new SimpleMailMessage();

        message.setFrom("so****@163.com");

        message.setTo("239****@qq.com");

        message.setSubject("it is a test for spring boot");

        message.setText("你好,我是小黃,我正在測試發送郵件。");

 

        try {

            mailSender.send(message);

            logger.info("小黃的測試郵件已發送。");

        } catch (Exception e) {

            logger.error("小黃發送郵件時發生異常了!", e);

        }

    }

}

 

4,運行啟動類

import org.mybatis.spring.annotation.MapperScan;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.EnableAutoConfiguration;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;

 

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})

@EnableAutoConfiguration

@MapperScan("cn.yideng.*.dao")

public class DemoApplication {

 

public static void main(String[] args) {

SpringApplication.run(DemoApplication.class, args);

}

}

 

 

5,瀏覽器運行 http://localhost:8080/mail/send   

6,登錄163郵箱,在發送箱里查看

 

7,登錄QQ郵箱,在收件箱里查看,如下圖

 

 

可以看出Spring Bootstarter模塊提供了自動化配置,在引入了spring-boot-starter-mail依賴之后,會根據配置文件中的內容去創建JavaMailSender實例,因此我們可以直接在需要使用的地方直接@Autowired來引入 JavaMailSender 郵件發送對象。

 

當然在實際使用過程中,不會這么簡單,我們可能會要求帶上附件、或使用郵件模塊等。這時我們就需要使用MimeMessage來設置更復雜的右鍵內容,下面就來看看怎么實現它。

發送帶附件的郵件

測試類 : 還是模擬 163郵箱 給QQ郵箱發送郵件

import java.io.File;

 

import javax.mail.MessagingException;

import javax.mail.internet.MimeMessage;

 

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.core.io.FileSystemResource;

import org.springframework.mail.javamail.JavaMailSender;

import org.springframework.mail.javamail.MimeMessageHelper;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

 

/**

 *  發送有附件的郵件

 *

 */

@RestController

@RequestMapping("/mail")

public class AttachmentsMailController {

private final Logger logger = LoggerFactory.getLogger(this.getClass());

 

@Autowired

    private JavaMailSender mailSender;

 

@RequestMapping("/att")

public void sendMail() throws MessagingException{

 

MimeMessage mimeMessage = mailSender.createMimeMessage();

MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);

 

helper.setFrom("so****@163.com");

helper.setTo("239****@qq.com");

helper.setSubject("主題:發送有附件的郵件");

helper.setText("你好,我是小黃,我正在測試發送一封有附件的郵件。");

        

 

FileSystemResource file1 = new FileSystemResource(new File("d:\\cat.jpg"));

FileSystemResource file2 = new FileSystemResource(new File("d:\\java-1.jpg"));

helper.addAttachment("附件-1.jpg", file1);

helper.addAttachment("附件-2.jpg", file2);

 

        try {

            mailSender.send(mimeMessage);

            logger.info("小黃的測試帶附件的郵件已發送。");

        } catch (Exception e) {

            logger.error("小黃發送帶附件郵件時發生異常了!", e);

        }

    }

}

2,需要 D盤下准備兩張圖片cat.jpg  java-1.jpg,

 

3,瀏覽器運行 http://localhost:8080/mail/att   

4,登錄163郵箱,在發送箱里查看,如下圖

 

5,登錄QQ郵箱,在收件箱里查看,如下圖

 

 

嵌入靜態資源的郵件

還有一種是通過嵌入圖片等靜態資源,可以直接看到圖片,而不用從附近中查看具體的圖片,來看看吧。

測試類:

 

import java.io.File;

import javax.mail.MessagingException;

import javax.mail.internet.MimeMessage;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.core.io.FileSystemResource;

import org.springframework.mail.javamail.JavaMailSender;

import org.springframework.mail.javamail.MimeMessageHelper;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

 

/**

 *  嵌入靜態資源

 */

@RestController

@RequestMapping("/mail")

public class StaticResourceMailController {

private final Logger logger = LoggerFactory.getLogger(this.getClass());

 

@Autowired

    private JavaMailSender mailSender;

 

@RequestMapping("/static")

public void sendMail() throws MessagingException{

 

MimeMessage mimeMessage = mailSender.createMimeMessage();

MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);

 

helper.setFrom("so****@163.com");

helper.setTo("239****@qq.com");

helper.setSubject("主題:嵌入靜態資源");

helper.setText("<html><body><img src=\"cid:hello\" ></body></html>", true);

        

// 注意addInline()中資源名稱 hello 必須與 text正文中cid:hello對應起來

FileSystemResource file1 = new FileSystemResource(new File("d:\\cat.jpg"));

helper.addInline("hello", file1);

 

 

        try {

            mailSender.send(mimeMessage);

            logger.info("小黃的測試嵌入靜態資源的郵件已發送。");

        } catch (Exception e) {

            logger.error("小黃發送嵌入靜態資源的郵件時發生異常了!", e);

        }

    }

}

 

要特別注意addInline()中資源名稱 hello 必須與 text正文中cid:hello對應

2,需要 在D盤下准備兩張圖片cat.jpg

3,瀏覽器運行 http://localhost:8080/mail/static

4,登錄163郵箱,在發送箱里查看,如下圖

 

5,登錄QQ郵箱,在收件箱里查看,如下圖

 

 

好了,Spring Boot使用JavaMailSender發送郵件就到這里了。


免責聲明!

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



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