使用QQ郵箱傳送內容-Java Mail -Spring Boot
阿新 • • 發佈:2020-07-13
假如你想使用qq郵箱傳送驗證碼 看這篇夠用
一.首先我們先登入自己的QQ郵箱獲取一個授權碼
什麼是授權碼?
如果我們希望使用騰訊、網易的郵箱伺服器傳送郵件就需要先註冊他們的郵箱,但是如果在程式中直接使用郵箱的密碼並不安全,所以各郵箱企業推出授權碼機制代表密碼
推薦使用騰訊郵箱的授權碼(qq號一般都綁定了qq郵箱),因為剛註冊的郵箱賬戶一般不允許直接用程式給其他使用者傳送郵件
1.1登入QQ郵箱
1.2點選設定
1.3 選擇賬戶選項卡
1.4 開啟POP3/SMTP服務
1.5 使用密保手機向指定號碼傳送
1.6 牢記授權碼,否則需要重新獲取
二.使用Java Mail 傳送郵件
2.1 新增依賴
<dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.6</version> </dependency>
2.2 添加發送郵件的工具類
@Component public class MailUtil {// 1.設定傳送郵件的一些引數 private static Properties pro = new Properties(); //2.傳送人 private static String sender; //3.傳送人賬號 private static String username; //4.傳送人密碼 private static String password; //TODO 因為要使用靜態成員變數 又要從配置檔案中載入引數 使用非靜態方法給靜態方法賦值 @Value("${mailbox.sender}")public void setSender(String sender) { MailUtil.sender = sender; } @Value("${mailbox.username}") public void setUsername(String username) { MailUtil.username = username; } @Value("${mailbox.password}") public void setPassword(String password) { MailUtil.password = password; } public MailUtil() { } static { pro.setProperty("mail.transport.protocol", "smtp"); pro.setProperty("mail.smtp.host", "smtp.qq.com"); pro.setProperty("mail.smtp.auth", "true"); pro.setProperty("mail.smtp.port", "587"); } /** * @Description: 郵件傳送 * @Param: recipients 收件人 * @Param: content 傳送內容 * @Param: headline 標題 * @return: boolean 未成功 成功 * @Author: @Dog_E * @Date: 2020/7/11 0011 */ public static boolean sendSimpleMail(String recipients, String content, String headline) { boolean res = false; try { // 2.建立一個會話物件和郵件伺服器互動 Session session = Session.getDefaultInstance(pro); // 3.建立一個郵件物件 MimeMessage message = new MimeMessage(session); message.setFrom(new InternetAddress(sender)); // 傳送人 message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(recipients)); // 收件人 message.setSubject(headline);// 設定郵件的標題 //正文 郵件內容 message.setContent(content, "text/html;charset=UTF-8");// 設定郵件的正文 message.setSentDate(new Date());// 傳送時間 message.saveChanges(); // 儲存設定 Transport transport = session.getTransport();// 獲取一個傳輸物件 transport.connect(username, password);// 設定傳送郵件使用者名稱和密碼 transport.sendMessage(message, message.getAllRecipients());// 傳送郵件 transport.close(); res = true; } catch (Exception e) { e.printStackTrace(); } return res; } }
2.3 在application.yml 新增 password 是剛申請QQ郵箱中的授權碼
#郵件
mailbox:
# 傳送人
sender: [email protected]
# 傳送人的QQ號
username: [email protected]
# 傳送人的 授權碼
password: 必填
2.4Conntroller
/** * @program: ruoyi * @description: 測試郵箱使用 * @author: @Dog_E * @create: 2020-07-11 17:55 **/ @RestController @RequestMapping("/test") public class LoginController { @PostMapping("/test") public String test(String recipients) { try { /** recipients 收件人 */ if (MailUtil.sendSimpleMail(recipients, "郵件內容", "標題:驗證碼")) { return "成功"; } else { return "失敗"; } } catch (Exception e) { e.printStackTrace(); return "失敗"; } } }
2.4 Postman測試
END-- 可以在線上環境 用於自己程式的異常丟擲傳送異常郵件或者郵件驗證碼 玩法多樣(個人版的應該是有次數的)