SpringBoot整合郵件發送


本節介紹SpringBoot項目如何快速配置和發送郵件,包括簡單的郵件配置、發送簡單郵件、發送HTML郵件、發送攜帶附件的郵件等。

示例源碼在:https://github.com/laolunsi/spring-boot-examples


一、郵箱配置

要確保使用的郵箱開啟了客戶端登錄服務,以163郵箱為例:

注意在發送郵件的配置中,填寫的用戶名是郵箱地址,密碼是這里的授權碼。其他郵箱如QQ、企業郵箱也是類似的配置,不懂的建議百度哦,不是很復雜的。

下面我們直接進入示例吧:


二、簡單郵件發送

創建一個SpringBoot項目,引入如下依賴:

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

注:其他依賴按照自己的需求添加即可,如有問題可以參考示例項目。

填寫配置信息:

server:
  port: 8012
spring:
  mail:
    host: 'smtp.163.com'
    username: 'xxx@163.com'
    password: 'xxxx' # 授權碼

編寫測試接口:

@RestController
@RequestMapping(value = "email")
public class EmailAction {

    @Value("${spring.mail.username}")
    private String sendName;

    private final JavaMailSender mailSender; // 也可以使用AutoWired

    public EmailAction(JavaMailSender mailSender) {
        this.mailSender = mailSender;
    }

    @PostMapping(value = "simple")
    public String sendSimpleMsg(String msg, String email) {
        if (StringUtils.isEmpty(msg) || StringUtils.isEmpty(email)) {
            return "請輸入要發送消息和目標郵箱";
        }

        try {
            SimpleMailMessage mail = new SimpleMailMessage();
            mail.setFrom(sendName);
            mail.setTo(email);
            mail.setSubject("這是一封簡單郵件");
            mail.setText(msg);
            mailSender.send(mail);
            return "發送成功";
        } catch (Exception ex) {
            ex.printStackTrace();
            return "發送失敗:" + ex.getMessage();
        }
    }
}

測試一下:


三、HTML發送

除了普通的文本格式郵件,郵件還可以是HTML格式的,這樣就可以自定義豐富的樣式啦!

發送HTML郵件也很簡單,在發送郵件時指定內容為HTML即可:

@PostMapping(value = "html")
    public String sendHtmlMsg(String msg, String email) {
        if (StringUtils.isEmpty(msg) || StringUtils.isEmpty(email)) {
            return "請輸入要發送消息和目標郵箱";
        }
        try {
            MimeMessage message = mailSender.createMimeMessage();
            MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);
            messageHelper.setFrom(sendName);
            messageHelper.setTo(email);
            messageHelper.setSubject("HTML郵件");
            String html = "<div><h1><a name=\"hello\"></a><span>Hello</span></h1><blockquote><p><span>this is a html email.</span></p></blockquote><p>&nbsp;</p><p><span>"
                    + msg + "</span></p></div>";
            messageHelper.setText(html, true);
            mailSender.send(message);
            return "發送成功";
        } catch (MessagingException e) {
            e.printStackTrace();
            return "發送失敗:" + e.getMessage();
        }
    }


四、含附件的郵件發送

有時候需要發送攜帶附件的郵件,比如投遞簡歷,通常會攜帶一個PDF文件。

我們這里在resources下添加一個PDF文件,然后發送郵件時攜帶這個文件:

@PostMapping(value = "mime_with_file")
    public String sendWithFile(String msg, String email) {
        if (StringUtils.isEmpty(msg) || StringUtils.isEmpty(email)) {
            return "請輸入要發送消息和目標郵箱";
        }

        try {
            MimeMessage message = mailSender.createMimeMessage();
            MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);
            messageHelper.setFrom(sendName);
            messageHelper.setTo(email);
            messageHelper.setSubject("一封包含附件的郵件");
            messageHelper.setText(msg);
            // 該文件位於resources目錄下
            // 文件路徑不能直接寫文件名,系統會報錯找不到路徑,而IDEA卻能直接映射過去
            // 文件路徑可以寫成相對路徑src/main/resources/x.pdf,也可以用絕對路徑:System.getProperty("user.dir") + "/src/main/resources/x.pdf"
            File file = new File("src/main/resources/SpringBoot日志處理之Logback.pdf");
            //File file = new File(System.getProperty("user.dir") + "/src/main/resources/SpringBoot日志處理之Logback.pdf");
            System.out.println("文件是否存在:" + file.exists());
            messageHelper.addAttachment(file.getName(), file);
            mailSender.send(message);
            return "發送成功";
        } catch (MessagingException e) {
            e.printStackTrace();
            return "發送失敗:" + e.getMessage();
        }
    }

測試一下:


五、HTML含圖片發送

如果HTML郵件包含圖片等靜態資源怎么辦呢?即將圖片顯示在郵件中,這樣郵件接收者就不用下載附件才能看到圖片內容了。而且郵件內容也更加豐富了。
這個功能也很簡單,使用addInline即可,可以這樣做:

@PostMapping(value = "html_with_img")
    public String sendHtmlWithImg(String msg, String email) {
        if (StringUtils.isEmpty(msg) || StringUtils.isEmpty(email)) {
            return "請輸入要發送消息和目標郵箱";
        }
        try {
            MimeMessage message = mailSender.createMimeMessage();
            MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);
            messageHelper.setFrom(sendName);
            messageHelper.setTo(email);
            messageHelper.setSubject("帶靜態資源圖片的HTML郵件");
            String html = "<div><h1><a name=\"hello\"></a><span>Hello</span></h1><blockquote><p><span>this is a html email.</span></p></blockquote><p>&nbsp;</p><p><span>"
                    + msg + "</span></p><img src='cid:myImg' /></div>";
            messageHelper.setText(html, true);
            File file = new File("src/main/resources/wei.jpg");
            messageHelper.addInline("myImg", file);
            mailSender.send(message);
            return "發送成功";
        } catch (MessagingException e) {
            e.printStackTrace();
            return "發送失敗:" + e.getMessage();
        }
    }


六、使用模板發送郵件

利用模板引擎,比如thymeleaf,還可以通過模板文件來發送郵件:

首先引入spring-boot-starter-thymeleaf依賴:

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

在resources下新建一個templates文件夾,下面創建一個EmailTemplate.html文件:

<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8" />
    <title>郵件模板</title>
</head>

<body>
    Hello, this is your msg: <span th:text="${msg}"></span>
</body>
</html>
@Autowired
    private TemplateEngine templateEngine;

    @PostMapping(value = "html_with_template")
    public String sendHtmlByTemplate(String msg, String email) {
        if (StringUtils.isEmpty(msg) || StringUtils.isEmpty(email)) {
            return "請輸入要發送消息和目標郵箱";
        }

        try {
            MimeMessage message = mailSender.createMimeMessage();
            MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);
            messageHelper.setFrom(sendName);
            messageHelper.setTo(email);
            messageHelper.setSubject("使用HTML模板文件發送郵件");

            Context context = new Context();
            context.setVariable("msg", msg);
            messageHelper.setText(templateEngine.process("EmailTemplate", context), true);
            mailSender.send(message);
            return "發送成功";
        } catch (MessagingException e) {
            e.printStackTrace();
            return "發送失敗:" + e.getMessage();
        }
    }

參考:https://mrbird.cc/Spring-Boot-Email.html


免責聲明!

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



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