在不少服務中我常常須要用到發送郵件功能,所幸的是SpringBoot能夠快速使用的框架
spring-boot-starter-mail
,只要引入改框架咱們能夠快速的完成發送郵件功能。
mail
Jar<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
在國內用的最多的就是QQ郵件和網易163郵件,這裏會簡單講解獲取兩家服務商的發送郵件配置。html
等錄QQ郵箱,點擊設置
而後選擇帳戶
在下方能夠看到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務
,而後咱們須要把smtp
服務開啓,開啓成功後會獲得一個祕鑰。如圖所示:java
開啓成功須要在application.properties
配置文件中加入相應的配置,如下信息部分須要替換爲本身的信息,教程結束下面的帳號就會被停用spring
spring.mail.host=smtp.qq.com spring.mail.username=6928700@qq.com # 替換爲本身的QQ郵箱號 spring.mail.password=owqpkjmqiasnbigc # 替換爲本身的祕鑰或受權碼 spring.mail.port=465 spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.starttls.enable=true spring.mail.properties.mail.smtp.starttls.required=true # sender email.sender=6928700@qq.com # 替換爲本身的QQ郵箱號
登陸帳戶而後在設置
找到POP3/SMTP/IMAP
選項,而後開啓smtp服務,具體操做以下圖所示,而後修改對應的配置文件服務器
spring.mail.host=smtp.163.com spring.mail.username=xmsjgzs@163.com # 替換爲本身的163郵箱號 spring.mail.password=owqpkj163MC # 替換爲本身的受權碼 spring.mail.port=465 spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.starttls.enable=true spring.mail.properties.mail.smtp.starttls.required=true # sender email.sender=xmsjgzs@163.com # 替換爲本身的163郵箱號
這裏發送郵件咱們主要用到的是JavaMailSender
對象,發送簡單郵件主要是發送字符串內容,複雜的郵件咱們可能會添加附件或者是發送HTML格式的郵件,咱們先測試簡單的發送,代碼以下:app
override fun sendSimple(receiver: String, title: String, content: String) { logger.info("發送簡單郵件服務") val message = mailSender.createMimeMessage() val helper = MimeMessageHelper(message, true) helper.setFrom(sender) helper.setTo(receiver) helper.setSubject(title) helper.setText(content) mailSender.send(message) }
測試代碼框架
@RunWith(SpringJUnit4ClassRunner::class) @SpringBootTest class MailServiceImplTest { @Autowired lateinit var mailService: MailService @Test fun sendSimple() { mailService.sendSimple("xmsjgzs@163.com", "Hello Kotlin Mail", "SpringBoot Kotlin 專欄學習之JavaMailSender發送郵件") } }
檢查郵件是否收到發送的內容ide
咱們這裏用的HTML模板引擎是thymeleaf
,你們須要引入一下spring-boot-starter-thymeleaf
spring-boot
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
有個地方須要注意,SpringBoot項目默認靜態資源都是放在resources/templates
目錄下,因此咱們編寫的HTML模板就須要放在該目錄下,具體內容以下:學習
<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title th:text="${title}">Title</title> </head> <body> <h1 th:text="${name}">Demo</h1> <h1 th:text="${phone}">xxx</h1> </body> </html>
發送模板郵件主要實現代碼測試
override fun sendMail(receiver: String, title: String, o: Any, templateName: String) { logger.info("開始發送郵件服務,To:{}", receiver) val message = mailSender.createMimeMessage() val helper = MimeMessageHelper(message, true) helper.setFrom(sender) helper.setTo(receiver) helper.setSubject(title) val context = Context() context.setVariable("title", title) /* * 設置動態數據,這裏不建議強轉,具體業務需求傳入具體的對象 */ context.setVariables(o as MutableMap<String, Any>?) /* * 讀取取模板html代碼並賦值 */ val content = templateEngine.process(templateName, context) helper.setText(content, true) mailSender.send(message) logger.info("郵件發送結束") }
測試代碼
@Test fun sendMail() { val model = HashMap<String, Any>() model["name"] = "Tom" model["phone"] = "69288888" mailService.sendMail("xmsjgzs@163.com", "Kotlin Template Mail", model, "mail") }
查看郵件咱們能夠看到以下內容:
附件的添加也是很是容易的,我須要先把發送的附件放在resources/templates
目錄下,而後在MimeMessageHelper
對象中設置相應的屬性便可,以下所示:
helper.addAttachment("test.txt", FileSystemResource(File("test.txt")))
package io.intodream.kotlin06.service.impl import io.intodream.kotlin06.service.MailService import org.slf4j.Logger import org.slf4j.LoggerFactory import org.springframework.beans.factory.annotation.Autowired import org.springframework.beans.factory.annotation.Value import org.springframework.core.io.FileSystemResource import org.springframework.mail.javamail.JavaMailSender import org.springframework.mail.javamail.MimeMessageHelper import org.springframework.stereotype.Service import org.thymeleaf.TemplateEngine import org.thymeleaf.context.Context import java.io.File /** * {描述} * * @author yangxianxi@gogpay.cn * @date 2019/4/8 19:19 * */ @Service class MailServiceImpl @Autowired constructor(private var mailSender: JavaMailSender, private var templateEngine: TemplateEngine) : MailService{ val logger : Logger = LoggerFactory.getLogger(MailServiceImpl::class.java) @Value("\${email.sender}") val sender: String = "6928700@qq.com" override fun sendSimple(receiver: String, title: String, content: String) { logger.info("發送簡單郵件服務") val message = mailSender.createMimeMessage() val helper = MimeMessageHelper(message, true) helper.setFrom(sender) helper.setTo(receiver) helper.setSubject(title) helper.setText(content) mailSender.send(message) } override fun sendMail(receiver: String, title: String, o: Any, templateName: String) { logger.info("開始發送郵件服務,To:{}", receiver) val message = mailSender.createMimeMessage() val helper = MimeMessageHelper(message, true) helper.setFrom(sender) helper.setTo(receiver) helper.setSubject(title) val context = Context() context.setVariable("title", title) /* * 設置動態數據,這裏不建議強轉,具體業務需求傳入具體的對象 */ context.setVariables(o as MutableMap<String, Any>?) /* * 添加附件 */ helper.addAttachment("test.txt", FileSystemResource(File("test.txt"))) /* * 讀取取模板html代碼並賦值 */ val content = templateEngine.process(templateName, context) helper.setText(content, true) mailSender.send(message) logger.info("郵件發送結束") } }
package io.intodream.kotlin06.service.impl import io.intodream.kotlin06.service.MailService import org.junit.Test import org.junit.runner.RunWith import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.context.SpringBootTest import org.springframework.test.context.junit4.SpringJUnit4ClassRunner /** * {描述} * * @author yangxianxi@gogpay.cn * @date 2019/4/9 18:38 */ @RunWith(SpringJUnit4ClassRunner::class) @SpringBootTest class MailServiceImplTest { @Autowired lateinit var mailService: MailService @Test fun sendSimple() { mailService.sendSimple("xmsjgzs@163.com", "Hello Kotlin Mail", "SpringBoot Kotlin 專欄學習之JavaMailSender發送郵件") } @Test fun sendMail() { val model = HashMap<String, Any>() model["name"] = "Tom" model["phone"] = "69288888" mailService.sendMail("xmsjgzs@163.com", "Kotlin Template Mail", model, "mail") } }
關於Kotlin使用JavaMailSender
發送郵件的介紹就到此結束了,若是你們以爲教程有用麻煩點一下贊,若是有錯誤的地方歡迎指出。