一文詳解如何使用Java來發(fā)送qq郵箱郵件
1、準(zhǔn)備工作
(1)打開qq郵箱服務(wù)授權(quán)
首先進(jìn)入到qq郵箱主頁(yè),點(diǎn)擊左上方的設(shè)置按鈕
進(jìn)入設(shè)置頁(yè)面后,再點(diǎn)擊賬號(hào)
往下滑,然后可以看到 “POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務(wù)”
然后點(diǎn)擊開啟服務(wù)(因?yàn)槲疫@里是已經(jīng)開啟了,默認(rèn)情況是沒有開啟的)
點(diǎn)擊開啟后會(huì)跳轉(zhuǎn)到另一個(gè)頁(yè)面,同樣找到“POP3/IMAP/SMTP/Exchange/CardDAV 服務(wù)”,然后點(diǎn)擊生成授權(quán)碼
即可生成一段字符串,
?。?!將該字符串復(fù)制保存下來,不然的話,下次就只能再重新生成授權(quán)碼了
2、接口調(diào)用
(1)引入依賴
再pom.xml文件中引入下方依賴
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-email</artifactId> <version>1.5</version> </dependency>
(2)驗(yàn)證碼生成函數(shù)
這一步大家有其他方法也都可以,這里只是生成驗(yàn)證碼字符串
public String achieveCode() { //由于數(shù)字 1 、 0 和字母 O 、l 有時(shí)分不清楚,所以,沒有數(shù)字 1 、 0 String[] beforeShuffle= new String[] { "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" }; List list = Arrays.asList(beforeShuffle);//將數(shù)組轉(zhuǎn)換為集合 Collections.shuffle(list); //打亂集合順序 StringBuilder sb = new StringBuilder(); for (int i = 0; i < list.size(); i++) { sb.append(list.get(i)); //將集合轉(zhuǎn)化為字符串 } return sb.toString().substring(3, 9); //截取字符串第4到8 }
3、接口代碼編寫
@Autowired private RedisService redisService; @GetMapping("/getotp/{email}") public AjaxResult getOtp(@PathVariable String email, HttpSession session) throws EmailException { String otpCode = this.achieveCode(); // session.setAttribute(email, otpCode); redisService.setCacheObject("otpCode:" + email, otpCode, 2L, TimeUnit.MINUTES); HtmlEmail emails=new HtmlEmail(); emails.setHostName("smtp.qq.com"); emails.setCharset("utf-8"); emails.setSmtpPort(465); emails.setSSLOnConnect(true); emails.addTo(email);//設(shè)置收件人 emails.setFrom("11111@qq.com","lalala"); emails.setAuthentication("11111@qq.com","gwbtpcktyxnubefc"); emails.setSubject("驗(yàn)證碼來略,快快查收");//設(shè)置發(fā)送主題 emails.setMsg(optCode);//設(shè)置發(fā)送內(nèi)容 emails.send();//進(jìn)行發(fā)送 return success(otpCode); }
(如果大家項(xiàng)目沒有引入Redis,也可以用session代替,因?yàn)槲疫@里是一整個(gè)業(yè)務(wù)流程,后續(xù)還需要對(duì)比驗(yàn)證碼,所以需要用到換成,大家測(cè)試的話也可以去掉)
再這一段語(yǔ)句里 emails.setAuthentication(“11111@qq.com”,“gwbtpcktyxnubefc”);
其中郵箱即為剛才生成授權(quán)碼的郵箱,后面一段字符串就是授權(quán)碼。
在編寫完上述代碼后,即可通過調(diào)用此按鈕來發(fā)送郵件。
4、HTML型郵件
通過上述代碼,只能發(fā)送一個(gè)簡(jiǎn)單的字符,但是qq郵箱也是支持html解析的,我們可以在其中設(shè)置html代碼,讓我們的郵件“精致”一點(diǎn),只需要更改emails.setMsg()中的參數(shù)即可
emails.setMsg("<!DOCTYPE html>\n" + "<html lang=\"en\">\n" + "<head>\n" + " <meta charset=\"UTF-8\">\n" + " <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n" + " <title>Email Template</title>\n" + "</head>\n" + "<body style=\"font-family: Arial, sans-serif; background-color: #f4f4f4; padding: 20px;\">\n" + "\n" + " <div style=\"max-width: 600px; margin: 0 auto; background-color: #ffffff; padding: 20px; border-radius: 10px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);\">\n" + "\n" + " <h1 style=\"color: #333333; text-align: center;\">我來組成頭部</h1>\n" + "\n" + " <p style=\"color: #555555; text-align: center;\">我來組成標(biāo)題</p>\n" + "\n" + " <p style=\"color: #555555; text-align: center;\">驗(yàn)證碼是" + otpCode + "</p>\n" + "\n" + " <p style=\"color: #555555;\">lalalalala^(* ̄(oo) ̄)^,</p>\n" + "\n" + " <p style=\"color: #555555;\">lalalalala</p>\n" + "\n" + " <p style=\"color: #555555;\">哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈</p>\n" + "\n" + " <p style=\"color: #555555;\">哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈</p>\n" + "\n" + " <p style=\"color: #555555;\">哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈</p>\n" + "\n" + " <p style=\"color: #888888; text-align: center; font-size: 12px; margin-top: 20px;\">? 2024 Example Company. All rights reserved.</p>\n" + "\n" + " </div>\n" + "\n" + "</body>\n" + "</html>\n");//設(shè)置發(fā)送內(nèi)容
總結(jié)
到此這篇關(guān)于使用Java來發(fā)送qq郵箱郵件的文章就介紹到這了,更多相關(guān)Java發(fā)送qq郵箱郵件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Springboot maven plugin插件原理及作用
這篇文章主要介紹了Springboot maven plugin插件原理及作用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10java多線程CyclicBarrier的使用案例,讓線程起步走
這篇文章主要介紹了java多線程CyclicBarrier的使用案例,讓線程起步走!具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-02-02Java聊天室之使用Socket實(shí)現(xiàn)通信功能
這篇文章主要為大家詳細(xì)介紹了Java簡(jiǎn)易聊天室之使用Socket實(shí)現(xiàn)通信功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以了解一下2022-10-10Spring ApplicationContext接口功能詳細(xì)介紹
ApplicationContext是Spring應(yīng)用程序中的中央接口,由于繼承了多個(gè)組件,使得ApplicationContext擁有了許多Spring的核心功能,如獲取bean組件,注冊(cè)監(jiān)聽事件,加載資源文件等2023-02-02詳解Java實(shí)現(xiàn)多種方式的http數(shù)據(jù)抓取
本篇文章主要介紹了Java實(shí)現(xiàn)多種方式的http數(shù)據(jù)抓取,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧。2016-12-12Java數(shù)據(jù)庫(kù)連接池之DBCP淺析_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了Java數(shù)據(jù)庫(kù)連接池之DBCP的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08使用@Value為靜態(tài)變量導(dǎo)入并使用導(dǎo)入的靜態(tài)變量進(jìn)行初始化方式
這篇文章主要介紹了使用@Value為靜態(tài)變量導(dǎo)入并使用導(dǎo)入的靜態(tài)變量進(jìn)行初始化方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02