中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot中怎么發送QQ郵件

發布時間:2021-12-07 14:15:47 來源:億速云 閱讀:143 作者:iii 欄目:大數據

這篇文章主要講解了“SpringBoot中怎么發送QQ郵件”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“SpringBoot中怎么發送QQ郵件”吧!

郵件協議

我們經常會聽到各種各樣的郵件協議,比如SMTP、POP3、IMAP,那么這些協議有什么作用,有什么區別?我們先來討論一下這個問題。

SMTP是一個基于TCP/IP的應用層協議,江湖地位有點類似于HTTP,SMTP服務器默認監聽的端口號為25。看到這里,小伙伴們可能會想到既然SMTP協議是基于TCP/IP的應用層協議,那么我是不是也可以通過Socket發送一封郵件呢?回答是肯定的。

生活中我們投遞一封郵件要經過如下幾個步驟:

1.深圳的小王先將郵件投遞到深圳的郵局
2.深圳的郵局將郵件運送到上海的郵局
3.上海的小張來郵局取郵件

這是一個縮減版的生活中郵件發送過程。這三個步驟可以分別對應我們的郵件發送過程,假設從aaa@qq.com發送郵件到111@163.com:

1.aaa@qq.com先將郵件投遞到騰訊的郵件服務器
2.騰訊的郵件服務器將我們的郵件投遞到網易的郵件服務器
3.111@163.com登錄網易的郵件服務器查看郵件

郵件投遞大致就是這個過程,這個過程就涉及到了多個協議,我們來分別看一下。

SMTP協議全稱為Simple Mail Transfer Protocol,譯作簡單郵件傳輸協議,它定義了郵件客戶端軟件于SMTP服務器之間,以及SMTP服務器與SMTP服務器之間的通信規則。也就是說aaa@qq.com用戶先將郵件投遞到騰訊的SMTP服務器這個過程就使用了SMTP協議,然后騰訊的SMTP服務器將郵件投遞到網易的SMTP服務器這個過程也依然使用了SMTP協議,SMTP服務器就是用來收郵件。而POP3協議全稱為Post Office Protocol,譯作郵局協議,它定義了郵件客戶端與POP3服務器之間的通信規則,那么該協議在什么場景下會用到呢?當郵件到達網易的SMTP服務器之后,111@163.com用戶需要登錄服務器查看郵件,這個時候就該協議就用上了:郵件服務商都會為每一個用戶提供專門的郵件存儲空間,SMTP服務器收到郵件之后,就將郵件保存到相應用戶的郵件存儲空間中,如果用戶要讀取郵件,就需要通過郵件服務商的POP3郵件服務器來完成。最后,可能也有小伙伴們聽說過IMAP協議,這個協議是對POP3協議的擴展,功能更強,作用類似,這里不再贅述。

發送QQ郵件準備工作

首先我們需要先登錄QQ郵箱網頁版,點擊上方的設置按鈕:

SpringBoot中怎么發送QQ郵件

然后點擊賬戶選項卡:

SpringBoot中怎么發送QQ郵件

在賬戶選項卡中找到開啟POP3/SMTP選項,如下:

SpringBoot中怎么發送QQ郵件

點擊開啟,開啟相關功能,開啟過程需要手機號碼驗證,按照步驟操作即可,不贅述。開啟成功之后,即可獲取一個授權碼,將該號碼保存好,一會使用。

然后我們需要JavaxMail這個jar包。

發送

簡單郵件

如果我們只發送一個簡單的文本,發送方式就比較簡單,整個過程可以分為三步如下:

第一步:構造SMTP郵件服務器的基本環境

Properties properties = new Properties();
properties.setProperty("mail.host", "smtp.qq.com");
properties.setProperty("mail.transport.protocol", "smtp");
properties.setProperty("mail.smtp.auth", "true");
properties.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
properties.setProperty("mail.smtp.port", "465");
Session session = Session.getDefaultInstance(properties);
session.setDebug(true);

第二步:構造郵件

MimeMessage mimeMessage = new MimeMessage(session);
mimeMessage.addRecipients(Message.RecipientType.TO, "111@qq.com");//設置收信人
mimeMessage.addRecipients(Message.RecipientType.CC, "222@qq.com");//抄送
mimeMessage.setFrom("1510161612@qq.com");//郵件發送人
mimeMessage.setSubject("測試郵件主題");//郵件主題
mimeMessage.setContent("Hello,這是一封測試郵件", "text/html;charset=utf-8");//正文

第三步:發送郵件

Transport transport = session.getTransport();
transport.connect("smtp.qq.com", "333@qq.com", "剛剛申請到的授權碼");
transport.sendMessage(mimeMessage, mimeMessage.getAllRecipients());//發送郵件,第二個參數為收件人
transport.close();

復雜郵件

發送復雜郵件,第一步和第三步也是一樣的,只有第二步構造郵件的過程比較麻煩,那么接下來給小伙伴們演示一個發送一封圖文+兩個附件的郵件。要發送復雜郵件,得先熟悉三個概念,如下:

1.MimeMessage:該類是個能理解MIME類型和頭的電子郵件消息
2.MimeMultipart:該類定義了增加、刪除以及獲取郵件不同部分內容的方法
3.MimeBodyPart:該對象代表一個MimeMessage對象內容的一部分。每個MimeBodyPart被認為有兩部分:MIME類型和匹配這個類型的內容

完整的郵件生成過程如下(第一步和第三步參考上文):

MimeMessage mimeMessage = new MimeMessage(session);
mimeMessage.addRecipients(Message.RecipientType.TO, "111@qq.com");//設置收信人
mimeMessage.addRecipients(Message.RecipientType.CC, "222@qq.com");//抄送
mimeMessage.setFrom("333@qq.com");//郵件發送人
mimeMessage.setSubject("測試郵件主題");//郵件主題

MimeMultipart mixed = new MimeMultipart("mixed");
mimeMessage.setContent(mixed);//設置整封郵件的MIME消息體為混合的組合關系

MimeBodyPart attach2 = new MimeBodyPart();//創建附件1
MimeBodyPart attach3 = new MimeBodyPart();//創建附件2
MimeBodyPart content = new MimeBodyPart();//創建郵件正文

mixed.addBodyPart(attach2);//將附件一添加到MIME消息體中
mixed.addBodyPart(attach3);//將附件二添加到MIME消息體中
mixed.addBodyPart(content);//將正文添加到消息體中

FileDataSource fds1 = new FileDataSource(new File("C:\\Users\\sang\\Desktop\\1.png"));//構造附件一的數據源
DataHandler dh2 = new DataHandler(fds1);//數據處理
attach2.setDataHandler(dh2);//設置附件一的數據源
attach2.setFileName("1.png");//設置附件一的文件名

//附件二的操作與附件一類似,這里就不一一注釋了
FileDataSource fds2 = new FileDataSource(new File("C:\\Users\\sang\\Desktop\\博客筆記.xlsx"));
DataHandler dh3 = new DataHandler(fds2);
attach3.setDataHandler(dh3);
attach3.setFileName(MimeUtility.encodeText("博客筆記.xlsx"));//設置文件名時,如果有中文,可以通過MimeUtility類中的encodeText方法進行編碼,避免亂碼

MimeMultipart bodyMimeMultipart = new MimeMultipart("related");//設置正文的MIME類型
content.setContent(bodyMimeMultipart);//將bodyMimeMultipart添加到正文消息體中

MimeBodyPart bodyPart = new MimeBodyPart();//正文的HTML部分
bodyPart.setContent("<h2>Hello大家好,這是一封測試郵件<img src='cid:2.png'/></h2>","text/html;charset=utf-8");

MimeBodyPart picPart = new MimeBodyPart();//正文的圖片部分
DataHandler dataHandler = new DataHandler(new FileDataSource("C:\\Users\\sang\\Desktop\\2.png"));
picPart.setDataHandler(dataHandler);
picPart.setContentID("2.png");

//將正文的HTML和圖片部分分別添加到bodyMimeMultipart中
bodyMimeMultipart.addBodyPart(bodyPart);
bodyMimeMultipart.addBodyPart(picPart);

mimeMessage.saveChanges();

OK,Java Mail發送QQ郵件就是這么簡單,至于其他的如163,sina等,寫法類似,這里我就不贅述了。

感謝各位的閱讀,以上就是“SpringBoot中怎么發送QQ郵件”的內容了,經過本文的學習后,相信大家對SpringBoot中怎么發送QQ郵件這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

锡林浩特市| 黔西县| 尼木县| 元江| 屏东市| 改则县| 清徐县| 农安县| 云和县| 射阳县| 新河县| 南漳县| 准格尔旗| 陇西县| 上杭县| 阿拉善右旗| 嫩江县| 临夏市| 固原市| 隆安县| 永定县| 江华| 林西县| 周宁县| 获嘉县| 兴义市| 高雄市| 龙江县| 吉林省| 买车| 城固县| 南华县| 新津县| 祥云县| 石柱| 怀来县| 类乌齐县| 通河县| 玉树县| 崇州市| 闸北区|