SpringBoot Email

以往若要發信一般會用 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);

發佈留言