以往若要發信一般會用 Java Mail
但在 SpringBoot 中有更方便的做法
步驟
修改 pom.xml,添加 maven 依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
application.yml 配置 mail server
spring:
mail:
host: smtp.gmail.com # SMTP伺服器地址
port: 587 # SMTP伺服器端口
username: my.account@gmail.com # SMTP伺服器使用者名稱
password: my.password #輸入你Google帳戶產生的應用程式密碼
properties:
mail:
smtp:
auth: true # 啟用SMTP身分驗證
starttls:
enable: true # 啟用STARTTLS加密
default-encoding: utf-8
測試
@SpringBootTest
public class EmailTest {
@Autowired
private JavaMailSender javaMailSender;
@Test
public void sendTestEmail() {
SimpleMailMessage message = new SimpleMailMessage();
message.setTo("收信人@example.com"); //設置收件人信箱
message.setSubject("Test Email"); //設置信箱主題
message.setText("This is a test email."); //設置信箱內容
javaMailSender.send(message); //發送郵件
}
}
設定 html 格式
MimeMessage
MimeMessage message = mailSender.createMimeMessage();
message.setContent(content, "text/html; charset=utf-8");
mailSender.send(message);
MimeMessageHelper
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setText(text, true);
javaMailSender.send(message);
使用 Thymeleaf 作為內容模板
在 src/main/resources/templates 目錄下建立 html 檔案
其餘用法與一般 Thymeleaf 相同
<p>這是變數:<span th:text="${myVar}"></span></p>
讀取模板並塞值
// Context for Thymeleaf
Context context = new Context();
context.setVariable("myVar", "ABC");
// Process the template
String emailContent = templateEngine.process("email-template", context);