使用spring-boot發送郵件如此簡單

在項目中我們經常需要用到發送郵件的功能,比如用戶註冊及忘記密碼功能中需要使用發送驗證碼到郵箱,在spring-boot中只需要在properties文件添加相關配置就能實現發送郵件的功能。
一、修改application.yml配置文件
配置的內容主要包括:

  1. 配置stmp郵件服務器
  2. 配置發送郵件的郵箱地址和密碼
  3. 配置發送郵件使用的協議和字符編碼
  4. 配置使用SSL發送郵件的端口及工廠類
    在yml文件中添加如下配置
spring:
  email:
     #SMTP server host,這裏我使用的是阿里雲SMTP服務器
    host: smtp.qiye.aliyun.com
    # Login user of the SMTP server
    username: test@aaa.com
    # Login password of the SMTP server
    password: 123456
    # Protocol used by the SMTP server
    protocol: smtp
    default-encoding: utf-8
    properties:
     mail:
      smtp:
       starttls:
         enable: false
       auth: true
       socketFactory:
         class:  javax.net.ssl.SSLSocketFactory
         port: 465

二、.編寫郵件發送類
1.使用模板引擎將要顯示的變量信息讀入到模板
2.構建消息類型(文本或html)
3.使用MimeMessageHelper 將發送者、接受者、郵件主題及郵件內容設置好
4.使用java的JavaMailSender 發送郵件

public abstract class AbstractEmailHandler {
	Logger logger= LogManager.getLogger(EmailHandler.class);
	@Autowired
	private JavaMailSender mailSender;
	@Autowired
	private TemplateEngine templateEngine;

	/**
	 * 發送 html 格式郵件
	 * @param from 發件人郵箱
	 * @param to 收件人郵箱
	 * @param subject 主題
	 * @param content 內容
	 */
	public void sendHtmlEmail(String from,String to,String subject,String content) {
		if (logger.isInfoEnabled()) {
			logger.info("start send html email ");
		}
		MimeMessage mimeMessage=mailSender.createMimeMessage();
		try {
			MimeMessageHelper messageHelper=new MimeMessageHelper(mimeMessage,true);
			messageHelper.setFrom(from);
			messageHelper.setTo(to);
			messageHelper.setSubject(subject);
			messageHelper.setText(content,true);
			ClassPathResource logoImage=new ClassPathResource("templates/images/logo.png");
			messageHelper.addInline("logoImage",logoImage);
			mailSender.send(mimeMessage);
			if (logger.isInfoEnabled()) {
				logger.info("html email send success");
			}
		} catch (Exception e) {
			logger.error("發送驗證碼郵件出錯",e);
			throw new BusinessException(ResponseStatusCode.REQUEST_BUSINESS_ERROR.getCode(),"驗證碼郵件發送失敗");
		}
	}

	/**
	 * 發送HTML郵件
	 * @param fromEmail 發送者郵箱地址
	 * @param toEmail 收件人郵箱地址
	 * @param subject 主題
	 * @param templateName 模板名稱
	 * @param contextParams 模板上下文變量
	 */
	public void sendHtmlEmail(String fromEmail, String toEmail, String subject, String templateName, Map<String,Object> contextParams) {
		// 創建html模板上下文對象
		Context context = new Context(Locale.CHINESE);
		if (contextParams!= null && !contextParams.isEmpty()) {
			context.setVariables(contextParams);
		}
		// 處理模板內容
		String emailContent = templateEngine.process(templateName, context);
		//  發送html郵件
		sendHtmlEmail(fromEmail, toEmail, subject, emailContent);
	}

	/**
	 * 發送文字郵件
	 * @param fromEmail
	 * @param toEmail
	 * @param subject
	 * @param content
	 */
	public void sendCharacterEmail(String fromEmail,String toEmail,String subject,String content) {
		if (logger.isInfoEnabled()) {
			logger.info("start send character email ");
		}
		MimeMessage mimeMessage=mailSender.createMimeMessage();
		MimeMessageHelper messageHelper= null;
		try {
			messageHelper = new MimeMessageHelper(mimeMessage,true);
			messageHelper.setFrom(fromEmail);
			messageHelper.setTo(toEmail);
			messageHelper.setSubject(subject);
			messageHelper.setText(content,false);
			mailSender.send(mimeMessage);
			if (logger.isInfoEnabled()) {
				logger.info("charater email send success");
			}
		} catch (MessagingException e) {
			logger.error("發送郵件出錯",e);
			throw new BusinessException(ResponseStatusCode.REQUEST_BUSINESS_ERROR.getCode(),"郵件發送失敗");
		}
	}
}

三、編寫郵件模板
1.在resources下創建templates目錄
在這裏插入圖片描述
2.創建html模板
在templates目錄下新增html,這裏我使用了thymeleaf模板引擎,具體用法可以去官網查看。

<!DOCTYPE html>
<html lang="en" xmlns:th="http://wwww.thymeleaf.org">
<head>
    <meta charset="UTF-8"/>
    <title>Title</title>
    <style>
    	#username a {
    		text-decoration: none;
    		color: #ddd;
    	}
    </style>
</head>
<body style="background-color: #f6f9fc; color: #ddd">

	<div>
		<div style="margin:30px;padding:40px;border-radius:30px;background-color: #393D49;box-shadow: 0px 6px 15px 0px #828282;max-width:630px;">
			<a href="https://www.ooomap.com"><img src="cid:logoImage" alt="園圈科技" style="width: 150px;height: 50px;margin-bottom: 30px"/></a>
			<div style="float:right;font-size: 30px;text-shadow: 0 0 8px black;color: #777e94;opacity: .3">ooomap.com</div>
			<div style="clear:both;font-size: 18px; margin-left: 40px;color: #ddd">您好:<span id="username"><span th:text="${username}" style="margin-left: 10px;font-size: 14px;opacity: .6;color: #ddd"></span></span>
				<br/>歡迎使用園圈3D地圖服務, 您的驗證碼爲:
			</div>
			<div style="font-size: 32px; color: #fff;padding: 5px 10px;margin: 30px auto;display: flex;border-radius: 8px;background-color: #393D49;letter-spacing: 15px"><span style="margin: auto;" th:text="${validateCode}"></span></div>
			<div style="font-size: 14px; color: #888; margin-top: 20px">
				<hr style="border-color: #666"/>
				驗證碼有效期5分鐘,請您儘快完成驗證,非本人操作請忽略。<br/>
				如果您有任何問題或疑問,請通過 <a href="mailto:[email protected]" style="color:#aaa; text-decoration: none">[email protected]</a> 聯繫我們。<br/>
				本郵件由系統自動發出,請勿直接回復。
			</div>
		</div>
	</div>
</body>

參考
https://www.thymeleaf.org/

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