springboot使用163發送html格式的郵件
效果:
下面直接開始教學
注冊郵箱,生成授權碼
獲取163郵箱的授權碼,可以按照以下步驟操作:
- 登錄163郵箱
打開瀏覽器,訪問 163郵箱登錄頁面。
使用你的郵箱賬號和密碼登錄。 - 進入郵箱設置
登錄后,點擊頁面右上角的“設置”圖標(通常是一個齒輪圖標)。
在菜單中選擇“POP3/SMTP/IMAP”選項。 - 開啟SMTP服務
在“POP3/SMTP/IMAP”設置頁面中,找到“SMTP服務”選項。
點擊“開啟”按鈕,啟用SMTP服務。 - 獲取授權碼
開啟SMTP服務后,系統會提示你設置授權碼。
按照頁面提示,使用綁定的手機號發送短信驗證。
驗證成功后,系統會生成一個授權碼(通常是一串字母和數字的組合)。 - 保存授權碼
將生成的授權碼記錄下來,并妥善保存。
在配置文件中,將password字段的值替換為這個授權碼。
然后添加到application.yml中:
添加到application.yml
#郵箱基本配置mail:protocol: smtp#配置smtp服務主機地址host: smtp.163.com#發送者郵箱username: killer5482021@163.com#配置密碼,注意不是真正的密碼,而是剛剛申請到的授權碼password: ZFBFPLNWJIUKJUWS#端口號465或587port: 465#默認的郵件編碼為UTF-8default-encoding: UTF-8#其他參數properties:mail:smtp:auth: truessl:#本地測試,先放開sslenable: truerequired: true#開啟debug模式,這樣郵件發送過程的日志會在控制臺打印出來,方便排查錯誤debug: true
pom.xml中添加用到的依賴
<!-- 郵件 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency><!-- Java模板引擎 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency>
pom.xml中需要添加如下:
<build>
<resources><resource><directory>src/main/resources</directory><filtering>true</filtering><includes><include>**/*.properties</include><include>**/*.xml</include><include>**/*.html</include> <!-- 確保 HTML 文件被包含 --><include>**/*.css</include> <!-- 如果需要,包含 CSS 文件 --><include>**/*.js</include> <!-- 如果需要,包含 JS 文件 --><include>**/*.yml</include></includes></resource><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource></resources></build>
Controller:
@ApiOperation(value = "測試郵件發送")@GetMapping("/test-mail")public boolean mail(){MailRequest request = new MailRequest();request.setSubject("【信飛科技】,你好!測試郵件。");request.setSendFrom("xxxxxxxx82021@163.com");request.setSendTo("858399075@qq.com");// 構建HTML內容,包含超鏈接String link = "http://***.***.1.52/mrrraadmin";String htmlContent = mailService.buildHtmlContent(link);request.setText(htmlContent);return mailService.sendHtmlMail(request);}
MaiService:
package com.geofly.mrrra.lottery.service;import com.geofly.mrrra.lottery.entity.MailRequest;/*** @Description: 郵件發送接口** @Author yanghaoxing* @Date 2025/3/19 16:44*/public interface MailService {/*** @Description: 發送html郵件** @Param: [mailRequest]* @Return: boolean* @Author yanghaoxing* @Date 2025/3/19 18:29*/boolean sendHtmlMail(MailRequest mailRequest);/*** @Description: 獲取郵件模板** @Param: [link]* @Return: java.lang.String* @Author yanghaoxing* @Date 2025/3/19 18:40*/String buildHtmlContent(String link);
}
MailServiceImpl:
package com.geofly.mrrra.lottery.service.impl;import cn.hutool.core.lang.Assert;
import com.geofly.mrrra.lottery.entity.MailRequest;
import com.geofly.mrrra.lottery.service.MailService;
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.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;/*** 郵件接口實現類** @Auther: yanghaoxing* @Date: 2025/3/19*/
@Service("mailServiceImpl")
public class MailServiceImpl implements MailService {private static final Logger log = LoggerFactory.getLogger(MailServiceImpl.class);@Autowiredprivate JavaMailSender javaMailSender;@Autowiredprivate TemplateEngine templateEngine;public void checkMail(MailRequest mailRequest) {Assert.notNull(mailRequest,"郵件請求不能為空");Assert.notNull(mailRequest.getSendTo(), "郵件收件人不能為空");Assert.notNull(mailRequest.getSubject(), "郵件主題不能為空");Assert.notNull(mailRequest.getText(), "郵件收件人不能為空");}@Overridepublic boolean sendHtmlMail(MailRequest mailRequest) {checkMail(mailRequest); // 檢查郵件參數是否合法MimeMessage message = javaMailSender.createMimeMessage();try {MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");helper.setTo(mailRequest.getSendTo());helper.setFrom(mailRequest.getSendFrom());helper.setSubject(mailRequest.getSubject());// 設置郵件內容為HTML格式helper.setText(mailRequest.getText(), true); // 第二個參數為true,表示內容為HTMLjavaMailSender.send(message);return true;} catch (MessagingException e) {log.error("郵件發送失敗", e);e.printStackTrace();}return false;}@Overridepublic String buildHtmlContent(String link) {Context context = new Context();context.setVariable("link", link);return templateEngine.process("email-template", context); // email-template是模板文件名}
}
創建Thymeleaf模板
在src/main/resources/templates目錄下創建一個Thymeleaf模板文件,例如email-template.html:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>【信飛科技】重要通知!</title>
</head>
<body><h1>這是一封測試郵件</h1><p>點擊以下鏈接訪問示例網站:</p><a th:href="${link}">點擊進行確認</a>
</body>
</html>
然后調用測試接口就會收到郵件,撒花!!