JavaMail開發教程01開山篇

来源:http://www.cnblogs.com/shizongger/archive/2017/12/16/8048148.html
-Advertisement-
Play Games

其實想寫JavaMail這一系列的博客已經有一個月之久了,緣起是某次亂逛傳智播客官網瀏覽到相關的視頻教程,想起大學時代學過的電腦網路提到郵件相關的協議,但遺憾的是到目前為止還沒有接觸電腦網路編程,尤其搞Java EE開發之後,底層的網路細節都已經封裝好了,並沒有接觸多少底層的細節,一直以來以為只... ...


其實想寫JavaMail這一系列的博客已經有一個月之久了,緣起是某次亂逛傳智播客官網瀏覽到相關的視頻教程,想起大學時代學過的電腦網路提到郵件相關的協議,但遺憾的是到目前為止還沒有接觸電腦網路編程,尤其搞Java EE開發之後,底層的網路細節都已經封裝好了,並沒有接觸多少底層的細節,一直以來以為只要與網路協議相關的編程都是C/C++家族特有的功能。看了張孝祥老師的視頻之後,發現C/C++能幹的事,Java也能幹出來,並且一下子就對郵件開發有點興趣起來。當然看了視頻之後還只是懵懵懂懂不能理解透徹,畢竟很有很多細節值得下去咀嚼。於是又買了張孝祥老師的《Java郵件開發詳解》來,這才對JavaMail理解明朗起來。

在這感謝張孝祥老師,老師雖然已經辭世,但其技術書籍卻普惠了後來人。本系列教程知識點提煉自張孝祥老師的JavaMail視頻教程和《Java郵件開發詳解》書籍,以及來自JavaMail官方的API文檔,是對上訴系列文檔的歸納、升華和總結。本系列博客適合剛學完了Java SE的初學者,和正在學習電腦網路編程的在校生,以及已經有工作經驗的Java EE開發提供JavaMail方面的參考資料。

本系列博客教程內容大致分為:郵件協議相關協議講解,JavaMail郵件的發送,電子郵件的組織結構,使用JavaMail生成複雜結構的電子郵件,郵件的接收和解析等。並最總能夠向好友發送一封複雜郵件,這封郵件應該包含附件、超鏈接、HTML格式文本以及內嵌圖片,並且郵件的抄送人,密送人也能夠正常接收到郵件的內容。

基本概念

郵件伺服器
電子郵件的系統抽象簡單概括如下圖:

從圖中可以看出,電子郵件伺服器主要有一下功能:

  1. 接收用戶投遞的郵件;
  2. 將用戶投遞進來的郵件轉發給目標郵件伺服器;
  3. 接收其他郵件伺服器轉發來的郵件,並把郵件存儲到其他管理的用戶郵箱中;
  4. 為前來讀取郵件的用戶提供讀取服務。

SMTP協議
如果按照相見的傳輸方向分類,那麼郵件協議大概分為兩種:SMTP協議和POP3/IMAP協議。前者主要是推送郵件,後者主要是把郵件從伺服器上拉到本地來。

SMTP的全稱是Simple Mail Transfer Protocol,簡單郵件傳輸協議,它定義了伺服器與伺服器之間,已經伺服器與客戶端之間的通信規則,常用埠號是25。

POP3協議
全程是Post Office Protocol,有據協議,它定義了客戶端與伺服器通信的規則,常用埠號110。

IMAP協議
它全稱為Internet Message Access Protocol,Internet消息訪問協議,它是對POP3協議的一中擴展,也是定義了郵件客戶端與郵件伺服器的通信規則。

用戶代理
用戶代理俗稱就是郵件客戶端,或者可以稱為郵件閱讀器。其作用是方便用戶閱讀、回覆、轉發、保存和撰寫郵件報文。目前流行的郵件客戶端有FoxMail,Outlook,Thunderbird等,由於博主操作系統用的是ubuntu,所以實驗環境是建立在Thunderbird上的。

DNS
DNS與上訴協議在TCP/IP協議族中處於位置:應用層。DNS是功能變數名稱解析系統,它的作用是將功能變數名稱映射成ip地址,將功能變數名稱轉換為IP地址這一過程我們稱之為功能變數名稱解析,除此之外DNS還有功能變數名稱反向解析的作用。

DNS的解析過程有點複雜,這裡不打算詳解介紹,DNS為什麼要與郵件開發想關聯起來?那是因為SMTP協議既與客戶端通信,又與伺服器通信,伺服器判斷發送過來的郵件是通過郵件客戶端(用戶代理)過來的還是某台SMTP伺服器發送過來的,是通過判斷其電腦名稱是否是註冊在DNS系統中的電腦名稱。

如果你看到這裡已經感覺雲里霧裡,或是嫌棄介紹的概念太過簡單粗糙。彆著急,下麵的篇章將從實際動手為出發點,帶你走近JavaMail開發的殿堂。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.屬性的簡潔表示法 function f(x,y) { return {x,y}; } // 等同於 function f(x,y){ return {x:x,y:y}; } f(1,2) // Object {x:1,y:2} 例如: let birth = '2000/01/01'; cons ...
  • 前言 頁面顯示到瀏覽器上的過程: 1.1、生成一個DOM樹。 瀏覽器將獲取到的HTML代碼解析成1個DOM樹,包含了所有標簽,包括display:none和動態添加的節點。 1.2、生成樣式結構體。 瀏覽器將所有樣式解析成樣式結構體,解析過程中會去掉瀏覽器不能識別的。 2、DOM樹和樣式結構體結合生 ...
  • 最近這個月一直在趕項目開發,遇到的問題和學到的前端知識沒有更新到博客園,現在閑了下來,就整理一下前端知識。 在項目開發中,在樣式這方面花費的時間較多,因為針對於數字的變化特別多,本人不愛記數字,在看設計圖時總是反覆計算之間的數值,覺得很麻煩,偶然谷歌一下,發現了css3的一個屬性--calc() c ...
  • 前面的話 程式由大大小小的單一對象組成,所有這些對象都按照某種關係和規則來通信。當程式的規模增大,對象會越來越多,它們之間的關係也越來越複雜,難免會形成網狀的交叉引用。當改變或刪除其中一個對象的時候,很可能需要通知所有引用到它的對象。面向對象設計鼓勵將行為分佈到各個對象中,把對象劃分成更小的粒度,有 ...
  • A代碼編輯器,線上模版編輯,仿開發工具編輯器,pdf線上預覽,文件轉換編碼B 集成代碼生成器 [正反雙向](單表、主表、明細表、樹形表,快速開發利器)+快速表單構建器 freemaker模版技術 ,0個代碼不用寫,生成完整的一個模塊,帶頁面、建表sql腳本,處理類,service等完整模塊C 集成阿 ...
  • 為什麼會需要消息隊列(MQ)? ########################################################################################## 主要原因是由於在高併發環境下,由於來不及同步處理,請求往往會發生堵塞,比如說,大量的i ...
  • 今天被問到一個問題,如果你在阿裡雲上部署了一個IIS伺服器,此時如果有成千上萬的客戶端來訪問,你將如何設計?我東扯扯西談談,說加個線程池來處理,在加個請求隊列。當時覺得說的沒有問題,現在想想,伺服器自己就有這些東西,我想面試官要的是如何在IIS中設置高併發,而不是說實現....因此總結了一下,收集了 ...
  • 首先,我們在每次學習一門課程時,都有這樣的習慣,即閱讀目錄,瞭解本門課程所需要學習的範圍和內容,對課程有著整體的把握。之後,在對本門課程進行學習時,就會有一種把控全局的感覺,不管學到哪,都會大體知道這一部分在知識體系裡的作用和功能,也就更好的理解了知識的前因後果、來龍去脈。所以,在學習C語言之前,我 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...