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的縮寫,'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ì)象用來存放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
Java使用泛型實(shí)現(xiàn)棧結(jié)構(gòu)的示例代碼
泛型是JAVA重要的特性,使用泛型編程,可以使代碼復(fù)用率提高。本文將利用泛型實(shí)現(xiàn)簡(jiǎn)單的棧結(jié)構(gòu),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-08-08
JAVA為什么要使用封裝及如何封裝經(jīng)典實(shí)例
這篇文章主要給大家介紹了關(guān)于JAVA為什么要使用封裝及如何封裝的相關(guān)資料,封裝就是將屬性私有化,提供公有的方法訪問私有屬性,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10

