Spring框架JavaMailSender發(fā)送郵件工具類詳解
更新時(shí)間:2020年04月22日 16:32:33 作者:Tlimited
這篇文章主要為大家詳細(xì)介紹了Spring框架JavaMailSender發(fā)送郵件工具類,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
本文實(shí)例為大家分享了Spring框架JavaMailSender發(fā)送郵件工具類,供大家參考,具體內(nèi)容如下
需要用到的jar包:
下面是發(fā)送工具類代碼:
package com.test.email; import org.springframework.core.io.FileSystemResource; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSenderImpl; import org.springframework.mail.javamail.MimeMessageHelper; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; import javax.mail.internet.MimeUtility; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; /** * @author tlimited * @create 2017-08-17 11:38 **/ public class SendMailUtils { // Spring的郵件工具類,實(shí)現(xiàn)了MailSender和JavaMailSender接口 private JavaMailSenderImpl mailSender; /** * 初始化郵件發(fā)送數(shù)據(jù) * @param host 服務(wù)器 * @param username 發(fā)送人 * @param passwd 發(fā)送人密碼 */ public void setInitData(String host,String username,String passwd){ //創(chuàng)建郵件發(fā)送服務(wù)器 mailSender = new JavaMailSenderImpl(); mailSender.setHost(host); // mailSender.setPort(465); mailSender.setUsername(username); mailSender.setPassword(passwd); //加認(rèn)證機(jī)制 Properties javaMailProperties = new Properties(); javaMailProperties.put("mail.smtp.auth", true); javaMailProperties.put("mail.smtp.starttls.enable", true); javaMailProperties.put("mail.smtp.timeout", 5000); mailSender.setJavaMailProperties(javaMailProperties); System.out.println("初始化郵件發(fā)送信息完成"); } /** * 發(fā)送普通文本 * @param email 對(duì)方郵箱地址 * @param subject 主題 * @param text 郵件內(nèi)容 */ public void simpleMailSend(String email,String subject,String text) { //創(chuàng)建郵件內(nèi)容 SimpleMailMessage message=new SimpleMailMessage(); message.setFrom(mailSender.getUsername()); message.setTo(email); message.setSubject(subject); message.setText(text); //發(fā)送郵件 mailSender.send(message); System.out.println("發(fā)送成功"); } /** * 發(fā)送附件,支持多附件 * //使用JavaMail的MimeMessage,支付更加復(fù)雜的郵件格式和內(nèi)容 //MimeMessages為復(fù)雜郵件模板,支持文本、附件、html、圖片等。 * @param email 對(duì)方郵箱 * @param subject 主題 * @param text 內(nèi)容 * @param paths 附件路徑,和文件名 * @throws MessagingException */ public void attachedSend(String email,String subject,String text,Map<String,String> paths) throws MessagingException { MimeMessage message = mailSender.createMimeMessage(); //創(chuàng)建MimeMessageHelper對(duì)象,處理MimeMessage的輔助類 MimeMessageHelper helper = new MimeMessageHelper(message, true); //使用輔助類MimeMessage設(shè)定參數(shù) helper.setFrom(mailSender.getUsername()); helper.setTo(email); helper.setSubject(subject); helper.setText(text); if (paths!=null){ paths.forEach((k,v)->{ //加載文件資源,作為附件 FileSystemResource file = new FileSystemResource(v); try { //添加附件 helper.addAttachment(k, file); } catch (Exception e) { e.printStackTrace(); } }); } //發(fā)送郵件 mailSender.send(message); System.out.println("發(fā)送成功"); } /** * 發(fā)送html文件,支持多圖片 * @param email 對(duì)方郵箱 * @param subject 主題 * @param text 內(nèi)容 * @param paths 富文本中添加用到的路徑,一般是圖片,或者css,js文件 * @throws MessagingException */ public void richContentSend(String email,String subject,String text,Map<String,String> paths) throws MessagingException { MimeMessage message = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setFrom(mailSender.getUsername()); helper.setTo(email); helper.setSubject(subject); //第二個(gè)參數(shù)true,表示text的內(nèi)容為html,然后注意<img/>標(biāo)簽,src='cid:file','cid'是contentId的縮寫(xiě),'file'是一個(gè)標(biāo)記, //需要在后面的代碼中調(diào)用MimeMessageHelper的addInline方法替代成文件 helper.setText(text,true); //文件地址相對(duì)應(yīng)src目錄 // ClassPathResource file = new ClassPathResource("logo.png"); if (paths!=null){ paths.forEach((k,v)->{ //文件地址對(duì)應(yīng)系統(tǒng)目錄 FileSystemResource file = new FileSystemResource(v); try { helper.addInline(k, file); } catch (Exception e) { e.printStackTrace(); } }); } mailSender.send(message); System.out.println("發(fā)送成功"); } /** * 群發(fā)多人,且多附件 * @param mailto 多人郵件地址 * @param subject 主題 * @param text 內(nèi)容 * @param filePath 文件路徑 * @throws Exception */ public void sendBatchMailWithFile(String[] emails, String subject, String text, String[] filePath) throws Exception { MimeMessage mimeMessage = mailSender.createMimeMessage(); MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8"); messageHelper.setFrom(new InternetAddress(MimeUtility.encodeText(mailSender.getUsername()))); messageHelper.setSubject(subject); if (filePath != null) { BodyPart mdp = new MimeBodyPart();// 新建一個(gè)存放信件內(nèi)容的BodyPart對(duì)象 mdp.setContent(text, "text/html;charset=UTF-8");// 給BodyPart對(duì)象設(shè)置內(nèi)容和格式/編碼方式 Multipart mm = new MimeMultipart();// 新建一個(gè)MimeMultipart對(duì)象用來(lái)存放BodyPart對(duì)象 mm.addBodyPart(mdp);// 將BodyPart加入到MimeMultipart對(duì)象中(可以加入多個(gè)BodyPart) // 把mm作為消息對(duì)象的內(nèi)容 MimeBodyPart filePart; FileDataSource filedatasource; // 逐個(gè)加入附件 for (int j = 0; j < filePath.length; j++) { filePart = new MimeBodyPart(); filedatasource = new FileDataSource(filePath[j]); filePart.setDataHandler(new DataHandler(filedatasource)); try { filePart.setFileName(MimeUtility.encodeText(filedatasource.getName())); } catch (Exception e) { e.printStackTrace(); } mm.addBodyPart(filePart); } mimeMessage.setContent(mm); } else { messageHelper.setText(text, true); } List<InternetAddress> list = new ArrayList<InternetAddress>();// 不能使用string類型的類型,這樣只能發(fā)送一個(gè)收件人 for (int i = 0; i < emails.length; i++) { list.add(new InternetAddress(emails[i])); } InternetAddress[] address = list.toArray(new InternetAddress[list.size()]); mimeMessage.setRecipients(Message.RecipientType.TO, address); mimeMessage = messageHelper.getMimeMessage(); mailSender.send(mimeMessage); System.out.println("發(fā)送成功"); } public static void main(String[] args) throws Exception { SendMailUtils test = new SendMailUtils(); //測(cè)試發(fā)送普通文本 // test.setInitData("smtp.qq.com","706548532@qq.com","123456"); test.setInitData("smtp.163.com","1234@163.com","1234"); test.simpleMailSend("1326624701@qq.com","測(cè)試","測(cè)試能不能發(fā)郵件?。?!"); //測(cè)試發(fā)送附件 /* test.setInitData("smtp.163.com","1234@163.com","1234"); Map<String,String> map = new HashMap<String, String>(); map.put("test12.xls", "D:\\tomcat8\\apache-tomcat-8.0.29\\test12.xls"); map.put("wsdl.rar", "D:\\wsdl.rar"); test.attachedSend("706548532@qq.com","Hello Attachment","This is a mail with attachment",map); */ //測(cè)試發(fā)送富文本(html文件) /* test.setInitData("smtp.163.com","1234@163.com","1234"); String text = "<body><p style='color:red;'>Hello Html Email</p><img src='cid:file'/></body>"; Map<String,String> map = new HashMap<String, String>(); map.put("file", "E:\\1f7827.jpg"); test.richContentSend("706548532@qq.com","郵件標(biāo)題",text,map);*/ //測(cè)試群發(fā)多人多附件 test.setInitData("smtp.163.com","1234@163.com","1234"); String [] address = {"706548532@qq.com","1326624701@qq.com"}; String [] filePath = {"D:\\tomcat8\\apache-tomcat-8.0.29\\test12.xls", "D:\\wsdl.rar"}; test.sendBatchMailWithFile(address, "群發(fā)多文件", "實(shí)時(shí)", filePath); } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:
- Java基于JavaMail實(shí)現(xiàn)向QQ郵箱發(fā)送郵件
- java中javamail發(fā)送帶附件的郵件實(shí)現(xiàn)方法
- java中javamail收發(fā)郵件實(shí)現(xiàn)方法
- JavaWeb中使用JavaMail實(shí)現(xiàn)發(fā)送郵件功能實(shí)例詳解
- Java程序中使用JavaMail發(fā)送帶圖片和附件的郵件
- 基于JavaMail的Java實(shí)現(xiàn)簡(jiǎn)單郵件發(fā)送功能
- 基于SSM框架+Javamail發(fā)送郵件的代碼實(shí)例
- Java使用JavaMail API發(fā)送和接收郵件的代碼示例
- JavaMail實(shí)現(xiàn)發(fā)送超文本(html)格式郵件的方法
- 輕松學(xué)會(huì)使用JavaMail?API發(fā)送郵件
相關(guān)文章
spring security登錄成功后跳轉(zhuǎn)回登錄前的頁(yè)面
這篇文章主要介紹了spring security登錄成功后跳轉(zhuǎn)回登錄前的頁(yè)面,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09關(guān)于ArrayList初始化容量的問(wèn)題
這篇文章主要介紹了關(guān)于ArrayList初始化容量的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03Java使用泛型實(shí)現(xiàn)棧結(jié)構(gòu)的示例代碼
泛型是JAVA重要的特性,使用泛型編程,可以使代碼復(fù)用率提高。本文將利用泛型實(shí)現(xiàn)簡(jiǎn)單的棧結(jié)構(gòu),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-08-08JAVA為什么要使用封裝及如何封裝經(jīng)典實(shí)例
這篇文章主要給大家介紹了關(guān)于JAVA為什么要使用封裝及如何封裝的相關(guān)資料,封裝就是將屬性私有化,提供公有的方法訪問(wèn)私有屬性,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10