2020 年 3 月 25 日

IT Skills 波林

Polin WEI – 資訊工作者的技術手札

Spring Boot 透過 Gmail SMTP 寄信

1 min read
一起找晨

Spring Boot 透過 Gmail SMTP 寄信

 

WordPress Useful Plugin – 使用 WP Mail SMTP 透過 GMail 來寄信 是讓 WordPress 可以透過 Goole API 的方式來寄信,而在 Spring Boot 中也可以透過客製程式來達成這功能。

 

  • 在 build.gradle 加入 dependencies: spring-boot-starter-mail
compile("org.springframework.boot:spring-boot-starter-mail") // Mail

 

  • 在 application.properties 加入連結到 Gmail 的參數
# =================================
# Mail
# =================================
spring.mail.default-encoding=UTF-8
# Gmail SMTP
spring.mail.host=smtp.gmail.com
# TLS , port 587
spring.mail.port=587
spring.mail.username=my.account@gmail.com
spring.mail.password=my.password

# Other properties
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true

在 application.properties 這些的參數設定,也可以透過下方的程式碼來達成。

@Configuration
public class MailConfig {

 @Bean
 public JavaMailSender getJavaMailSender() {
     JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
     mailSender.setHost("smtp.gmail.com");
     mailSender.setPort(587);
      
     mailSender.setUsername("my.gmail@gmail.com");
     mailSender.setPassword("my.password");
      
     Properties props = mailSender.getJavaMailProperties();
     props.put("mail.transport.protocol", "smtp");
     props.put("mail.smtp.auth", "true");
     props.put("mail.smtp.starttls.enable", "true");
     props.put("mail.smtp.starttls.required", "true");
     props.put("mail.debug", "true");
      
     return mailSender;
 }
 
}

 

 

  • 建立發送信件測試程式
@SpringBootTest
public class TestMail {
 @Autowired
 JavaMailSender mailSender;

 @Test
 void sendToGmail() {
  SimpleMailMessage message = new SimpleMailMessage();  
  
  message.setTo("my.msn@msn.com","my.gmail@gmail.com");
  message.setSubject("測試透過 Gmail 去發信");
  message.setText("org.springframework.mail.SimpleMailMessage 透過 Gmail 發信。");
  
  mailSender.send(message);
 }
}

 

  • 使用 Google 應用程式密碼登入

如果依上面的設定仍無法透過 Gmail 寄出信件時,可以從下列錯誤訊息的連結網址 https://support.google.com/mail/?p=InvalidSecondFactor 去查詢原因,它主要的說明是:可能因為您的 Google 帳號有啟用兩步驟驗證,所以無法通過認證。

org.springframework.mail.MailAuthenticationException: Authentication failed; nested exception is javax.mail.AuthenticationFailedException: 534-5.7.9 Application-specific password required. Learn more at 534 5.7.9  https://support.google.com/mail/?p=InvalidSecondFactor a28sm72486732pfh.119 - gsmtp

這時候,就必需依它的說明:建立一組 Google 應用程式密碼來作登入。前往您的 Google 帳戶 ,選擇左側導覽面板上的 [安全性],按一下底部的 [選取應用程式],然後選擇您使用的應用程式,或是建立一組應用程式使用用的密碼:

 

google-secutiry

 

並依下面的圖示建立一組應用程式的密碼,再來置換 application.properties 裡的spring.mail.password 就可以了。

google-application-01

google-application

google-application

 

這樣就可以寄信囉!!

Copyright © All rights reserved. | Newsphere by AF themes.