SpringBoot——電子郵件

發送電子郵件

Spring 框架提供了一種使用 JavaMailSender 接口的簡單抽象方法發送電子郵件,而 SpringBoot 爲其提供了自動配置。

首先我們需要導入 spring-boot-starter-mail 包。

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

特別注意,因爲某些默認超時值是無限的,所以需要重新配置,以避免線程被一個無相應的郵箱服務器阻塞,如下面的例子所示:

spring.mail.properties.mail.smtp.connectiontimeout=5000
spring.mail.properties.mail.smtp.timeout=3000
spring.mail.properties.mail.smtp.writetimeout=5000

我們要知道,如果要從QQ郵箱發送一封郵件給163郵箱,並不是兩個用戶之間直接發送的,而是如下所示,用戶A把郵件發送給QQ郵箱服務器,然後QQ郵箱服務器發送給163郵箱服務器,最後用戶B上線之後再獲取這封郵件。

在這裏插入圖片描述

所以,我們還需要配置QQ郵箱的主機,你的郵箱賬戶的賬號、密碼(application.yml):

spring:
  #mail的配置
  mail:
    properties:
      smtp:
        connectiontimeout: 5000
        timeout: 3000
        writetimeout: 5000
    username: #你的郵箱賬號
    password: #授權碼
    host: smtp.qq.com

注意:上面的 password 並不是登錄時的密碼,獲取方式如下:

在這裏插入圖片描述

1、SimpleMailMessage用法

接下來我們就可以發送電子郵件,記得更改代碼中的接收方的郵箱發送方的郵箱

@SpringBootTest
class UmserverApplicationTests {
	@Autowired
	JavaMailSender mailSender;
	
	@Test
	public void testEmail() {
		SimpleMailMessage msg = new SimpleMailMessage();
		msg.setTo("接收方的郵箱");
		msg.setSubject("一封郵件");
		msg.setText("一封來自QQ郵箱的信件");
		msg.setFrom("發送方的郵箱——即剛剛配置的郵箱賬號");
		mailSender.send(msg);

	}
}

2、 MimeMessageHelper 用法

有時候我們需要發送複雜的郵件,例如在郵件中加入附件,或者加入 Html 標籤,那麼就可以使用 MimeMessageHelper

2.1 帶有附件和Html

記得更改代碼中的接收方的郵箱發送方的郵箱

@SpringBootTest
class UmserverApplicationTests {

	@Autowired
	JavaMailSender mailSender;
	
	@Test
	public void testEmail() throws MessagingException {
		MimeMessage message = mailSender.createMimeMessage();
		MimeMessageHelper helper = new MimeMessageHelper(message, true);
		helper.setTo("接收方的郵箱");
		helper.setFrom("發送方的郵箱——即剛剛配置的郵箱賬號");
		helper.setSubject("MimeMessageHelper的使用");
		helper.setText("<span style='color:red'>MimeMessageHelper的詳細使用如下:</span>" +
				"<img src='cid:IMG_2139'>", true);

		//在郵件內容中內置資源
		FileSystemResource res = new FileSystemResource(new File("本機上的圖片地址"));
		helper.addInline("IMG_2139", res);

		//給郵件添加附件
		FileSystemResource file = new FileSystemResource(new File("本機上的附件地址"));
		helper.addAttachment("CoolImage.jpg", file);

		mailSender.send(message);
	}
}

效果如下:

在這裏插入圖片描述

2.2 使用模板庫創建郵件內容

在企業應用中,開發人員通常不會採用上面的那些方法來生成電子郵件內容,原因如下:

  • 用Java代碼創建基於HTML的電子郵件內容很繁瑣且容易出錯;
  • 顯示邏輯和業務邏輯之間沒有明確的區分;
  • 更改電子郵件內容的顯示結構時需要編寫Java代碼,重新編譯,重新部署等。

解決這個問題的通常辦法是使用一個模版庫(例如FreeMarker)來定義郵件內容的顯示結構。這時代碼的任務就只剩下產生數據,加入到郵件模版中,然後發送郵件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章