Email的歷史比Web還要久遠(yuǎn)盆昙,直到現(xiàn)在幽勒,Email也是互聯(lián)網(wǎng)上應(yīng)用非常廣泛的服務(wù)嗜侮。
幾乎所有的編程語言都支持發(fā)送和接收電子郵件炭分,但是赴肚,先等等,在我們開始編寫代碼之前炼团,有必要搞清楚電子郵件是如何在互聯(lián)網(wǎng)上運作的咪惠。
我們來看看傳統(tǒng)郵件是如何運作的击吱。假設(shè)你現(xiàn)在在北京,要給一個香港的朋友發(fā)一封信遥昧,怎么做呢覆醇?
首先你得寫好信朵纷,裝進信封,寫上地址永脓,貼上郵票袍辞,然后就近找個郵局,把信仍進去常摧。
信件會從就近的小郵局轉(zhuǎn)運到大郵局搅吁,再從大郵局往別的城市發(fā),比如先發(fā)到天津落午,再走海運到達(dá)香港谎懦,也可能走京九線到香港,但是你不用關(guān)心具體路線溃斋,你只需要知道一件事界拦,就是信件走得很慢,至少要幾天時間盐类。
信件到達(dá)香港的某個郵局寞奸,也不會直接送到朋友的家里,因為郵局的叔叔是很聰明的在跳,他怕你的朋友不在家枪萄,一趟一趟地白跑,所以猫妙,信件會投遞到你的朋友的郵箱里瓷翻,郵箱可能在公寓的一層,或者家門口割坠,直到你的朋友回家的時候檢查郵箱齐帚,發(fā)現(xiàn)信件后,就可以取到郵件了彼哼。
電子郵件的流程基本上也是按上面的方式運作的对妄,只不過速度不是按天算,而是按秒算敢朱。
現(xiàn)在我們回到電子郵件剪菱,假設(shè)我們自己的電子郵件地址是me@163.com,對方的電子郵件地址是friend@sina.com(注意地址都是虛構(gòu)的哈)拴签,現(xiàn)在我們用Outlook或者Foxmail之類的軟件寫好郵件孝常,填上對方的Email地址,點“發(fā)送”蚓哩,電子郵件就發(fā)出去了构灸。這些電子郵件軟件被稱為MUA:Mail User Agent——郵件用戶代理。Email從MUA發(fā)出去岸梨,不是直接到達(dá)對方電腦喜颁,而是發(fā)到MTA:Mail Transfer Agent——郵件傳輸代理稠氮,就是那些Email服務(wù)提供商,比如網(wǎng)易洛巢、新浪等等括袒。由于我們自己的電子郵件是163.com次兆,所以稿茉,Email首先被投遞到網(wǎng)易提供的MTA,再由網(wǎng)易的MTA發(fā)到對方服務(wù)商芥炭,也就是新浪的MTA漓库。這個過程中間可能還會經(jīng)過別的MTA,但是我們不關(guān)心具體路線园蝠,我們只關(guān)心速度渺蒿。Email到達(dá)新浪的MTA后,由于對方使用的是@sina.com的郵箱彪薛,因此茂装,新浪的MTA會把Email投遞到郵件的最終目的地MDA:Mail Delivery Agent——郵件投遞代理。Email到達(dá)MDA后善延,就靜靜地躺在新浪的某個服務(wù)器上少态,存放在某個文件或特殊的數(shù)據(jù)庫里,我們將這個長期保存郵件的地方稱之為電子郵箱易遣。
同普通郵件類似彼妻,Email不會直接到達(dá)對方的電腦,因為對方電腦不一定開機豆茫,開機也不一定聯(lián)網(wǎng)侨歉。對方要取到郵件,必須通過MUA從MDA上把郵件取到自己的電腦上揩魂。
所以幽邓,一封電子郵件的旅程就是:
發(fā)件人 -> MUA -> MTA -> MTA -> 若干個MTA -> MDA <- MUA <- 收件人
有了上述基本概念,要編寫程序來發(fā)送和接收郵件火脉,本質(zhì)上就是:
編寫MUA把郵件發(fā)到MTA牵舵;
編寫MUA從MDA上收郵件。
發(fā)郵件時忘分,MUA和MTA使用的協(xié)議就是SMTP:Simple Mail Transfer Protocol棋枕,后面的MTA到另一個MTA也是用SMTP協(xié)議。
收郵件時妒峦,MUA和MDA使用的協(xié)議有兩種:POP:Post Office Protocol重斑,目前版本是3,俗稱POP3肯骇;IMAP:Internet Message Access Protocol窥浪,目前版本是4祖很,優(yōu)點是不但能取郵件,還可以直接操作MDA上存儲的郵件漾脂,比如從收件箱移到垃圾箱假颇,等等。
郵件客戶端軟件在發(fā)郵件時骨稿,會讓你先配置SMTP服務(wù)器笨鸡,也就是你要發(fā)到哪個MTA上。假設(shè)你正在使用163的郵箱坦冠,你就不能直接發(fā)到新浪的MTA上形耗,因為它只服務(wù)新浪的用戶,所以辙浑,你得填163提供的SMTP服務(wù)器地址:smtp.163.com
激涤,為了證明你是163的用戶,SMTP服務(wù)器還要求你填寫郵箱地址和郵箱口令判呕,這樣倦踢,MUA才能正常地把Email通過SMTP協(xié)議發(fā)送到MTA。
類似的侠草,從MDA收郵件時辱挥,MDA服務(wù)器也要求驗證你的郵箱口令,確保不會有人冒充你收取你的郵件梦抢,所以般贼,Outlook之類的郵件客戶端會要求你填寫POP3或IMAP服務(wù)器地址、郵箱地址和口令奥吩,這樣哼蛆,MUA才能順利地通過POP或IMAP協(xié)議從MDA取到郵件。
在使用Python收發(fā)郵件前霞赫,請先準(zhǔn)備好至少兩個電子郵件xxx@163.com腮介,xxx@sina.com,xxx@qq.com等端衰,注意兩個郵箱不要用同一家郵件服務(wù)商叠洗。
最后特別注意,目前大多數(shù)郵件服務(wù)商都需要手動打開SMTP發(fā)信和POP收信的功能旅东,否則只允許在網(wǎng)頁登錄