Pytho学习笔记:电子邮件1
前言
最近在學(xué)習(xí)深度學(xué)習(xí),已經(jīng)跑出了幾個(gè)模型,但Pyhton的基礎(chǔ)不夠扎實(shí),因此,開始補(bǔ)習(xí)Python了,大家都推薦廖雪峰的課程,因此,開始了學(xué)習(xí),但光學(xué)有沒有用,還要和大家討論一下,因此,寫下這些帖子,廖雪峰的課程連接在這里:廖雪峰
Python的相關(guān)介紹,以及它的歷史故事和運(yùn)行機(jī)制,可以參見這篇:python介紹
Python的安裝可以參見這篇:Python安裝
Python的運(yùn)行模式以及輸入輸出可以參見這篇:Python IO
Python的基礎(chǔ)概念介紹,可以參見這篇:Python 基礎(chǔ)
Python字符串和編碼的介紹,可以參見這篇:Python字符串與編碼
Python基本數(shù)據(jù)結(jié)構(gòu):list和tuple介紹,可以參見這篇:Python list和tuple
Python控制語句介紹:ifelse,可以參見這篇:Python 條件判斷
Python控制語句介紹:循環(huán)實(shí)現(xiàn),可以參見這篇:Python循環(huán)語句
Python數(shù)據(jù)結(jié)構(gòu):dict和set介紹Python數(shù)據(jù)結(jié)構(gòu)dict和set
Python函數(shù)相關(guān):Python函數(shù)
Python高階特性:Python高級特性
Python高階函數(shù):Python高階函數(shù)
Python匿名函數(shù):Python匿名函數(shù)
Python裝飾器:Python裝飾器
Python偏函數(shù):Python偏函數(shù)
Python模塊:Python模塊
Python面向?qū)ο缶幊?#xff08;1):Python面向?qū)ο?
Python面向?qū)ο缶幊?#xff08;2):Python面向?qū)ο?#xff08;2)
Python面向?qū)ο缶幊?#xff08;3):Python面向?qū)ο?#xff08;3)
Python面向?qū)ο缶幊?#xff08;4):Pyhton面向?qū)ο?#xff08;4)
Python面向?qū)ο蟾呒壘幊?#xff08;上):Python面向?qū)ο蟾呒壘幊?#xff08;上)
Python面向?qū)ο蟾呒壘幊?#xff08;中上):Python面向?qū)ο蟾呒壘幊?#xff08;中上)
Python面向?qū)ο蟾呒壘幊?#xff08;中下):Python面向?qū)ο蟾呒壘幊?#xff08;中下)
Python面向?qū)ο蟾呒壘幊?#xff08;完):Python面向?qū)ο蟾呒壘幊?#xff08;完)
Python錯(cuò)誤調(diào)試(起):Python調(diào)試:起
Python錯(cuò)誤調(diào)試(承):Python調(diào)試:承
Python錯(cuò)誤調(diào)試(轉(zhuǎn)):Python調(diào)試:轉(zhuǎn)
Python錯(cuò)誤調(diào)試(合):python調(diào)試:合
Python文件IO編程:Python文件IO
Python文件IO編程2:Python文件IO2
Python文件IO編程3:PYthon文件IO3
Python進(jìn)程和線程(起):Python進(jìn)程和線程起
Python進(jìn)程和線程(承):Python進(jìn)程和線程承
Python進(jìn)程和線程(轉(zhuǎn)):Python進(jìn)程和線程轉(zhuǎn)
Python進(jìn)程和線程(合):Python進(jìn)程和線程合
Python正則表達(dá)式:Python正則表達(dá)式
Python學(xué)習(xí)筆記:常用內(nèi)建模塊1:Python學(xué)習(xí)筆記:常用內(nèi)建模塊1
Python學(xué)習(xí)筆記:常用內(nèi)建模塊2:Python學(xué)習(xí)筆記:常用內(nèi)建模塊2
Python學(xué)習(xí)筆記:常用內(nèi)建模塊3:Python學(xué)習(xí)筆記:常用內(nèi)建模塊3
Python學(xué)習(xí)筆記:常用內(nèi)建模塊4:Python學(xué)習(xí)筆記: 常用內(nèi)建模塊4
Python學(xué)習(xí)筆記:常用內(nèi)建模塊5:Python學(xué)習(xí)筆記: 常用內(nèi)建模塊5
Python學(xué)習(xí)筆記:常用內(nèi)建模塊6:Python學(xué)習(xí)筆記:常用內(nèi)建模塊6
Python學(xué)習(xí)筆記:第三方模塊1:Python常用第三方模塊
Python學(xué)習(xí)筆記:第三方模塊2:Python常用第三方模塊
Python學(xué)習(xí)筆記:第三方模塊3:Python常用第三方模塊
Pytho學(xué)習(xí)筆記:網(wǎng)絡(luò)編程:Python網(wǎng)絡(luò)編程
目錄
- 前言
- 目錄
- 電子郵件
電子郵件
Email的歷史比Web還要久遠(yuǎn),直到現(xiàn)在,Email也是互聯(lián)網(wǎng)上應(yīng)用非常廣泛的服務(wù)。
幾乎所有的編程語言都支持發(fā)送和接收電子郵件,但是,先等等,在我們開始編寫代碼之前,有必要搞清楚電子郵件是如何在互聯(lián)網(wǎng)上運(yùn)作的。
我們來看看傳統(tǒng)郵件是如何運(yùn)作的。假設(shè)你現(xiàn)在在北京,要給一個(gè)香港的朋友發(fā)一封信,怎么做呢?
首先你得寫好信,裝進(jìn)信封,寫上地址,貼上郵票,然后就近找個(gè)郵局,把信仍進(jìn)去。
信件會從就近的小郵局轉(zhuǎn)運(yùn)到大郵局,再從大郵局往別的城市發(fā),比如先發(fā)到天津,再走海運(yùn)到達(dá)香港,也可能走京九線到香港,但是你不用關(guān)心具體路線,你只需要知道一件事,就是信件走得很慢,至少要幾天時(shí)間。
信件到達(dá)香港的某個(gè)郵局,也不會直接送到朋友的家里,因?yàn)猷]局的叔叔是很聰明的,他怕你的朋友不在家,一趟一趟地白跑,所以,信件會投遞到你的朋友的郵箱里,郵箱可能在公寓的一層,或者家門口,直到你的朋友回家的時(shí)候檢查郵箱,發(fā)現(xiàn)信件后,就可以取到郵件了。
電子郵件的流程基本上也是按上面的方式運(yùn)作的,只不過速度不是按天算,而是按秒算。
現(xiàn)在我們回到電子郵件,假設(shè)我們自己的電子郵件地址是me@163.com,對方的電子郵件地址是friend@sina.com(注意地址都是虛構(gòu)的哈),現(xiàn)在我們用Outlook或者Foxmail之類的軟件寫好郵件,填上對方的Email地址,點(diǎn)“發(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。這個(gè)過程中間可能還會經(jīng)過別的MTA,但是我們不關(guān)心具體路線,我們只關(guān)心速度。
Email到達(dá)新浪的MTA后,由于對方使用的是@sina.com的郵箱,因此,新浪的MTA會把Email投遞到郵件的最終目的地MDA:Mail Delivery Agent——郵件投遞代理。Email到達(dá)MDA后,就靜靜地躺在新浪的某個(gè)服務(wù)器上,存放在某個(gè)文件或特殊的數(shù)據(jù)庫里,我們將這個(gè)長期保存郵件的地方稱之為電子郵箱。
同普通郵件類似,Email不會直接到達(dá)對方的電腦,因?yàn)閷Ψ诫娔X不一定開機(jī),開機(jī)也不一定聯(lián)網(wǎng)。對方要取到郵件,必須通過MUA從MDA上把郵件取到自己的電腦上。
所以,一封電子郵件的旅程就是:
發(fā)件人 -> MUA -> MTA -> MTA -> 若干個(gè)MTA -> MDA <- MUA <- 收件人
有了上述基本概念,要編寫程序來發(fā)送和接收郵件,本質(zhì)上就是:
編寫MUA把郵件發(fā)到MTA;編寫MUA從MDA上收郵件。發(fā)郵件時(shí),MUA和MTA使用的協(xié)議就是SMTP:Simple Mail Transfer Protocol,后面的MTA到另一個(gè)MTA也是用SMTP協(xié)議。
收郵件時(shí),MUA和MDA使用的協(xié)議有兩種:POP:Post Office Protocol,目前版本是3,俗稱POP3;IMAP:Internet Message Access Protocol,目前版本是4,優(yōu)點(diǎn)是不但能取郵件,還可以直接操作MDA上存儲的郵件,比如從收件箱移到垃圾箱,等等。
郵件客戶端軟件在發(fā)郵件時(shí),會讓你先配置SMTP服務(wù)器,也就是你要發(fā)到哪個(gè)MTA上。假設(shè)你正在使用163的郵箱,你就不能直接發(fā)到新浪的MTA上,因?yàn)樗环?wù)新浪的用戶,所以,你得填163提供的SMTP服務(wù)器地址:smtp.163.com,為了證明你是163的用戶,SMTP服務(wù)器還要求你填寫郵箱地址和郵箱口令,這樣,MUA才能正常地把Email通過SMTP協(xié)議發(fā)送到MTA。
類似的,從MDA收郵件時(shí),MDA服務(wù)器也要求驗(yàn)證你的郵箱口令,確保不會有人冒充你收取你的郵件,所以,Outlook之類的郵件客戶端會要求你填寫POP3或IMAP服務(wù)器地址、郵箱地址和口令,這樣,MUA才能順利地通過POP或IMAP協(xié)議從MDA取到郵件。
在使用Python收發(fā)郵件前,請先準(zhǔn)備好至少兩個(gè)電子郵件,如xxx@163.com,xxx@sina.com,xxx@qq.com等,注意兩個(gè)郵箱不要用同一家郵件服務(wù)商。
最后特別注意,目前大多數(shù)郵件服務(wù)商都需要手動打開SMTP發(fā)信和POP收信的功能,否則只允許在網(wǎng)頁登錄:
這個(gè)需要進(jìn)入網(wǎng)頁版郵箱,然后進(jìn)行設(shè)置。
總結(jié)
以上是生活随笔為你收集整理的Pytho学习笔记:电子邮件1的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 数据回传代码,安卓向.n
- 下一篇: Python学习笔记:SMTP服务器