1. 程式人生 > 實用技巧 >計算機網路之電子郵件

計算機網路之電子郵件

計算機網路之電子郵件


前言

本部落格主要介紹老師在P77講的Alice向Bob傳送一條報文的過程

過程分析

在這裡插入圖片描述
關於這個圖,有幾點要注意並理解的:

  1. user agent是使用者代理,也叫郵件代理或郵件代理程式。使用者代理是一種計算機元件,存在於使用者的主機上,像Outlook和Apple Mail都是電子郵件使用者代理的例子
  2. mail server是郵件伺服器。報文佇列和使用者郵箱存在在郵件伺服器上。
  3. ⑥的箭頭方向要理解好,圖上的箭頭是從Bob的郵件伺服器送往Bob的使用者代理,意思是郵件發到Bob的使用者代理上。但實際上並不是Bob的郵件伺服器把報文推出去,而是Bob在他方便的時候通過POP、IMAP、HTTP(在基於Web的電子郵件上)等郵件訪問協議來取。取報文是一個拉操作,因此箭頭也可以反著畫。
    可以這麼說

收件人在打算收信時,就執行 PC 機中的使用者代理,使用 POP3(或 IMAP)協議讀取傳送給自己的郵件。請注意,POP3 伺服器和 POP3 客戶之間的通訊是由 POP3 客戶發起的。

  1. Bob的郵件伺服器將該報文放入Bob的郵箱,這一步是發生在⑤
  2. Bob和Alice的郵件伺服器都不能缺少,就好像Alice和Bob的家門口都要有郵箱。對於Alice,有郵箱的話,Alice只要把信扔進去就行,到時候信會被郵遞員取走;對於Bob,如果沒有郵箱,郵遞員來到Bob家,敲了一下門,發現家裡沒人,郵遞員就拿著信走了,因為沒有地方放信,有郵箱的話,郵遞員可以把信放到郵箱裡,Bob回家的時候Bob直接從信箱裡拿信就行了。
    這一條的來源是一個問題:”可以把郵件伺服器取消嗎?“,經過上面的分析我們知道顯然是不能的。因為只有郵件伺服器才能儲存郵件,當傳送失敗時每隔一段時間進行傳送,當接收方(伺服器端)的代理有空的時候可以去郵件伺服器上拿。如果取消了郵件伺服器,就不能實現這個功能,如果按照例子來說,就是Bob得一直在家,才能不錯過郵件,而電子郵件本身就是一種非同步通訊媒介,如果Bob得保持一直線上,就失去了郵件的意義。
    或許根據這個問題你又能想到相似的問題:”可以把使用者代理取消嗎?“其實這個問題非常傻,因為使用者代理就是一個軟體嘛,你想象如果你的ipad上沒有QQ郵箱這個APP,你的電腦上沒有Outlook和其他郵件軟體,你要怎麼發郵件呢?
    所以顯然郵件伺服器和使用者代理都是必不可少的。而且郵件伺服器一般不會放到本地PC上,而是單獨放置,總是保持開機(就像任何時候你都可以向家門口的郵箱裡放郵件)

郵件傳送成功是誰告訴我的?


Alice的使用者代理把報文發給她的郵件伺服器,伺服器把該報文放到報文佇列中。這時Alice就能接到傳送成功的通知

郵件傳送失敗是誰告訴我的?

失敗可能發生在兩個地方。

  1. TCP連線失敗——②或者④
  2. 找不到接收者的信箱——⑤

也就是說,②和④可能告訴我傳送失敗,因為TCP連線失敗了;⑤也可能告訴我傳送失敗,找不到接收者的信箱。

習題

使用SMTP協議傳送郵件時,當傳送程式(使用者代理)報告發送成功時,表明郵件已經被髮送到( A)
A.傳送伺服器上
B.接收者主機上
C.接收伺服器上
D.接收伺服器和接收者主機上

解析:
傳送是指將電子郵件從郵件傳送者計算機傳送到傳送伺服器(也稱為本地郵件伺服器),以及從傳送伺服器傳送到目的郵件伺服器的過程。接收是指將電子郵件從目的郵件伺服器傳送到接收郵件使用者的計算機機中的過程。使用SMTP傳送電子郵件時,當傳送程式(使用者代理)報告發送成功時,表明電子郵件已經被傳送到傳送伺服器上,因為傳送程式(使用者代理)只負責從使用者計算機到傳送伺服器之間的傳送。
總之因為傳送程式(使用者代理)只管從使用者計算機(上的使用者代理)傳送到使用者的郵件伺服器上這個過程,所以傳送程式說:“成功了!”只能說明已經發到了傳送伺服器上。