程序員,你真的懂得收發電子郵件嗎?
前言
在幾年以前,相信不少朋友都聽說過,馬云同志創辦阿里巴巴的時候,還不會發郵件。也不知道在阿里巴巴上市之后,他學會收發郵件了沒有!呵呵。我是曾經從內心里“瞧不起”過,至少認為在這一點上我比他強很多。后來我才發現,我未必懂得收發郵件。除了我,還有很多的碼農也根本不懂得收發郵件,更不懂得 Email里面的工作原理。借此,向大家介紹一下和Email相關的技術。
老實說,我在七八年前就有了自己的雅虎郵箱,一直斷斷續續有用過。直到后來參加工作后,由于經常需要郵件溝通,我才發現,原來電子郵件是這樣用的。在我的習慣思維里,一直以為郵箱是必須在提供商的網站上才能登錄,然后必須在對應的網頁里收發、查看、刪除郵件(比如我注冊了雅虎郵箱,必須在雅虎網站去登錄,然后才能進去操作)。后來有同事推薦了FoxMail,在配置過程中,我才知道了什么是SMTP/POP3協議,后來才發現,原來office中的Outlook,也是一款優秀的郵件客戶端。或許有很多朋友和我一樣,也是這么天真的認為的。聊點題外話,其實一般的大公司都非常注重“郵件”的,這包含你日常工作中的溝通,工作安排,工作記錄等。每天及時收發郵件,也是一種良好的工作習慣。一般公司都有自己的企業郵箱和郵件客戶端。當然,小公司好像不太提倡這個,面對面溝通就好了,一般的根本沒有這個“工作習慣”。所以,很多人根本沒去了解過。包括我們很多開發人員,IT人員,都還不太了解其流程及工作原理。
淺析電子郵件的原理
在配置Outlook或者foxMail來收發郵件時,肯定會遇到SMTP協議和POP3協議的配置選項。那這兩個協議分別是啥意思呢?網上都有翻譯,我不會復制粘貼了。
首先,我會介紹一些常識,然后結合通俗的例子,再結合圖文的方式來講講電子郵局其中的流程及工作原理。隨后,我將會用windows 命令行的方式,登錄郵件服務器,用命令行的方式手工發送/接受一封電子郵件。相信這樣子,你將會透徹的理解其中的工作原理。
電子郵件的一些基本常識:
1.郵件服務器
2.電子郵箱
3.郵件客戶端軟件
4.郵件傳輸協議
5.電子郵件的傳輸過程
首先要明白這些“是懂非懂”的概念,才能更好的理解。
在Internet上要想提供電子郵件的功能,必須要有專門的電子郵件服務器。國內比較有名的就是“四大門戶”的郵箱,國外的包括Gmail、 Yahoo等。這些都是面向公眾的,而且大部分免費提供的。大多數的企業,也都具有自己的企業郵件服務器,提供內部使用,或者日常工作中對外使用。
電子郵件服務器的主要功能:
1)接受用戶投遞過來的郵件
2)將用戶投遞過來的郵件轉發給目標郵件服務器
3)接受其他郵件服務器轉發過來的點郵件,并存入到為其管理者所分配的空間中
4)為前來查收/讀取郵件的用戶提供服務(當然還包含刪除。移動等等操作)
如圖所示:
1.用戶Dylan寫好一封郵件,交給了Sina的郵件服務器。完成第一步操作,這使用的就是SMTP協議。用戶提交,服務器接受,使用的都是SMTP協議。
2.Sina的郵件服務器收到Dylan的郵件后,根據地址信息,又轉發給了QQ的郵件服務器,這兩臺郵件服務器的收發,使用的都是SMTP協議。
3.有人用QQ郵箱,發送了一封Email給Dylan。所以,QQ的郵件服務器,將郵件發送給Sina的郵件服務器。這兩臺服務器的收發,使用的都是SMTP協議。
4.第四部比較特殊。是用戶Dylan先主動請求Sina的郵件服務器,要求取自己的郵件。服務器知道后,再將該用戶Dylan所管理的存儲空間中的郵件,返回出去給Dylan。請一定記住,是用戶先請求,而不是服務器先響應。這個過程中使用的POP3協議。
網上有些人解釋,說SMTP協議就是負責發郵件,POP3協議就是負責收郵件。其實這是不太正確的。多臺郵件服務器之間通信,收/發其實都是使用的SMTP協議。
而用戶必須主動請求郵件服務器,才能獲取到屬于用戶自己的郵件信息。這個過程中,才使用的是POP3。
其實可以把Internet上的“電子郵件服務器”,當作是一種“電子郵局”,或者直接理解為現實生活中的郵局。
1)用戶遞交包裹給深圳的郵局,深圳的郵局接受到包裹,再把包裹轉發給了武漢的郵局。這其實易經完成了一次郵寄過程,使用的都是SMTP協議。
2)而郵局通常不會主動送貨給用戶的,也不主動通知你(除了最近幾年流行的EMS外)。所以,用戶只能主動跑到郵局去,詢問郵局的工作人員。
如果郵局的人發現有屬于該用戶的包裹,會將包裹交給該用戶。這個過程就使用的是POP3協議。
請牢記,郵局不會像快遞那樣主動送貨的,必須是用戶主動去郵局詢問并取包裹。所謂協議,其實可以理解為一種規范,一種特定的“通話語言”。
前面說了這么通俗的例子,相信你已經了解了大致的流程,更重要的是,明白了SMTP/POP3這兩種協議。(當然,還有其他的協議,這里不做過多介紹)
友情提示:本文不打算講解如何配置一臺郵件服務器,因為這是網絡管理員/系統管理員應該掌握的內容。市面上的郵件服務器軟件繁多,在不同的服務器系統上也有多種實現。微軟的Exchange Server , Apache James 這些都是比較流行的。
電子郵件的傳輸過程,詳細信息如圖:
圖上已經標明得很清楚了,相信經過前面的介紹。大家都能夠理解整個交互過程了。
下面,我講用windows命令行的方式,來演示發送和接收/查看電子郵件
首先,登錄我的sina郵箱,準備發送一封郵件到我的QQ郵箱里面去。
運行“cmd”,打開Commond控制臺。(提醒大家一下,這不是DOS。我經常發現某些人把其稱為DOS,覺得很可笑。還有些培訓講師說這是DOS,誤人子弟)
使用telnet命令,輸入 telnet smtp.sina.com 25 回車
注釋:sina提供的SMTP服務器地址是 smtp.sina.com ,使用的端口號是SMTP協議默認端口號 25 (Gmail好像用的是465和587)
提示:部分用戶使用的windows 7的操作系統,可能會提示telnet命令不可用。請在控制面板,”打開/關閉功能“中安裝telnet客戶端,具體不解釋。如果有些朋友還沒有用過 telnet,那我也只能先吐血了。天朝程序員水平參差不齊,作為一個windows平臺上的開發人員,大部分的連個基本的Dos命令都不會。
有圖有真相,我在每行命令和輸入里,都加了詳細的注釋:
發送完成后,開始準備接受并查看郵件了
同理,telnet 到POP3服務器去
telnet pop.qq.com 110 騰訊的POP3服務器地址是pop.qq.com 使用的端口號也是默認的 110 (報警啊!)
有圖有真相:
好了,朋友們不妨試著用命令行的方式,去體驗電子郵件的過程,這能夠幫助你理解其中的原理。時間不早了,碼奴也要準備休息了。
改天將會向大家詳細講解,在.NET平臺中發送郵件的幾種情況和實現方式(包括:群發的命中問題、垃圾箱的問題、亂碼問題、html郵件、文本郵件、選.NET自帶 Or 使用郵件群發組件? 等等)。
原文鏈接:http://www.cnblogs.com/dinglang/archive/2012/06/07/2539118.html