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