SpringBoot整合JavaMail郵件的兩種方式
更新時間:2024年05月15日 11:13:07 作者:陌殤殤
這篇文章主要介紹了SpringBoot整合JavaMail郵件的兩種方式,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
JavaMail郵件發(fā)送
1.方式一:SpringBoot整合JavaMailSender
1.yml配置提取
application:
mail:
smtp:
#服務(wù)器主機(jī)名
host: smtp.qq.com
#服務(wù)器端口
port: 465
#你的郵箱地址
username: 5XXXxxxx1@qq.com
#你的授權(quán)碼
password: xxxxx
#編碼格式
defaultEncoding: utf-8
#是否進(jìn)行用戶名密碼校驗(yàn)
auth: true
#設(shè)置超時時間
timeout: 20000
#是否啟用ssl
ssl-enabled: true/**
* 郵件配置
* @author li
*/
@Data
@ConfigurationProperties(prefix = "application.mail.smtp")
public class MailOptionProperties {
/**
* 服務(wù)器主機(jī)名
*/
private String host;
/**
* 服務(wù)器發(fā)送端口
*/
private String port;
/**
* 郵箱地址
*/
private String username;
/**
* 授權(quán)碼
*/
private String password;
/**
* 編碼格式
*/
private String defaultEncoding;
/**
* 是否進(jìn)行用戶名密碼校驗(yàn)
*/
private String auth;
/**
* 設(shè)置超時時間
*/
private String timeout;
/**
* ssl啟用
*/
private boolean sslEnabled;
}2.config配置
/**
* 郵件配置
* @author li
*/
@Configuration
@EnableConfigurationProperties({MailOptionProperties.class})
public class JavaMailConfig {
@Autowired
private MailOptionProperties mailOptionProperties;
@Bean
public JavaMailSender javaMailSender() throws GeneralSecurityException {
JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
javaMailSender.setHost(mailOptionProperties.getHost());
javaMailSender.setUsername(mailOptionProperties.getUsername());
javaMailSender.setDefaultEncoding(mailOptionProperties.getDefaultEncoding());
javaMailSender.setPassword(mailOptionProperties.getPassword());
Properties properties = new Properties();
//開啟認(rèn)證
properties.setProperty("mail.smtp.auth", mailOptionProperties.getAuth());
//設(shè)置鏈接超時
properties.setProperty("mail.smtp.timeout", mailOptionProperties.getTimeout());
//啟用調(diào)試
properties.setProperty("mail.debug", "true");
//設(shè)置端口
properties.setProperty("mail.smtp.port", mailOptionProperties.getPort());
//是否啟用ssl
if(mailOptionProperties.getSslEnabled()){
//設(shè)置ssl端口
properties.setProperty("mail.smtp.socketFactory.port", mailOptionProperties.getPort());
properties.setProperty("mail.smtp.socketFactory.fallback", "false");
properties.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
//設(shè)置ssl加密
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
properties.put("mail.smtp.ssl.enable", mailOptionProperties.getSslEnabled());
properties.put("mail.smtp.ssl.socketFactory", sf);
}
javaMailSender.setJavaMailProperties(properties);
return javaMailSender;
}
}3.工具類
import java.io.File;
import java.util.Date;
import java.util.List;
/**
* mail郵件消息封裝
* @author li
*/
@Data
public class MailMessage {
/**
* 收件人郵箱地址集合
*/
private List<String> recipient;
/**
* 抄送人
*/
private String [] cc;
/**
* 密送人
*/
private String [] bcc;
/**
* 發(fā)送時間
*/
private Date sendDate;
/**
* 郵件主題
*/
private String subject;
/**
* 郵件文本內(nèi)容
*/
private String text;
/**
* 是否html格式打開
*/
private boolean isHtml = true;
/**
* 附件集合
*/
private List<File> fileList;
}import java.io.InputStream;
/**
* 文件數(shù)據(jù)封裝
*/
@Data
public class FileData {
private InputStream inputStream;
private String fileName;
public FileData() {
}
public FileData(InputStream inputStream, String fileName) {
this.inputStream = inputStream;
this.fileName = fileName;
}
}/**
* 郵件發(fā)送工具類
*
* @author li
* @date 2024-05-14
*/
@Component
@EnableConfigurationProperties({MailOptionProperties.class})
public class JavaMailOperation {
static {
//防止附件名太長被截斷
System.getProperties().setProperty("mail.mime.splitlongparameters", "false");
}
@Autowired
private JavaMailSender javaMailSender;
/**
* 發(fā)件人郵箱地址
*/
@Autowired
private MailOptionProperties mailOptionProperties;
/**
* 郵件發(fā)送
*
* @param text 內(nèi)容
* @param subject 標(biāo)題
* @param emailAddress 收件人
*/
public MimeMessageHelper createMessageHelper(MimeMessage message, String subject, String text, String emailAddress) throws Exception {
MimeMessageHelper messageHelper = new MimeMessageHelper(message, true, "UTF-8");
// 發(fā)件人
messageHelper.setFrom(new InternetAddress(mailOptionProperties.getUsername(), mailOptionProperties.getPersonal(), "UTF-8"));
// 收件人郵箱
messageHelper.setTo(new InternetAddress(emailAddress));
// 郵件的主題
messageHelper.setSubject(subject);
// 郵件的文本內(nèi)容,true表示文本以html格式打開
messageHelper.setText(text, true);
return messageHelper;
}
/**
* 郵件發(fā)送
*
* @param text 內(nèi)容
* @param subject 標(biāo)題
* @param emailAddress 收件人
* @param cc 抄送
* @param bcc 密送
*/
public MimeMessageHelper createMessageHelper(MimeMessage message, String subject, String text,
String emailAddress, String cc, String bcc) throws Exception {
MimeMessageHelper messageHelper = new MimeMessageHelper(message, true, "UTF-8");
// 發(fā)件人
messageHelper.setFrom(new InternetAddress(mailOptionProperties.getUsername(), mailOptionProperties.getPersonal(), "UTF-8"));
// 收件人郵箱
messageHelper.setTo(new InternetAddress(emailAddress));
//抄送
messageHelper.setCc(cc);
//密送(不會在郵件收件人名單中顯示出來)
messageHelper.setBcc(bcc);
//發(fā)送時間
messageHelper.setSentDate(new Date());
// 郵件的主題
messageHelper.setSubject(subject);
// 郵件的文本內(nèi)容,true表示文本以html格式打開
messageHelper.setText(text, true);
return messageHelper;
}
public MimeMessageHelper createMessageHelper(MimeMessage message, String subject, String text, String[] emailAddress) throws Exception {
MimeMessageHelper messageHelper = new MimeMessageHelper(message, true, "UTF-8");
// 發(fā)件人
messageHelper.setFrom(new InternetAddress(mailOptionProperties.getUsername(), mailOptionProperties.getPersonal(), "UTF-8"));
// 收件人郵箱
messageHelper.setTo(emailAddress);
// 郵件的主題
messageHelper.setSubject(subject);
// 郵件的文本內(nèi)容,true表示文本以html格式打開
messageHelper.setText(text, true);
return messageHelper;
}
/**
* 郵件發(fā)送-單人
*
* @param text 內(nèi)容
* @param subject 標(biāo)題
* @param emailAddress 收件人
*/
public void sendMail(String subject, String text, String emailAddress) throws Exception {
// 創(chuàng)建郵件對象
MimeMessage message = javaMailSender.createMimeMessage();
createMessageHelper(message, subject, text, emailAddress);
// 發(fā)送郵件
javaMailSender.send(message);
}
/**
* 郵件發(fā)送-多收件人
*
* @param text 內(nèi)容
* @param subject 標(biāo)題
* @param emailAddress 收件人
*/
public void sendMail(String subject, String text, String[] emailAddress) throws Exception {
// 創(chuàng)建郵件對象
MimeMessage message = javaMailSender.createMimeMessage();
createMessageHelper(message, subject, text, emailAddress);
// 發(fā)送郵件
javaMailSender.send(message);
}
/**
* 郵件發(fā)送(帶附件)
*
* @param text 內(nèi)容
* @param subject 主題
* @param fileName 文件名
* @param inputStream 文件流
* @param emailAddress 收件人
*/
public void sendMail(String subject, String text, String fileName,
String emailAddress, InputStreamSource inputStream) throws Exception {
// 創(chuàng)建郵件對象
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper messageHelper = createMessageHelper(message, subject, text, emailAddress);
// 添加附件
messageHelper.addAttachment(fileName, inputStream);
// 發(fā)送郵件
javaMailSender.send(message);
}
/**
* 郵件發(fā)送(帶附件)
*
* @param text 內(nèi)容
* @param subject 標(biāo)題
* @param file 文件
* @param emailAddress 收件人
*/
public void sendMail(String subject, String text, String emailAddress, File file) throws Exception {
// 創(chuàng)建郵件對象
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper messageHelper = createMessageHelper(message, subject, text, emailAddress);
// 添加附件
messageHelper.addAttachment(file.getName(), file);
// 發(fā)送郵件
javaMailSender.send(message);
}
public void sendMail(String subject, String text, String emailAddress, List<File> files) throws Exception {
// 創(chuàng)建郵件對象
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper messageHelper = createMessageHelper(message, subject, text, emailAddress);
// 添加附件
for (File file : files) {
messageHelper.addAttachment(file.getName(), file);
}
// 發(fā)送郵件
javaMailSender.send(message);
}
/**
* 發(fā)送freemarker模板格式郵件
*
* @param text 內(nèi)容
* @param subject 標(biāo)題
* @param emailAddress 收件人
* @param files 附件
*/
public void sendFreemarkerMail(String subject, String text, String emailAddress, List<File> files) throws Exception {
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper messageHelper = createMessageHelper(message, subject, text, emailAddress);
// 構(gòu)建 Freemarker 的基本配置
Configuration configuration = new Configuration(Configuration.VERSION_2_3_0);
configuration.setClassLoaderForTemplateLoading(this.getClass().getClassLoader(), "templates");
Template template = configuration.getTemplate("mail.ftl");
// 模板渲染
StringWriter out = new StringWriter();
Map<String, Object> param = new HashMap<>();
param.put("message", "ces");
template.process(param, out);
messageHelper.setText(out.toString(), true);
// 添加附件
for (File file : files) {
messageHelper.addAttachment(file.getName(), file);
}
javaMailSender.send(message);
}
public void sendMail(MailMessage mailMessage) {
validateParam(mailMessage);
try {
logger.info("郵件發(fā)送開始。。。。。。。。。。。");
// 創(chuàng)建郵件對象
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(message, true, "UTF-8");
// 發(fā)件人
messageHelper.setFrom(new InternetAddress(mailOptionProperties.getUsername(), mailOptionProperties.getPersonal(), "UTF-8"));
//收件人集合
List<String> recipient = mailMessage.getRecipient();
if (CollectionUtils.isNotEmpty(recipient)) {
// 收件人郵箱
messageHelper.setTo(recipient.toArray(new String[0]));
}
//抄送
String[] cc = mailMessage.getCc();
if (cc != null && cc.length > 0) {
messageHelper.setCc(cc);
}
//密送(不會在郵件收件人名單中顯示出來)
String[] bcc = mailMessage.getBcc();
if (bcc != null && bcc.length > 0) {
messageHelper.setBcc(bcc);
}
if (ObjectUtils.isNotEmpty(mailMessage.getSendDate())) {
//發(fā)送時間
messageHelper.setSentDate(mailMessage.getSendDate());
}
//附件
List<File> fileList = mailMessage.getFileList();
if (CollectionUtils.isNotEmpty(fileList)) {
for (File file : fileList) {
messageHelper.addAttachment(file.getName(), file);
}
}
List<FileData> fileDataList = mailMessage.getFileDataList();
if (CollectionUtils.isNotEmpty(fileDataList)) {
for (FileData fileData : fileDataList) {
messageHelper.addAttachment(fileData.getFileName(), new InputStreamResource(fileData.getInputStream()));
}
}
// 郵件的主題
messageHelper.setSubject(mailMessage.getSubject());
// 郵件的文本內(nèi)容,true表示文本以html格式打開
messageHelper.setText(mailMessage.getText(), mailMessage.isHtml());
// 發(fā)送郵件
javaMailSender.send(message);
logger.info("郵件發(fā)送結(jié)束。。。。。。。。。。。");
} catch (Exception e) {
logger.error("郵件發(fā)送失敗。。。。。。。。。。。",e);
}
}
private void validateParam(MailMessage mailMessage) {
if (!StringUtils.hasText(mailMessage.getSubject())) {
throw new Exception("郵件標(biāo)題不能為空");
} else if (!StringUtils.hasText(mailMessage.getText())) {
throw new Exception("郵件內(nèi)容不能為空");
} else if (mailMessage.getRecipient().isEmpty()) {
throw new Exception("收件人不能為空");
}
}
}測試
public class Test {
protected Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
private JavaMailOperation javaMailOperate;
@Autowired
private RemoteFilesystemConfiguration configuration;
@GetMapping("/mail")
public void test() throws Exception {
logger.info("郵件發(fā)送開始。。。。。。。。。。。");
String subject = "發(fā)送測試";
String text = "郵件內(nèi)容。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。";
File file = new File("C:\\Users\\Desktop\\Stream流常用操作.md");
InputStreamSource is = new FileSystemResource(file);
javaMailOperate.sendMail(subject,text,file.getName(),"xxx@qq.com",is);
logger.info("郵件發(fā)送結(jié)束。。。。。。。。。。。");
}
@GetMapping("/free")
public void test1() throws Exception {
String subject = "發(fā)送測試";
String text = "郵件內(nèi)容。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。";
File file = new File("C:\\Users\\Desktop\\Stream流常用操作.md");
javaMailOperate.sendFreemarkerMail(subject,text,"xxx@qq.com", Collections.singletonList(file));
}
@GetMapping("/upload")
public void test2(MultipartFile multipartFile) throws Exception {
String subject = "發(fā)送測試";
String text = "郵件內(nèi)容。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。";
String originalFilename = multipartFile.getOriginalFilename();
InputStream is = multipartFile.getInputStream();
InputStreamSource iss = new InputStreamResource(is);
javaMailOperate.sendMail(subject,text,originalFilename,"xxx@qq.com",iss);
}
@GetMapping("/msg")
public void test3() throws Exception {
File file = new File("C:\\Users\\tjx\\Desktop\\Stream流常用操作.md");
MailMessage mailMessage = new MailMessage();
mailMessage.setRecipient(Collections.singletonList("xxx@qq.com"));
mailMessage.setCc(new String[]{"xxx@qq.com"});
mailMessage.setBcc(new String[]{"li5xxxx1@126.com"});
mailMessage.setSendDate(new Date());
mailMessage.setSubject("發(fā)送測試");
mailMessage.setText("內(nèi)容");
mailMessage.setHtml(true);
mailMessage.setFileList(Collections.singletonList(file));
javaMailOperate.sendMail(mailMessage);
}
//流文件測試
@GetMapping("/msg1")
public void test4(List<String> urlList) throws Exception {
MailMessage mailMessage = new MailMessage();
mailMessage.setRecipient(Collections.singletonList("xxx@qq.com"));
mailMessage.setCc(new String[]{"xxxx@qq.com"});
mailMessage.setBcc(new String[]{"xxx@126.com"});
mailMessage.setSendDate(new Date());
mailMessage.setSubject("發(fā)送測試");
mailMessage.setText("內(nèi)容");
FTPClient ftpClient =new FTPClient();
ByteArrayOutputStream out = null;
InputStream is = null;
try {
ftpClient.connect(configuration.getHost(),configuration.getPort());
ftpClient.login(configuration.getUsername(), configuration.getPassword());
ftpClient.setBufferSize(1024);
// 設(shè)置文件類型(二進(jìn)制)
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
out = new ByteArrayOutputStream();
for (String url : urlList) {
if(is!=null){
is.reset();
}
ftpClient.retrieveFile(url, out);
is = new ByteArrayInputStream(out.toByteArray());
List<FileData> fileDataList = Lists.newArrayList();
fileDataList.add(new FileData(is,"測試1.txt"));
}
javaMailOperate.sendMail(mailMessage);
} catch (Exception e) {
logger.error("郵件發(fā)送失敗。。。。。。。。。。。",e);
}finally {
ftpClient.logout();
ftpClient.disconnect();
if (out != null) {
out.close();
}
if (is != null) {
is.close();
}
}
}
}2.方式二:java直接發(fā)送
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>import com.sun.mail.util.MailSSLSocketFactory;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.io.File;
import java.security.GeneralSecurityException;
import java.util.Arrays;
import java.util.List;
import java.util.Properties;
public class MailUtils {
public static void sendMail(String email, String emailMsg, List<File> files)
throws GeneralSecurityException {
// 發(fā)件人電子郵箱
String fromAddress = "xxx@qq.com";
// 指定發(fā)送郵件的主機(jī)為 smtp.qq.com QQ 郵件服務(wù)器
String host = "smtp.qq.com";
// 獲取系統(tǒng)屬性
Properties properties = System.getProperties();
//開啟認(rèn)證
properties.setProperty("mail.smtp.auth", "true");
//啟用調(diào)試
properties.setProperty("mail.debug", "true");
//設(shè)置鏈接超時
properties.setProperty("mail.smtp.timeout", "1000");
//設(shè)置端口
properties.setProperty("mail.smtp.port", "465");
//設(shè)置ssl端口
properties.setProperty("mail.smtp.socketFactory.port", "465");
properties.setProperty("mail.smtp.socketFactory.fallback", "false");
properties.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
// 設(shè)置郵件服務(wù)器
properties.setProperty("mail.smtp.host", host);
properties.put("mail.smtp.auth", "true");
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
properties.put("mail.smtp.ssl.enable", "true");
properties.put("mail.smtp.ssl.socketFactory", sf);
// 獲取默認(rèn)session對象
Session session = Session.getDefaultInstance(properties, new Authenticator() {
@Override
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("xxxx@qq.com", "xxx"); //發(fā)件人郵件用戶名、密碼
}
});
try {
// 創(chuàng)建默認(rèn)的 MimeMessage 對象
MimeMessage message = new MimeMessage(session);
// Set From: 發(fā)件人
message.setFrom(new InternetAddress(fromAddress,"li","UTF-8"));
// Set To: 收件人
message.addRecipient(Message.RecipientType.TO, new InternetAddress(email));
//設(shè)置郵件主題
message.setSubject("測試","UTF-8");
message.setText("這是一封激活郵件,請<a href='#'>點(diǎn)擊</a>","UTF-8");
// 設(shè)置消息體
String content = "<h1>郵件發(fā)送測試</h1><h3><div style=\"color: red\">" + emailMsg + "</div></h3>";
Multipart multipart = new MimeMultipart();
//郵件正文
BodyPart contentPart = new MimeBodyPart();
//郵件文字
contentPart.setContent(content, "text/html;charset=utf-8");
multipart.addBodyPart(contentPart);
if (files!=null&&!files.isEmpty()) {
//添加附件
for (File attachment : files) {
BodyPart attachmentPart = new MimeBodyPart();
DataSource source = new FileDataSource(attachment);
attachmentPart.setDataHandler(new DataHandler(source));
//避免中文亂碼的處理
attachmentPart.setFileName(MimeUtility.encodeWord(attachment.getName()));
multipart.addBodyPart(attachmentPart);
}
}
message.setContent(multipart);
message.saveChanges();
// 發(fā)送消息
Transport.send(message);
System.out.println("Sent message successfully....");
} catch (Exception mex) {
mex.printStackTrace();
}
}
public static void main(String[] args) throws AddressException, MessagingException, GeneralSecurityException {
MailUtils.sendMail("xxx@qq.com", "abcdefg", Arrays.asList(new File("C:\\Users\\Desktop\\Stream流常用操作.md")));
}
}附件名稱太長被截斷問題,啟動類添加
System.getProperties().setProperty("mail.mime.splitlongparameters", "false");到此這篇關(guān)于SpringBoot整合JavaMail郵件的文章就介紹到這了,更多相關(guān)SpringBoot整合JavaMail郵件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ibatis學(xué)習(xí)之搭建Java項(xiàng)目
本文的主要內(nèi)容是簡單介紹了ibatis和如何通過iBatis搭建JAVA項(xiàng)目,包含了一個相關(guān)實(shí)例,需要的朋友可以參考下。2017-09-09
Mybatis查詢數(shù)據(jù)的項(xiàng)目實(shí)現(xiàn)
MyBatis通過XML配置文件或注解,把Java對象映射到對應(yīng)的數(shù)據(jù)庫表中,實(shí)現(xiàn)對象關(guān)系和數(shù)據(jù)關(guān)系的互相轉(zhuǎn)換,從而使得Java應(yīng)用程序能夠更簡單的操作和讀取數(shù)據(jù)庫,本文就詳細(xì)的介紹一下如何實(shí)現(xiàn),感興趣的可以了解一下2023-09-09
使用Java實(shí)現(xiàn)簡單的區(qū)塊鏈程序的方法
這篇文章主要介紹了使用Java實(shí)現(xiàn)簡單的區(qū)塊鏈程序的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04
Spring Cloud Stream整合RocketMQ的搭建方法
本文介紹了如何使用SpringCloudStream整合RocketMQ進(jìn)行消息傳遞,SpringCloudStream是一個用于構(gòu)建與共享消息系統(tǒng)連接的框架,支持持久pub/sub語義和消費(fèi)者組,感興趣的朋友跟隨小編一起看看吧2024-11-11

