1. 程式人生 > 其它 >SpringBoot郵件傳送通知或郵件群發通知

SpringBoot郵件傳送通知或郵件群發通知

技術標籤:SpringBootjava

SpringBoot郵件傳送通知或郵件群發通知

友情提醒:需要同時傳送給多人的時間會長一些,可以給程式碼做時間優化,也可以使用原生的mail jar包,下面給上依賴,下面兩個任選其一就可以

 <!-- 郵件傳送 -->
        <!-- 郵件通知原生 -->
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
</dependency> <!-- 時間會久一點 --> <!-- <dependency>--> <!-- <groupId>org.springframework.boot</groupId>--> <!-- <artifactId>spring-boot-starter-mail</artifactId>--> <!-- </dependency>-->
<dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-dysmsapi</artifactId> </dependency>

直接上程式碼,需要的引數也都很詳細的標註出來了,直接postman測試就可以

/**
     * @param sendMail 傳送人郵箱
     * @param authorizationCode 授權碼
     * @param takeMails 收件人郵箱
     * */
@ApiOperation("測試傳送郵件") @GetMapping("/sendMail") public CommonResultPojo sendMail (@Param("sendMail")String sendMail,@Param("authorizationCode")String authorizationCode, @Param("takeMail")String[] takeMails) throws Exception { Properties prop = new Properties(); prop.setProperty("mail.host", "smtp.qq.com"); //todo 設定QQ郵件伺服器 prop.setProperty("mail.transport.protocol", "smtp"); //todo 郵件傳送協議 prop.setProperty("mail.smtp.auth", "true"); //todo 需要驗證使用者名稱密碼 //todo QQ郵箱設定SSL加密 MailSSLSocketFactory sf = new MailSSLSocketFactory(); sf.setTrustAllHosts(true); prop.put("mail.smtp.ssl.enable", "true"); prop.put("mail.smtp.ssl.socketFactory", sf); //todo 建立定義整個應用程式所需的環境資訊的 Session 物件 Session session = Session.getDefaultInstance(prop, new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { //todo 傳入發件人的姓名和授權碼 return new PasswordAuthentication(sendMail,authorizationCode); } }); //todo 通過session獲取transport物件 Transport transport = session.getTransport(); //todo 通過transport物件郵箱使用者名稱和授權碼連線郵箱伺服器 transport.connect("smtp.qq.com",sendMail,authorizationCode); //todo 建立郵件,傳入session物件 for(String takeMail:takeMails) { MimeMessage mimeMessage = complexEmail(session, sendMail, takeMail); //todo 傳送郵件 transport.sendMessage(mimeMessage, mimeMessage.getAllRecipients()); } //todo 關閉連線 transport.close(); return new CommonResultPojo(200,"傳送成功",1); } //todo 傳送郵件方法 public static MimeMessage complexEmail(Session session,@Param("sendMail")String sendMail, @Param("takeMail") String takeMails) throws MessagingException { //todo 訊息的固定資訊 MimeMessage mimeMessage = new MimeMessage(session); //todo 發件人 mimeMessage.setFrom(new InternetAddress(sendMail)); //todo 收件人 mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(takeMails)); //todo 郵件標題 mimeMessage.setSubject("帶圖片和附件的郵件"); //todo 準備圖片資料 MimeBodyPart image = new MimeBodyPart(); DataHandler handler = new DataHandler(new FileDataSource("D:\\hello.jpg")); image.setDataHandler(handler); image.setContentID("test.png"); //todo 設定圖片id //todo 準備文字 MimeBodyPart text = new MimeBodyPart(); text.setContent("這是一段文字<img src='cid:test.png'>", "text/html;charset=utf-8"); //todo 附件 MimeBodyPart appendix = new MimeBodyPart(); appendix.setDataHandler(new DataHandler(new FileDataSource("D:\\zzzz.txt"))); appendix.setFileName("test.txt"); //todo 拼裝郵件正文 MimeMultipart mimeMultipart = new MimeMultipart(); mimeMultipart.addBodyPart(image); mimeMultipart.addBodyPart(text); mimeMultipart.setSubType("related"); //todo 文字和圖片內嵌成功 //todo 將拼裝好的正文內容設定為主體 MimeBodyPart contentText = new MimeBodyPart(); contentText.setContent(mimeMultipart); //todo 拼接附件 MimeMultipart allFile = new MimeMultipart(); allFile.addBodyPart(appendix); //todo 附件 allFile.addBodyPart(contentText); //todo 正文 allFile.setSubType("mixed"); //todo 正文和附件都存在郵件中,所有型別設定為mixed //todo 放到Message訊息中 mimeMessage.setContent(allFile); mimeMessage.saveChanges(); //todo 儲存修改 if(mimeMessage !=null){ System.out.println("郵件傳送成功!!"); }else { System.out.println("郵件傳送失敗!!"); } return mimeMessage; }

同時發給多人結果如下:

{
    "code": 200,
    "message": "傳送成功",
    "data": 1
}

在這裡插入圖片描述