<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
相信大家在日常工作生活中少不了和郵件打交道,比如我們會用郵件進行資訊交流,向上級彙報日常工作;再比如大家熟悉的某個WEB系統註冊階段,通常會有一個功能,點選傳送到目標郵箱的連結完成賬戶啟用。
但是郵件傳送的原理是什麼?郵件是如何傳送的呢?本系列教學將會講解郵件的基本常識與概念,郵件的協定以及郵件伺服器的工作原理,然後用JavaMail傳送郵件的基本實現過程,郵件內嵌圖片等高階郵件技巧。相信大家看完後,一定會有所收穫。
和以往部落格一樣,LZ這裡先給出使用者A從QQ郵箱傳送郵件到使用者B163郵箱的圖示,然後對圖示的過程進行詳細的介紹:
圖示的六個步驟分別進行如下的說明:
①、使用者A的電子郵箱為:xx@qq.com,通過郵件使用者端軟體寫好一封郵件,交到QQ的郵件伺服器,這一步使用的協定是SMTP,對應圖示的①;
②、QQ郵箱會根據使用者A傳送的郵件進行解析,也就是根據收件地址判斷是否是自己管轄的賬戶,如果收件地址也是QQ郵箱,那麼會直接存放到自己的儲存空間。這裡我們假設收件地址不是QQ郵箱,而是163郵箱,那麼QQ郵箱就會將郵件轉發到163郵箱伺服器,轉發使用的協定也是SMTP,對應圖示的②;
③、163郵箱伺服器接收到QQ郵箱轉發過來的郵件,也會判斷收件地址是否是自己,發現是自己的賬戶,那麼就會將QQ郵箱轉發過來的郵件存放到自己的內部儲存空間,對應圖示的③;
④、使用者A將郵件傳送了之後,就會通知使用者B去指定的郵箱收取郵件。使用者B會通過郵件使用者端軟體先向163郵箱伺服器請求,要求收取自己的郵件,對應圖示的④;
⑤、163郵箱伺服器收到使用者B的請求後,會從自己的儲存空間中取出B未收取的郵件,對應圖示⑤;
⑥、163郵箱伺服器取出使用者B未收取的郵件後,將郵件發給使用者B,對應圖示的⑥;最後三步使用者B收取郵件的過程,使用的協定是POP3;
上面的步驟可能大家不太明白,這裡面出現了很多名詞,比如郵件使用者端軟體,郵件伺服器,SMTP和POP3協定(郵件傳輸協定)等等。不明白沒關係,接下來我們來詳細介紹這些名詞。
圖示出現了兩個郵件伺服器,QQ和163郵件伺服器。使用者想要在網上收發郵件,必須要有專門的郵件伺服器。郵件伺服器我們可以假想為現實生活中的郵局。
如果按功能劃分,郵件伺服器可以劃分為兩種型別:
①、SMTP郵件伺服器:使用者替使用者傳送郵件和接收外面傳送給本地使用者的郵件,對應上圖的第一、二步。它相當於現實生活中郵局的郵件接收部門(可接收普通使用者要投出的郵件和其他郵局投遞進來的郵件)。
②、POP3/IMAP郵件伺服器:使用者幫助使用者讀取SMTP郵件伺服器接收進來的郵件,對應上圖的第六步。它相當於專門為前來取包裹的使用者提供服務的部門。
電子郵箱也稱為E-mail地址,比如使用者A的xx@qq.com,和使用者B的xx@163.com。使用者能通過E-mail地址標識自己傳送的電子郵件,同時也可以通過這個地址接收別人發來的電子郵件。電子郵箱需要到郵件伺服器進行申請,也就是說,電子郵箱其實就是使用者在郵件伺服器上申請的賬戶。郵件伺服器會把接收到的郵件儲存到為該賬戶所分配的郵箱空間中,使用者通過使用者名稱密碼登入到郵件伺服器查收該地址已經收到的郵件。一般來講,郵件伺服器為使用者分配的郵箱空間是有限的。
我們可以直接在網站上進行郵件收發,也可以用郵件使用者端軟體。比如常見的FoxMail,Outlook Express。郵件使用者端軟體通常集郵件撰寫,傳送和收發功能於一體,主要用於幫助使用者將郵件傳送給SMTP郵件伺服器和從POP3/IMAP郵件伺服器讀取使用者的電子郵件。
電子郵件需要在郵件使用者端和郵件伺服器之間,以及兩個郵件伺服器之間進行郵件傳遞,那就必須要遵守一定的規則,這個規則就是郵件傳輸協定。下面我們分別簡單介紹幾種協定(後面會詳細講解):
①、SMTP協定:全稱為 Simple Mail Transfer Protocol,簡單郵件傳輸協定。它定義了郵件使用者端軟體和SMTP郵件伺服器之間,以及兩臺SMTP郵件伺服器之間的通訊規則。
②、POP3協定:全稱為 Post Office Protocol,郵局協定。它定義了郵件使用者端軟體和POP3郵件伺服器的通訊規則。
③、IMAP協定:全稱為 Internet Message Access Protocol,Internet訊息存取協定,它是對POP3協定的一種擴充套件,也是定義了郵件使用者端軟體和IMAP郵件伺服器的通訊規則。
SMTP協定:全稱為 Simple Mail Transfer Protocol,簡單郵件傳輸協定。它定義了郵件使用者端軟體和SMTP郵件伺服器之間,以及兩臺SMTP郵件伺服器之間的通訊規則。SMTP協定的通訊雙方採用一問一答的命令/響應形式進行對話,SMTP協定分為標準SMTP協定和擴充套件SMTP協定,標準SMTP協定是1982年在RFC821 檔案中定義的,而擴充套件SMTP協定是1995年在RFC1869 檔案中定義的。擴充套件SMTP協定在標準 SMTP協定基礎上的改動非常小,主要增加了郵件安全方面的認證功能,現在我們說的SMTP協定基本上都是擴充套件SMTP協定。
RFC1869檔案參考如下:https://datatracker.ietf.org/doc/html/rfc1869
SMTP 協定中一共定義了18條命令,但是傳送一封電子郵件的過程通常只需要6條命令,我將這6調命令/響應的語法格式總結如下
大家可能光看這些命令不太清楚,下面我總結了一下使用Smtp協定手工傳送郵件的步驟:
①、和SMTP伺服器建立連線,telnet smtp.163.com 25。這條命令是和163郵箱建立連線,如果是和QQ,那麼將163換成qq即可,同理別的郵箱也是一樣。後面的數位25表示SMTP伺服器的埠號。
②、ehlo 發件人使用者名稱。這沒什麼好說的,就是告訴SMTP伺服器傳送者的使用者名稱。
③、選擇登入認證方式,一般我們在第二步執行完後,會提示有幾種認證方式,我們一般選擇的是login。即輸入命令:auth login
④、分別輸入經過Base64加密後的使用者名稱和密碼。注意必須是要經過 Base64加密後的使用者名稱和密碼,大家可以網上線上轉,也可以用後面給的程式碼進行轉換。
⑤、指明郵件的傳送人和收件人
mail from:<xxx@163.com>
rcpt to:<xxx@qq.com>
⑥、輸入data命令,然後編寫要傳送的郵件內容,郵件的編寫格式規則如下:
第一步:輸入data
第二步:輸入郵件內容
from:<xxx@163.com>----郵件頭髮件人地址 to:<xxx@qq.com> ----郵件頭收件人地址 subject:hello world ----郵件頭主題 -----空行 This is the first email sent by hand using the SMTP protocol ----郵件的具體內容
⑦、輸入“.”表示郵件內容輸入完畢
⑧、輸入quit命令斷開與郵件伺服器的連線
下面我用動圖的形式給大家展示用Smtp協定手工傳送郵件的前面三個步驟:
上面我執行到第4步,剩下的步驟我就直接截圖了:
至此,我們一封郵件便發出去了,我們先登陸到QQ郵箱檢視(後面我們通過POP3伺服器來查收):
①、執行 telent smtp.163.com 25 命令時,報如下錯誤:
解決辦法是:控制面板----程式------啟動或關閉 Windows 功能----將Telnet勾上,然後點選確定即可
②、使用者名稱和密碼必須要base64加密,線上網站:http://www1.tc711.com/tool/BASE64.htm
③、每一步驟之間輸入命令要儘量快,不然會自動斷開連線
④、我上面是和163郵箱連結的,如果是和qq郵箱連線,會有一些問題。首先第一步建立連線為 telnet smtp.qq.com 587,埠號為587,不是25。還有第三步,選擇認證方式,在執行 auth login之前,先執行:starttls。還有第四步,輸入使用者名稱和授權碼,而不是使用者名稱和密碼,授權碼的獲取可以參考:
⑤、輸入郵件內容時,空行不要忘記了,還有結束輸入是以“.”結束的。
郵件服務商專門為每個使用者申請的電子郵箱提供了專門的儲存空間,SMTP 伺服器將接收到的郵件儲存到相應使用者的儲存空間。使用者要從郵件服務提供商提供的電子郵箱中獲取自己的電子郵件,那麼就需要POP3 郵件伺服器來完成。
POP3協定:全稱為 Post Office Protocol,它定義了郵件使用者端程式和POP3郵件伺服器的通訊規則。
下面我們演示用POP3協定手工接收郵件:
這是在 163 郵箱的一份郵件。(這裡沒有用qq郵箱演示是因為qq有很多安全限制,步驟比較繁瑣,大家遇到問題了可以留言問我)
第一步:用telnet 連線POP3的163郵箱伺服器
接下來收取郵件:
相關命令的詳細解釋如下:
英文參考檔案如下:
https://datatracker.ietf.org/doc/html/rfc822
RFC822 檔案中定義的檔案格式包括兩個部分:郵件頭和郵件體。在上一篇部落格,我們通過SMTP服務傳送一封郵件,然後用POP3伺服器接收。郵件接收內容如下圖紅色框所顯示:
這上面顯示的不全,我這裡將其內容整理出來,並在每行左邊加上標號:
1 Received: from smtpbg5.qq.com (unknown [183.60.61.230]) by mx6 (Coremail) with SMTP id OMCowACXv+ssf99ZD5FqAg--.5570S3; Thu, 12 Oct 2017 22:41:48 +0800 (CST) 2 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qq.com; s=s201512; t=1507819308; bh=N2xK6iU/bt0tcntOdutSQ3tkYXbTtOi08RT+HjuXmBc=; h=From:To:Subject:Mime-Version:Content-Type:Content-Transfer-Encoding:Date:Message-ID; b=lzBtxAWw0+HB1bGLkkCqlUeU4bvVoMxDp3UZTKq3YCIJt5Ypu4FkE0m5rrrpcxF0D W0/PQajrQTughLTmpjoudI5aDWjfrfkOc1Z0+ltaAraoZfdE5HmNQ0hxQstNa+IbjC GMVEzCOMikVm5qklyCz/1Lwd5mBJ90YkknS3sL08= 3 X-QQ-FEAT: Gf8h89u9tNwRjwDYIPPhYegibbvTgUmwr4I/ntV6mwr6YOyFiWpUpVj+bCsJz tAz24NjMs/p1D8BXG7LYvZRCPMPQV7jdW3AKjTclrSS9xE29fxWsEjYk5QlD1cMIuhHF9Po 1HMwWKIZX8q6smehIwr+t/du8sprvHVue4ty5KMPeWw967qaAZgta5hcnRtgajhZRcIumVx r+K4/nY7I+wwNenOTfHT4Ly4K1Ne+vD7VNJbLHH674HEJ2CsoSEEBW7X/LeeSq6M= 4 X-QQ-SSF: 0001000000000010000000000000007 5 X-HAS-ATTACH: no 6 X-QQ-BUSINESS-ORIGIN: 2 7 X-Originating-IP: 113.57.253.69 8 X-QQ-STYLE: 9 X-QQ-mid: webmail4t1507819307t4823829 10 From: "=?ISO-8859-1?B?MTEzMjgwMzk1MQ==?=" <1132803951@qq.com> 11 To: "=?ISO-8859-1?B?MTgyNzEyNjU3MzI=?=" <18271265732@163.com> 12 Subject: hello world 13 Mime-Version: 1.0 14 Content-Type: multipart/alternative; boundary="----=_NextPart_59DF7F2B_08CB07D0_339F08F2" 15 Content-Transfer-Encoding: 8Bit 16 Date: Thu, 12 Oct 2017 22:41:47 +0800 17 X-Priority: 3 18 Message-ID: <tencent_9EFED46440A5BAD43E6BC680FAC8A58E460A@qq.com> 19 X-QQ-MIME: TCMime 1.0 by Tencent 20 X-Mailer: QQMail 2.x 21 X-QQ-Mailer: QQMail 2.x 22 X-QQ-SENDSIZE: 520 23 Received: from qq.com (unknown [10.137.130.92]) by smtp.qq.com (ESMTP) with SMTP id ; Thu, 12 Oct 2017 22:41:47 +0800 (CST) 24 Feedback-ID: webmail:qq.com:bgweb:bgweb4 25 X-CM-TRANSID:OMCowACXv+ssf99ZD5FqAg--.5570S3 26 Authentication-Results: mx6; spf=pass smtp.mail=1132803951@qq.com; dki m=pass header.i=@qq.com 27 X-Coremail-Antispam: 1Uf129KBjDUn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7v73 VFW2AGmfu7bjvjm3AaLaJ3UbIYCTnIWIevJa73UjIFyTuYvj4RWLvtDUUUU 28 This is a multi-part message in MIME format. 29 Content-Type: text/plain; charset="ISO-8859-1" 30 Content-Transfer-Encoding: base64 31 PGRpdj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICdsdWNpZGEgR3JhbmRlJywgVmVyZGFu YSwgJ01pY3Jvc29mdCBZYUhlaSc7IGxpbmUtaGVpZ2h0OiAyMy44cHg7Ij5UaGlzIGlzIHRo ZSBmaXJzdCBlbWFpbCBzZW50IGJ5IGhhbmQgdXNpbmcgdGhlIFNNVFAgcHJvdG9jb2w8L3Nw YW4+PC9kaXY+
上面便是RFC822 所定義的郵件格式,從第 1 行到第 30 行都是郵件頭,第 31 行是郵件體(經過base64加密過了,有興趣的大家可以解碼看看)。而郵件頭和郵件體之間以一個空行間隔,郵件頭部分是由多個頭欄位和欄位內容組成,分別表示收件人,發件人,發件時間,主題等資訊。還有一些資訊是對應的SMTP伺服器在郵件傳遞過程中所加上的,我們知道現實生活中的郵局在處理郵件時,通常都會在信封上加上郵戳,表示這封郵件在什麼時候經過了哪個郵局哪個部門處理,我們上個例子是QQ郵箱發給163郵箱的。而SMTP伺服器按從下往上的方式新增資訊,即先新增的欄位位於後新增欄位的後面。所以qq的SMTP伺服器會先新增頭欄位,但是新增的欄位會在163的SMTP伺服器新增欄位的下面,另外 POP3伺服器也會自己新增一些欄位。
每一個郵件頭以“欄位名:欄位值”的格式出現,即每一行郵件頭的內容依次由欄位名、冒號、空格、欄位值、回車換行符組成。RFC822檔案中定義了多個標準的郵件頭欄位,每一個郵件頭欄位表示一種特定的資訊。郵件頭中也可以包含自定義的頭欄位,這種自定義的頭欄位通常是某個組織或機構內部專用的。下面是對一些主要的郵件頭欄位的解釋:
我們從上可以知道,RFC822檔案存在兩個問題:
①、定義了郵件內容的主體結構和各種郵件頭欄位的詳細細節,但是,它沒有定義郵件體的格式,RFC822檔案定義的郵件體部分通常都只能用於表述一段普通的文字,而無法表達出圖片、聲音等二進位制資料。
②、SMTP伺服器在接收郵件內容時,當接收到只有一個“.”字元的單獨行時,就會認為郵件內容已經結束,如果一封郵件正文中正好有內容僅為一個“.”字元的單獨行,SMTP伺服器就會丟棄掉該行後面的內容,從而導致資訊丟失。
上面兩個問題是致命的,當今的電子郵件,人們希望在電子郵件中嵌入圖片、聲音、動畫和附件。但是,由於圖片和聲音等內容是非ASCII碼的二進位制資料,而RFC822郵件格式只適合用來表達純文字的郵件內容,所以,要使用RFC822郵件格式傳送這些非ASCII碼的二進位制資料時,必須先採用某種編碼方式將它們“編碼”成可列印的ASCII字元后再作為RFC822郵件格式的內容。郵件閱讀程式在讀取到這種經過編碼處理的郵件後,再按照相應的解碼方式解碼出原始的二進位制資料,這樣就可以藉助RFC822郵件格式來傳遞多媒體資料了。這種做法需要解決一下兩個技術問題:
一、郵件閱讀程式如何知道郵件中嵌入的原始二進位制資料所採用的編碼方式;
二、郵件閱讀程式如何知道每個嵌入的影象或其他資源在整個郵件內容中的起止位置。
為了解決上面兩個問題,人們後來專門為此定義了MIME(Multipurpose Internet Mail Extension,多用途Internet郵件擴充套件)協定。
MIME協定用於定義複雜郵件體的格式,它可以表達多段平行的文字內容和非文字的郵件內容,例如,在郵件體中內嵌的影象資料和郵件附件等。另外,MIME協定的資料格式也可以避免郵件內容在傳輸過程中發生資訊丟失。MIME協定不是對RFC822郵件格式的升級和替代,而是基於RFC822郵件格式的擴充套件應用。一言以蔽之,RFC822定義了郵件內容的格式和郵件頭欄位的詳細細節,MIME協定則是定義瞭如何在郵件體部分表達出的豐富多樣的資料內容。
一個採用了MIME協定的電子郵件就叫做MIME郵件,MIME郵件在RFC822檔案中定義的郵件頭欄位的基礎上,擴充了一些自己專用的郵件頭欄位,例如,使用MIME-Version頭欄位指定MIME協定的版本,使用Content-Type頭欄位指定郵件體的MIME型別,使用Content-Transfer-Encoding頭欄位指定編碼方法,如下所示:
MIME-Version:1.0 Content-Type:multipart/mixed;boundary="----=_NextPart_000_0050_01C"
其中,“multipart/mixed”部分說明郵件體中包含有多段資料,每段資料之間使用boundary屬性中指定的字元文字作為分隔識別符號。另外,MIME郵件也擴充套件了RFC822檔案中已經定義了的郵件頭欄位的內涵,例如,定義了subject頭欄位中的值內容的格式,以便通過編碼的方式讓郵件主題中也可以使用非ASCII碼的字元。subject頭欄位中的值巢狀在一對“=?”和“?=”標記符之間,標記符之間的內容由三部分組成:郵件主題的原始內容的字元集、當前採用的編碼方式、編碼後的結果,這三部分之間使用“?”進行分隔。
以上就是郵件的協定及伺服器工作原理的詳細內容,更多關於郵件協定伺服器的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45