Sun公司提供了JavaMail用來實現郵件傳送,但是設定煩瑣,Spring中提供了JavaMailSender用來簡化郵件設定,Spring Boot則提供了MailSenderAutoConfiguration對郵件的傳送做了進一步簡化。
使用郵箱傳送郵件,首先要申請開通POP3/SMTP服務或者IMAP/SMTP服務。SMTP全稱為Simple Mail Transfer Protocol,譯作簡單郵件傳輸協定,它定義了郵件使用者端軟體與SMTP伺服器之間,以及SMTP伺服器與SMTP伺服器之間的通訊規則。
我使用的是QQ郵箱,若你也使用QQ郵箱,可以參考下面截圖。當然我也試了其它郵箱,開通方法大同小異。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
server.port=8300
#郵箱設定
#平臺地址,這裡用的是qq郵箱,使用其他郵箱請更換
spring.mail.host=smtp.qq.com
#埠號
spring.mail.port=587
#傳送郵件的郵箱地址:改成自己的郵箱
[email protected]
#注意這裡不是郵件的登入密碼,是傳送簡訊後它給你的授權碼 填寫到這裡
spring.mail.password=xxxxxxxxx
#與發件郵箱一致
[email protected]
由於Spring Boot的starter模組提供了自動化設定,所以在引入了spring-boot-starter-mail依賴之後,會根據組態檔中的內容去建立JavaMailSender範例,因此我們可以直接在需要使用的地方直接@Autowired來引入郵件傳送物件。
EmailService
package com.test.service; /** * @Author chen bo * @Date 2023/10 * @Des */ public interface EmailService { /** * 傳送文字郵件 * * @param to 收件人 * @param subject 主題 * @param content 內容 */ void sendSimpleMail(String to, String subject, String content); /** * 傳送HTML郵件 * * @param to 收件人 * @param subject 主題 * @param content 內容 */ void sendHtmlMail(String to, String subject, String content); /** * 傳送帶附件的郵件 * * @param to 收件人 * @param subject 主題 * @param content 內容 * @param filePath 附件 */ void sendAttachmentsMail(String to, String subject, String content, String filePath); }
EmailServiceImpl
/** * @Author chen bo * @Date 2023/10 * @Des */ @Slf4j @Service public class EmailServiceImpl implements EmailService { /** * Spring Boot 提供了一個傳送郵件的簡單抽象,使用的是下面這個介面,這裡直接注入即可使用 */ @Autowired private JavaMailSender mailSender; /** * 組態檔中我的qq郵箱 */ @Value("${spring.mail.from}") private String from; /** * 簡單文字郵件 * @param to 收件人 * @param subject 主題 * @param content 內容 */ @Override public void sendSimpleMail(String to, String subject, String content) { //建立SimpleMailMessage物件 SimpleMailMessage message = new SimpleMailMessage(); //郵件傳送人 message.setFrom(from); //郵件接收人 message.setTo(to); //郵件主題 message.setSubject(subject); //郵件內容 message.setText(content); //傳送郵件 mailSender.send(message); } /** * html郵件 * @param to 收件人,多個時引數形式 :"[email protected],[email protected],[email protected]" * @param subject 主題 * @param content 內容 */ @Override public void sendHtmlMail(String to, String subject, String content) { //獲取MimeMessage物件 MimeMessage message = mailSender.createMimeMessage(); MimeMessageHelper messageHelper; try { messageHelper = new MimeMessageHelper(message, true); //郵件傳送人 messageHelper.setFrom(from); //郵件接收人,設定多個收件人地址 InternetAddress[] internetAddressTo = InternetAddress.parse(to); messageHelper.setTo(internetAddressTo); //messageHelper.setTo(to); //郵件主題 message.setSubject(subject); //郵件內容,html格式 messageHelper.setText(content, true); //傳送 mailSender.send(message); //紀錄檔資訊 log.info("郵件已經傳送。"); } catch (Exception e) { log.error("傳送郵件時發生異常!", e); } } /** * 帶附件的郵件 * @param to 收件人 * @param subject 主題 * @param content 內容 * @param filePath 附件 */ @Override public void sendAttachmentsMail(String to, String subject, String content, String filePath) { MimeMessage message = mailSender.createMimeMessage(); try { MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setFrom(from); helper.setTo(to); helper.setSubject(subject); helper.setText(content, true); FileSystemResource file = new FileSystemResource(new File(filePath)); String fileName = filePath.substring(filePath.lastIndexOf(File.separator)); helper.addAttachment(fileName, file); mailSender.send(message); //紀錄檔資訊 log.info("郵件已經傳送。"); } catch (Exception e) { log.error("傳送郵件時發生異常!", e); } } }
EmailController
/** * @Author chen bo * @Date 2023/10 * @Des */ @RestController public class EmailController { @Autowired private EmailService emailService; @PostMapping("sendSimpleMail") public String sendSimpleMail(String to, String subject, String content) { emailService.sendSimpleMail(to, subject, content); return "Hi"; } }
postman請求
收到郵件
https://github.com/toutouge/javademosecond/tree/master/hellolearn
作 者:請叫我頭頭哥
出 處:http://www.cnblogs.com/toutou/
關於作者:專注於基礎平臺的專案開發。如有問題或建議,請多多賜教!
版權宣告:本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連結。
特此宣告:所有評論和私信都會在第一時間回覆。也歡迎園子的大大們指正錯誤,共同進步。或者直接私信我
聲援博主:如果您覺得文章對您有幫助,可以點選文章右下角【推薦】一下。您的鼓勵是作者堅持原創和持續寫作的最大動力!