最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaWeb實現(xiàn)郵件發(fā)送接收功能

 更新時間:2015年12月03日 15:10:16   作者:孤傲蒼狼  
這篇文章主要為大家詳細介紹了JavaWeb郵件發(fā)送接收功能的實現(xiàn),郵件發(fā)送和接收功能是非常常用的功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

一、郵件開發(fā)涉及到的一些基本概念

1.1、郵件服務(wù)器和電子郵箱

  要在Internet上提供電子郵件功能,必須有專門的電子郵件服務(wù)器。例如現(xiàn)在Internet很多提供郵件服務(wù)的廠商:sina、sohu、163等等他們都有自己的郵件服務(wù)器。

  這些郵件服務(wù)器類似于現(xiàn)實生活中的郵局,它主要負(fù)責(zé)接收用戶投遞過來的郵件,并把郵件投遞到郵件接收者的電子郵箱中。

  電子郵箱(E-Mail地址)的獲得需要在郵件服務(wù)器上進行申請,確切地說,電子郵箱其實就是用戶在郵件服務(wù)器上申請的一個賬戶,用戶在郵件服務(wù)器上申請了一個帳號后,郵件服務(wù)器就會為這個賬號分配一定的空間,用戶從而可以使用這個帳號以及空間發(fā)送電子郵件和保存別人發(fā)送過來的電子郵件。

1.2、郵件傳輸協(xié)議

1.2.1、SMTP協(xié)議

  用戶連接上郵件服務(wù)器之后,要想給它發(fā)送一封電子郵件,需要遵循一定的通訊規(guī)則,SMTP協(xié)議就是用來定義這種通訊規(guī)則的。因此,我們通常也把處理用戶smtp請求(郵件發(fā)送請求)的服務(wù)器稱之為SMTP服務(wù)器(郵件發(fā)送服務(wù)器)。

1.2.2、POP3協(xié)議

  同樣,用戶若想從郵件服務(wù)器管理的電子郵箱當(dāng)中接收一封電子郵件話,它連上郵件服務(wù)器后,也要遵循一定的通訊格式,POP3協(xié)議就是用來定義這種通訊格式的。因此,我們通常也把處理用戶pop3請求(郵件接收請求)的服務(wù)器稱之為POP3服務(wù)器(郵件接收服務(wù)器)。

1.3、電子郵件的發(fā)送和接收過程

  通過一張圖來說明一封郵件的發(fā)送和接收過程,如下圖所示:

  

簡單說一下這個郵件收發(fā)過程:

  1、xdp@sohu.com用戶寫好一封Email發(fā)送到sohu的Smtp服務(wù)器。對應(yīng)于上圖的步驟①

  2、sohu的Smtp服務(wù)器開始處理xdp@sohu.com用戶的請求,它會根據(jù)收件人的地址判斷,當(dāng)前收件人是不是自己管轄的用戶,如果是,就直接將Email存放到為該收件人的分配的郵箱空間當(dāng)中。sohu的Smtp服務(wù)器判斷收件人地址發(fā)現(xiàn),這一封Email的收件人gacl@sina.com 是Sina的郵件服務(wù)器管理的,于是又將Email轉(zhuǎn)發(fā)給Sina的Smtp服務(wù)器。對應(yīng)于上圖的步驟②

  3、Sina的Smtp服務(wù)器開始處理sohu的Smtp服務(wù)器發(fā)送過來的Email,Sina的Smtp服務(wù)器根據(jù)收件人的地址判斷,發(fā)現(xiàn)收件人自己管轄的用戶,于是就直接將Email存放到為gacl@sina.com用戶的分配的郵箱空間當(dāng)中。對應(yīng)于上圖的步驟③。

  4、xdp@sohu.com用戶將郵件發(fā)出去之后,就通知gacl@sina.com用戶去收取。gacl@sina.com用戶于是就連接上Sina的POP3服務(wù)器收取郵件,對應(yīng)于上圖的步驟④。

  5、POP3服務(wù)器從gacl@sina.com用戶的郵箱空間當(dāng)中取出Email,對應(yīng)于步驟⑤。

  6、POP3服務(wù)器將取出來的Email發(fā)給gacl@sina.com用戶,對應(yīng)于步驟⑥。

二、使用Smtp協(xié)議發(fā)送郵件

2.1、Smtp協(xié)議講解

  使用smtp協(xié)議發(fā)送郵件給郵件服務(wù)器時規(guī)定了要做以下幾件事

  1、使用"ehlo"命令和連接上的smtp服務(wù)器打聲招呼,例如:

     ehlo gacl

  2、使用"auth login"命令登錄到Smtp服務(wù)器,登錄使用的用戶名和密碼必須經(jīng)過Base64加密,例如:   

   ?、?、輸入命令:auth login

    ②、輸入使用Base64加密過后的用戶名:Z2FjbA==

    ③、輸入Base64加密過后的密碼:MTIzNDU2

  3、指明郵件的發(fā)件人和收件人

    mail from:<gacl@sohu.com>

    rcpt to:<xdp_gacl@sina.cn>

   4、編寫要發(fā)送的郵件內(nèi)容,郵件的編寫格式是有一定的規(guī)則的,一封格式良好的郵件應(yīng)該包含郵件頭和郵件的主體內(nèi)容。

    郵件頭使用下面的三個字段來指明

  • from字段用于指明郵件的發(fā)送人
  • to字段用于指明郵件的收件人
  • subject字段用于指明郵件的主題

郵件的內(nèi)容包含了這些信息之后才是一封格式良好的郵件。

    ①、輸入"data"命令

      data

   ?、?、編寫郵件內(nèi)容

      from:<gacl@sohu.com>    ----郵件頭

      to:<xdp_gacl@sina.cn>     ----郵件頭

      subject:hello         ----郵件頭

                       -----空行

      hello gacl            ----郵件的具體內(nèi)容

5、輸入一個.告訴郵件服務(wù)器郵件內(nèi)容已經(jīng)寫完了    .

6、輸入quit命令斷開與郵件服務(wù)器的連接

以上的6個步驟就是Smtp協(xié)議規(guī)定的發(fā)送一封Email必須要做的事情。

2.2、使用Smtp協(xié)議手工發(fā)送郵件

  在對Smtp協(xié)議有一定的了解之后,我們就可以使用Smtp協(xié)議來發(fā)送郵件了。下面演示一下使用Telnet客戶端連接上搜狐的郵件服務(wù)器然后發(fā)一封Email到新浪的郵箱中去

  為了能夠?qū)mtp協(xié)議有一個直觀的認(rèn)識,這里我們不借助任何第三方郵件客戶端工具,而是使用最原始的的Telnet客戶端來完成郵件的發(fā)送過程,Telnet是一個Window自帶的網(wǎng)絡(luò)客戶端程序,通過它可以連接上互聯(lián)網(wǎng)上面的任意一臺主機。

  使用telnet客戶端連接到搜狐的smtp服務(wù)器,如下圖所示:

通過telnet客戶端發(fā)Email,如下圖所示:

  我們登錄到<xdp_gacl@sina.cn>郵箱當(dāng)中,就可以收取到由<gacl@sohu.com>發(fā)送的Email了,如下圖所示:

  這就是使用Smtp協(xié)議發(fā)送郵件的過程。

三、使用POP3協(xié)議接收郵件

3.1、POP3協(xié)議講解

  POP3協(xié)議規(guī)定了收取郵件時要做以下幾件事

①、輸入用戶名和密碼登錄到POP3服務(wù)器,用戶名和密碼不需要經(jīng)過Base64加密

  user username --登錄郵箱的用戶名
  pass password --登錄郵箱使用的密碼

②、使用retr命令收取郵件
  retr 數(shù)字 收取郵件,retr 1表示收取郵箱當(dāng)中的第一封郵件,這是POP3協(xié)議里面最重要的一個命令。

  在使用retr命令收取郵件之前,可以使用如下的兩個命令查看一下郵箱里面的郵件的一些相關(guān)信息。

  stat

    返回郵箱里面的郵件數(shù)量以及郵件占用的空間大小信息
  list 數(shù)字

    返回某一封郵件的統(tǒng)計信息

③、郵件收取完成之后使用quit命令斷開與POP3服務(wù)器的連接。
  quit 斷開與POP3服務(wù)器的連接

3.2、使用POP3協(xié)議手工接收郵件

  收取郵件我們也不借助任何第三方客戶端工具,而是使用Telnet客戶端連接到POP3服務(wù)器進行收取。

  例如:現(xiàn)在我的搜狐郵箱當(dāng)中有這樣的一封郵件,如下圖所示:

  現(xiàn)在我們不用使用foxmail或者outLook這樣的客戶端工具去收取,而是使用Telnet客戶端連接到搜狐的POP3服務(wù)器去手工收取。

1、使用Telnet連接上搜狐的POP3服務(wù)器,使用命令:telnet pop3.sohu.com 110,如下圖所示:

根據(jù)POP3協(xié)議規(guī)定的郵件收取步驟來收取郵件。如下圖所示:

可以看到,我們POP3協(xié)議純手工從搜狐的POP3服務(wù)器當(dāng)中收取回來了一封Email,Email里面的內(nèi)容都經(jīng)過了Base64編碼處理,下面我們寫一個小程序?qū)⒔?jīng)過Base64編碼后的郵件內(nèi)容進行解碼,還原回郵件的內(nèi)容,代碼如下

package me.gacl.encrypt;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

public class Base64Encrypt {

 public static void main(String args[]) throws IOException{
 /*System.out.print("請輸入用戶名:");
 BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
 String userName = in.readLine();
 System.out.print("請輸入密碼:");
 String password = in.readLine();
 BASE64Encoder encoder = new BASE64Encoder();
 System.out.println("編碼后的用戶名為:" + encoder.encode(userName.getBytes()));
 System.out.println("編碼后的密碼為:" + encoder.encode(password.getBytes()));*/
 
 BASE64Decoder decoder = new BASE64Decoder();
 //郵件主題的Base64編碼
 String emailSubject = "=?GBK?B?08q8/rLiytQ=?=";
 //郵件文本內(nèi)容的Base64編碼
 String emailPlainContent = "vPK1pbXE08q8/reiy82y4srUo6E=";
 //帶html標(biāo)簽和郵件內(nèi)容的Base64編碼
 String emailHtmlContent = "PFA+vPK1pbXE08q8/reiy82y4srUo6E8L1A+";
 //將使用Base64編碼過后的文本內(nèi)容再使用Base64來解碼
 emailSubject = new String(decoder.decodeBuffer(emailSubject),"GBK");
 emailPlainContent = new String(decoder.decodeBuffer(emailPlainContent),"GBK");
 emailHtmlContent = new String(decoder.decodeBuffer(emailHtmlContent),"GBK");
 System.out.println("郵件標(biāo)題:"+emailSubject);
 System.out.println("郵件內(nèi)容:"+emailPlainContent);
 System.out.println("帶html標(biāo)簽的郵件內(nèi)容:"+emailHtmlContent);
 }
}

運行結(jié)果如下: 

這就是使用POP3協(xié)議收取郵件的過程。

以上就是郵件的發(fā)送與接收原理的相關(guān)內(nèi)容,這一篇文章主要是介紹郵件發(fā)送和接收過程中使用到的smtp協(xié)議和pop3協(xié)議。沒有涉及到太多代碼方面的東西,后面會具體介紹使用JavaMail來進行郵件發(fā)送,點擊這篇文章:《JavaWeb中JavaMail創(chuàng)建郵件和發(fā)送郵件》。

關(guān)于JavaWeb實現(xiàn)郵件發(fā)送接收功能的內(nèi)容就這么多。

相關(guān)文章

  • springboot的控制反轉(zhuǎn)和自動裝配示例代碼

    springboot的控制反轉(zhuǎn)和自動裝配示例代碼

    這篇文章主要介紹了springboot的控制反轉(zhuǎn)和自動裝配的相關(guān)知識,本文通過示例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • 如何用120行Java代碼寫一個自己的區(qū)塊鏈

    如何用120行Java代碼寫一個自己的區(qū)塊鏈

    這篇文章就是幫助你使用 Java 語言來實現(xiàn)一個簡單的區(qū)塊鏈,用不到 120 行代碼來揭示區(qū)塊鏈的原理,感興趣的就一起來了解一下
    2019-06-06
  • Java 如何使用Velocity引擎生成代碼

    Java 如何使用Velocity引擎生成代碼

    代碼生成器,可以有效減少編寫重復(fù)代碼,快速實現(xiàn)簡單的業(yè)務(wù)邏輯,也能讓我們的代碼保持一致。那目前,我們看到的代碼生成器,大部分是基于velocity引擎模板生成的,接下來我們就學(xué)習(xí)一下如何實現(xiàn)代碼生成器。
    2021-06-06
  • java中雪花算法時鐘回?fù)軉栴}解決

    java中雪花算法時鐘回?fù)軉栴}解決

    本文介紹了分布式系統(tǒng)中使用雪花算法生成唯一ID時可能遇到的時鐘回?fù)軉栴},以及解決這個問題的幾種方法,包括等待機制、擴展位、預(yù)留時間戳或邏輯時鐘等,感興趣的可以了解一下
    2024-10-10
  • 詳解領(lǐng)域驅(qū)動設(shè)計之事件驅(qū)動與CQRS

    詳解領(lǐng)域驅(qū)動設(shè)計之事件驅(qū)動與CQRS

    這篇文章分析了如何應(yīng)用事件來分離軟件核心復(fù)雜度。探究CQRS為什么廣泛應(yīng)用于DDD項目中,以及如何落地實現(xiàn)CQRS框架。當(dāng)然我們也要警惕一些失敗的教訓(xùn),利弊分析以后再去抉擇正確的應(yīng)對之道
    2021-06-06
  • Java基礎(chǔ)之練習(xí)打印三角形

    Java基礎(chǔ)之練習(xí)打印三角形

    這篇文章主要介紹了Java基礎(chǔ)之練習(xí)打印三角形,文中有非常詳細的代碼示例,對正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • 關(guān)于MyBatis中映射對象關(guān)系的舉例

    關(guān)于MyBatis中映射對象關(guān)系的舉例

    這篇文章主要介紹了關(guān)于MyBatis中映射對象關(guān)系的舉例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • springboot 使用yml配置文件自定義屬性的操作代碼

    springboot 使用yml配置文件自定義屬性的操作代碼

    在SpringBoot中yml/yaml文件可以自定義一些屬性,以供注入給自定義bean對象的屬性,主要通過空格和層次來實現(xiàn),類似于python代碼,本文通過實例代碼給大家介紹springboot 使用yml配置文件自定義屬性,感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • Java中的三種校驗注解的使用(@Valid,@Validated和@PathVariable)

    Java中的三種校驗注解的使用(@Valid,@Validated和@PathVariable)

    本文主要介紹了Java中的三種校驗注解的使用(@Valid,@Validated和@PathVariable),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • Java中內(nèi)存問題之OOM詳解

    Java中內(nèi)存問題之OOM詳解

    這篇文章主要介紹了Java中內(nèi)存管理的OOM詳解,OOM,全稱“Out?Of?Memory”,翻譯成中文就是“內(nèi)存用完了”,來源于java.lang.OutOfMemoryError,當(dāng)JVM因為沒有足夠的內(nèi)存來為對象分配空間并且垃圾回收器也已經(jīng)沒有空間可回收時,就會拋出這個error,需要的朋友可以參考下
    2023-08-08

最新評論

美姑县| 临汾市| 榆树市| 开平市| 永胜县| 花垣县| 满洲里市| 和平区| 天柱县| 涟水县| 遵义市| 南开区| 上饶市| 景洪市| 杂多县| 汝州市| 永宁县| 西贡区| 六枝特区| 南乐县| 同心县| 吴堡县| 苏尼特左旗| 和田县| 苏州市| 正镶白旗| 南和县| 江达县| 灵川县| 乳山市| 平乐县| 宝应县| 石景山区| 金平| 怀来县| 元阳县| 呼伦贝尔市| 怀仁县| 宜城市| 综艺| 张家界市|