SpringBoot中快速實現(xiàn)郵箱發(fā)送代碼解析
前言
在許多企業(yè)級項目中,需要用到郵件發(fā)送的功能,如:
- 注冊用戶時需要郵箱發(fā)送驗證
- 用戶生日時發(fā)送郵件通知祝賀
- 發(fā)送郵件給用戶等
創(chuàng)建工程導入依賴
<!-- 郵箱發(fā)送依賴 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!-- 小火龍代碼簡化 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
</dependency>
本工程依賴于SpringBoot,是基于SpringBoot再次對郵箱發(fā)送進行了一次封裝。
創(chuàng)建Application.properties
# JavaMailSender 郵件發(fā)送的配置 spring.mail.host=smtp.qq.com spring.mail.username=lovelyWu98k@qq.com #授權碼 spring.mail.password= spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.starttls.enable=true spring.mail.properties.mail.smtp.starttls.required=true spring.mail.default-encoding=UTF-8
封裝郵箱發(fā)送工具類
創(chuàng)建郵箱信息實體類,如下:
/**
* 郵件信息實體
*
* @author:伍梓濤
* @version:1.0.0
* @Modified By:SimpleWu
* @CopyRright (c)2019-:YUM架構平臺
*/
@Data
public class MailEntity {
private String to; //收件人
private String subject;//標題
private String text;//正文
private boolean isHtml = false;//是否html郵件
private List<String> files;//附件地址
private Date sentDate;//發(fā)送時間
}
創(chuàng)建郵箱信息實體類工具,快捷創(chuàng)建郵件信息
/**
* 郵箱發(fā)送信息統(tǒng)一處理封裝
*
* @author:伍梓濤
* @version:1.0.0
* @Modified By:SimpleWu
* @CopyRright (c)2019-:YUM架構平臺
*/
@Slf4j
public class MailEntityHelper {
public static MimeMessageHelper craeteMessageHelper(MimeMessage mimeMessage, MailEntity mailBean) throws MessagingException {
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
// mimeMessageHelper.setFrom(emailSender);//發(fā)件人
mimeMessageHelper.setTo(mailBean.getTo());//收件人
mimeMessageHelper.setSubject(mailBean.getSubject());//標題
mimeMessageHelper.setText(mailBean.getText(), mailBean.isHtml());//是否html
mimeMessageHelper.setSentDate(mailBean.getSentDate() == null ? new Date() : mailBean.getSentDate());// 客戶端郵箱發(fā)送時間
if (mailBean.getFiles() != null && mailBean.getFiles().size() > 0) {
//附件添加
mailBean.getFiles().forEach(filename -> {
String ext = filename.substring(filename.lastIndexOf(".") + 1, filename.length());
File diskfile = new File(filename);
try {
mimeMessageHelper.addAttachment(diskfile.getName(), diskfile);
} catch (MessagingException e) {
e.printStackTrace();
log.error("設置附件失敗:{}", mailBean);
}
});
}
return mimeMessageHelper;
}
}
創(chuàng)建郵箱發(fā)送工具類,進行郵箱發(fā)送:
/**
* 郵箱發(fā)送工具類
*
* @author:伍梓濤
* @version:1.0.0
* @Modified By:SimpleWu
* @CopyRright (c)2019-:YUM架構平臺
*/
@Component
@Slf4j
public class MailHelper {
@Autowired
private JavaMailSender javaMailSender;
@Value("${spring.mail.username}")
private String emailSender;
private static MailHelper mailHelper;
public MailHelper() {
mailHelper = this;
}
/**
* 構建靜態(tài)獲取實例
*
* @return
*/
public static MailHelper buidler() {
if (mailHelper == null) {
return null;
}
return mailHelper;
}
/*public void sendSimpleMail(EmailContextPojo mailBean) {
try {
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
//郵件發(fā)送人
simpleMailMessage.setFrom(emailSender);
//郵件接收人
simpleMailMessage.setTo(mailBean.getTo());
//郵件主題
simpleMailMessage.setSubject(mailBean.getSubject());
//郵件內(nèi)容
simpleMailMessage.setText(mailBean.getText());
javaMailSender.send(simpleMailMessage);
} catch (Exception e) {
e.printStackTrace();
log.error("郵件發(fā)送失敗", e.getMessage());
}
}*/
public void sendMail(MailEntity mailBean) {
MimeMessage mimeMailMessage = null;
try {
mimeMailMessage = javaMailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = MailEntityHelper.craeteMessageHelper(mimeMailMessage, mailBean);
mimeMessageHelper.setFrom(emailSender);//發(fā)件人
javaMailSender.send(mimeMailMessage);
} catch (Exception e) {
log.error("郵件發(fā)送失敗", e.getMessage());
}
}
public void sendMail(MailEntity... mailBeans) {
//批量發(fā)送集合
List<MimeMessage> mimeMessages = new ArrayList<>(mailBeans.length);
try {
if (mailBeans != null || mailBeans.length > 0) {
for (int i = 0; i < mailBeans.length; i++) {
MimeMessage mimeMailMessage = javaMailSender.createMimeMessage();
MimeMessageHelper messageHelper = MailEntityHelper.craeteMessageHelper(mimeMailMessage, mailBeans[i]);
messageHelper.setFrom(emailSender);//發(fā)件人
mimeMessages.add(mimeMailMessage);
}
}
MimeMessage[] resultMessage = new MimeMessage[mimeMessages.size()];
mimeMessages.toArray(resultMessage);
javaMailSender.send((resultMessage));
} catch (Exception e) {
log.error("郵件發(fā)送失敗", e.getMessage());
}
}
}
在之前通過郵箱發(fā)送信息統(tǒng)一處理的工具類,對郵件信息實體進行封裝后,這里就只需要傳入對象參數(shù)即可。由于在這里使用的是SpringBoot已經(jīng)封裝好的,由于我們要把它當成工具類使用,每次需要注入并不方便。
所在在類中加了個靜態(tài)對象,在Spring 容器實例化的時候給他初始化直接賦值給javaMailSender并且通過buidler()可以靜態(tài)獲取到實例對象,但是這樣如果被重新創(chuàng)建對象后就會產(chǎn)生問題,所以最好在工具類中使用Spring 容器去獲取 javaMailSender即可 。
發(fā)送郵件
1.發(fā)送普通郵件
MailEntity emailContextPojo = new MailEntity();
emailContextPojo.setSubject("Ycloud 郵箱標題");
emailContextPojo.setText("Ycloud 郵箱正文");
emailContextPojo.setTo(" 接收郵箱號 ");
MailHelper.buidler().sendMail(emailContextPojo);
2.發(fā)送Html郵件
emailContextPojo.setHtml(true);
只需要將信息實體類設置成true即可。
3.發(fā)送附件
emailContextPojo.setFiles(Arrays.asList("D:\\Yum系統(tǒng)架構平臺\\004.高系統(tǒng)部署\\004.PXC\\部署手冊.docx"));
只需要增加附件路徑即可。
注: 請勿直接在項目中使用郵箱發(fā)送
本文代碼案例: https://github.com/450255266/open-doubi/tree/master/SpringBoot/email
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Spring?代理?Bean?獲取不到原始?Bean?對象注解解決方法
這篇文章主要介紹了Spring?代理?Bean?獲取不到原始?Bean?對象注解解決方法,文章圍繞主題相關資料展開詳細介紹,需要的小伙伴可以參考一下2022-04-04
mybatis解決<foreach>標簽不能超過1000的問題
MyBatis是一個開源的持久層框架,它可以幫助開發(fā)者簡化數(shù)據(jù)庫操作的編寫,而foreach是MyBatis中的一個重要標簽,用于在SQL語句中進行循環(huán)操作,本文主要給大家介紹了mybatis解決<foreach>標簽不能超過1000的問題,需要的朋友可以參考下2024-05-05
Java 實戰(zhàn)項目之疫情防控管理系統(tǒng)詳解
讀萬卷書不如行萬里路,只學書上的理論是遠遠不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Java實現(xiàn)一個疫情防控管理系統(tǒng),大家可以在過程中查缺補漏,提升水平2021-11-11
解決java.util.HashMap$Values?cannot?be?cast?to?java.ut的問題
這篇文章主要介紹了解決java.util.HashMap$Values?cannot?be?cast?to?java.ut的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03
RabbitMQ實現(xiàn)延時消息的兩種方法實戰(zhàn)教程
這篇文章主要介紹了RabbitMQ實現(xiàn)延時消息的兩種方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-09-09
Spring Boot2.0實現(xiàn)靜態(tài)資源版本控制詳解
這篇文章主要給大家介紹了關于Spring Boot2.0實現(xiàn)靜態(tài)資源版本控制的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2018-11-11
關于mybatis3中@SelectProvider的使用問題
這篇文章主要介紹了mybatis3中@SelectProvider的使用技巧,@SelectProvide指定一個Class及其方法,并且通過調(diào)用Class上的這個方法來獲得sql語句,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下2021-12-12

