SpringBoot整合JavaMail實(shí)現(xiàn)發(fā)郵件的項(xiàng)目實(shí)踐
0、相關(guān)協(xié)議
- SMTP(Simple Mail Transfer Protocol):簡單郵件傳輸協(xié)議,用于發(fā)送電子郵件的傳輸協(xié)議
- POP3(Post Office Protocol - Version 3):用于接收電子郵件的標(biāo)準(zhǔn)協(xié)議
- IMAP(Internet Mail Access Protocol):互聯(lián)網(wǎng)消息協(xié)議,是POP3的替代協(xié)議
1、SpringBoot整合JavaMail
STEP1:
加入JavaMail起步依賴:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
STEP2:
相關(guān)配置:
spring: mail: host: smtp.qq.com # 發(fā)郵件,smtp協(xié)議,后面.運(yùn)營商 username: *********@qq.com password: ********* # 不是郵箱的密碼,是下面獲取的一個(gè)授權(quán)碼
注意password,不是郵箱的登錄密碼,是一個(gè)授權(quán)碼,獲取方式,在QQ郵箱中是【設(shè)置】-【郵箱賬號】-【開啟】
發(fā)送驗(yàn)證短信:
然后在上個(gè)頁面點(diǎn)保存更改,(記得點(diǎn)保存更改)復(fù)制這個(gè)授權(quán)碼就是password的值,即可配置郵件客戶端成功。
其他類型的郵箱獲取方式類似,比如163:
STEP3:
注入JavaMailSender對象,定義發(fā)送郵件的接口
@Autowired private JavaMailSender javaMailSender;
整合完成,下面按簡單郵件和復(fù)雜郵件來寫。簡單即普通文本,復(fù)雜即超鏈接、附件等。
2、發(fā)送簡單郵件
以下用QQ郵箱給163郵箱發(fā)一個(gè)簡單文本的郵件:
//定義接口 public interface SendMailService{ void sendMail(); }
//實(shí)現(xiàn)類 @Service public class SendMailServiceImpl implements SendMailService { @Autowired private JavaMailSender javaMailSender; //這些值也可以不硬編碼,寫在配置文件中@Value取值 private String from = "********@qq.com"; // 發(fā)送人 private String to = "********@126.com"; // 接收人 private String subject = "測試郵件"; // 郵件主題 private String text = "測試郵件正文"; // 郵件內(nèi)容 @Override public void sendMail() { SimpleMailMessage mailMessage = new SimpleMailMessage(); //mailMessage.setFrom(from); //from后面加個(gè)名字,比如xxx公司,不然發(fā)送發(fā)一串郵箱數(shù)字,誰知道你是誰 mailMessage.setFrom(from + "別名"); //這里的to是個(gè)可變長String,即可發(fā)送多人 mailMessage.setTo(to); mailMessage.setSubject(subject); mailMessage.setText(text); //mailMessage.setSendDate(); //設(shè)置發(fā)送的時(shí)間 //其他設(shè)置自行set javaMailSender.send(mailMessage); //發(fā)送 } }
寫個(gè)測試類看下效果:
聯(lián)不通:
我在公司內(nèi)網(wǎng)寫的,網(wǎng)絡(luò)不通,不是25端口被禁的原因,在外網(wǎng)是可以ping通smtp.qq.com這個(gè)host的。先跳過了。
3、發(fā)送復(fù)雜郵件
正文為html,比如超鏈接或者圖片。以及發(fā)送附件:
//超鏈接 private String text = "<a ; //圖片 private String img = "<img src='https://pic35.photophoto.cn/20150511/0034034892281415_b.jpg' />"; @Override public void sendMail() { try { MimeMessage mimeMessage = javaMailSender.createMimeMessage(); //第二個(gè)參數(shù),即是否允許添加多部件 //我后面要添加各種附件,所以這里必須是true MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage,true); mimeMessageHelper.setFrom(from); mimeMessageHelper.setTo(to); mimeMessageHelper.setSubject(subject); //不加true,默認(rèn)當(dāng)普通文本,true即按html來解析 mimeMessageHelper.setText(text,true); //添加附件 File file1 = new File("logo.png"); File file2 = new File("D:\\myboot.jar"); //如果是手寫文件名,記得添加個(gè)后綴,比如.png,方便在郵件里可預(yù)覽 mimeMessageHelper.addAttachment(file1.getName(),file1); mimeMessageHelper.addAttachment("一個(gè)jar包.jar",file2); javaMailSender.send(mimeMessage); } catch (Exception e) { e.printStackTrace(); } }
注意點(diǎn):
- 不再用簡單消息對象,而是MimeMessage對象,并把它包裝成mimeMessageHelper對象
- 要傳附件的話,mimeMessageHelper對象構(gòu)造方法的第二個(gè)參數(shù)傳true
- setText方法重載,第二個(gè)參數(shù)傳true,就是講text按照html來解析,而不是普通文本
- 注意最后send的還是MimeMessage對象,不是mimeMessageHelper對象
到此這篇關(guān)于SpringBoot整合JavaMail實(shí)現(xiàn)發(fā)郵件的項(xiàng)目實(shí)踐的文章就介紹到這了,更多相關(guān)SpringBoot JavaMail發(fā)郵件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用@Service注解出現(xiàn)No bean named 'xxxx'&
這篇文章主要介紹了使用@Service注解出現(xiàn)No bean named 'xxxx' available]錯(cuò)誤的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08關(guān)于ApplicationContext的啟動(dòng)流程詳解
ApplicationContext是Spring框架中用于管理和配置Bean的核心接口,它的啟動(dòng)流程包括準(zhǔn)備刷新、獲取BeanFactory、準(zhǔn)備BeanFactory、后置處理BeanFactory、調(diào)用BeanFactoryPostProcessor、注冊BeanPostProcessor2025-03-03Java SpringMVC攔截器與異常處理機(jī)制詳解分析
SpringMVC是一種基于Java,實(shí)現(xiàn)了Web MVC設(shè)計(jì)模式,請求驅(qū)動(dòng)類型的輕量級Web框架,即使用了MVC架構(gòu)模式的思想,將Web層進(jìn)行職責(zé)解耦?;谡埱篁?qū)動(dòng)指的就是使用請求-響應(yīng)模型,框架的目的就是幫助我們簡化開發(fā),SpringMVC也是要簡化我們?nèi)粘eb開發(fā)2021-10-10java遞歸實(shí)現(xiàn)樹形結(jié)構(gòu)數(shù)據(jù)完整案例
遞歸算法的代碼比較簡潔,可讀性較好;但是在實(shí)際的業(yè)務(wù)處理中會出現(xiàn)多次的重復(fù)調(diào)用,如果處理不好,很容易出現(xiàn)StackOverflowError報(bào)錯(cuò),這篇文章主要給大家介紹了關(guān)于java遞歸實(shí)現(xiàn)樹形結(jié)構(gòu)數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下2023-04-04