丨網(wǎng)絡(luò)和郵件庫定時收發(fā)減少手動操作_第1頁
丨網(wǎng)絡(luò)和郵件庫定時收發(fā)減少手動操作_第2頁
丨網(wǎng)絡(luò)和郵件庫定時收發(fā)減少手動操作_第3頁
丨網(wǎng)絡(luò)和郵件庫定時收發(fā)減少手動操作_第4頁
丨網(wǎng)絡(luò)和郵件庫定時收發(fā)減少手動操作_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

還有在發(fā)送郵件的場景中,如果你發(fā)現(xiàn)周報、月報等郵件模版是可以通用的,那你可以利用Pyhon的字符串編寫來實現(xiàn)郵件內(nèi)容的自動替換功能,讓你在使用郵件發(fā)送周報、月報工作約大量的時間。那么今天我就教你如何使用Python的yagmail、imaplib兩個庫,分別實現(xiàn)郵件的自動我們先從如何自動收郵件開始學(xué)習(xí)。今天的案例是這樣的:我希望能每隔檢查一次收件箱,判斷收件箱中是否有30天內(nèi)未讀的郵件。并利用正則表達式根據(jù)郵件判斷其中是否包含“故障”這一關(guān)鍵字。如果包含的話,就通過釘釘?shù)燃磿r通訊工具通知到我,實現(xiàn)高優(yōu)先級郵件處理的功能。要想利用Python的正則表達式判斷郵件是否出現(xiàn)了“故障”關(guān)鍵字,你必須要讓Python實現(xiàn)郵件接收和功能。在Python中,pplb和imaplb庫都支持郵件的接收協(xié)議,可以讓我們登陸服務(wù)器接收郵件,從而實現(xiàn)郵件接收和。那這兩個庫該選擇哪一個呢?imalib庫支持IMAP協(xié)議,而polib庫支持POP3協(xié)議,IMAP協(xié)議在支持雙向操作的功能上更加強大,并且能把客戶端對郵件的刪除等操作同步到服務(wù)端,也能把服務(wù)端對郵件刪除的操作同步到客戶端。與POP3協(xié)議只能把服務(wù)端的操作單向同步給客戶端相比,會更加靈活。所以我在本講中,就以imalib庫為例,為你講解通過IMAP協(xié)議進行郵件的自動接收。我們在確定采用IMAP協(xié)議接收郵件之后,接下來就要按照IMAP協(xié)議的要求,編寫一個從郵件服務(wù)器郵件并分析郵件的代碼。獲取郵件的代碼分為三個主要步驟,分別是指定郵件服務(wù)器的MAP地址和端口、驗證用戶名和的正確性以及郵件到本地并解析郵件得到郵件。我們依次來學(xué)下。第一步是指定郵件服務(wù)器的IMAP地址和端口。大部分對郵件安全比較重視的公司,為了防止發(fā)現(xiàn)郵件服務(wù)器用戶的弱口令,默認是將IMAP服務(wù)的功能關(guān)閉的。你IMAP我以QQ郵箱為例,打開IMAP服務(wù)的方法是在QQ郵箱的網(wǎng)頁端登陸成功后,通過設(shè)置-賬號-IMAP服務(wù),打開IMAP/SMTP服務(wù)。打開功能后,可以參考文檔將IMAP服務(wù)器的地址指定為:“ ”,“使用SSL”保證數(shù)據(jù)傳輸過程的安全,并將連接IMAP服務(wù)器的端口指定為“993”。打開IMAP服務(wù)的截圖和文檔的第二步是使用用戶名登錄。當服務(wù)器允許你從使用IMAP協(xié)議登陸服務(wù)器接收郵件后,就可以使用Python的imaplib庫進行連接和登陸了。imaplib庫是Python的內(nèi)置庫,連接服務(wù)器可以使用IMAP4_SSL1234importconn=",port=在這段代碼中的第三行,你需要把“username和password碼,替換之后才能正常登陸。如果登陸成功,可以通過list函數(shù)查看郵箱中默認包含了哪些文件夾,默認的郵件都被放在“INBX”文件夾中,而“IBOX”就是我們經(jīng)常使用的收件箱。箱中的郵件進行查詢,只能得到未讀郵件的唯一ID,我們稱它為“郵件ID”,你需要IMAP的fetch()命令將郵件ID對應(yīng)的郵件內(nèi)容本地后,才能進行,后才能你還要注意的是,通過郵件ID的郵件內(nèi)容需要兩次,才能看到郵件的。這是因為每一封郵件都采用了郵件的標準編碼方式MIME編碼,MIME編碼可以讓郵件在服務(wù)器和客戶端直接實現(xiàn)正常的傳輸,但是你無法查看使用了MIME編碼之后的郵件內(nèi)容,因此需要先對郵件的MIME編碼進行。而第二次呢,是把MIME編碼的郵件后的內(nèi)容,轉(zhuǎn)換成符合你當前操作系統(tǒng)的編總結(jié)來說,在Windows中,默認的編碼為“GBK”編碼,mac為“UTF-8”編碼。你需要把內(nèi)容按照Python所在的操作系統(tǒng)再一次,這樣才能得到正確的郵件標題,之后雖然獲得郵件的的步驟比較繁瑣,無法得到郵件,不過你不用擔心,因為每個處理步驟中只需要使用一個函數(shù)就可以搞定了。那么接下來我先把從進入收件箱到取得的完整執(zhí)行過程的代碼提供給你,然后再為你具體講解每個函數(shù)的作用。代代123456789#默認為#搜索郵件,ALL為全部,可以按照發(fā)件人使用FROM_,data=conn.search(None,formailidindata[0].decode().split():#取回每一封未讀郵件的內(nèi)容#data=[b'1234_maildataconn.fetch(str(mailid)'(RFC822)')#對每一封郵件的內(nèi)容進行解析msg#subject_tmp=#sj_decodesubject=sj_decode.decode('utf-我來為你依次解釋一下imaplib是如何郵件并得到郵件的首先,我們需要從收件箱中找到30天內(nèi)未讀的郵件ID,通過郵件的ID才能從IMAP服我在代碼第4行,使用了select()函數(shù),指定要的文件夾為收件箱“INBOX”;再利用第6行的search()函數(shù)的“unseen”參數(shù),來取得30天內(nèi)未讀的郵件。這里的“INBOX和unseen”都是IMAP協(xié)議定義的關(guān)鍵字,Python會將它們轉(zhuǎn)譯為IMAP的語法,并發(fā)送給服務(wù)器,而服務(wù)器則會把30天以內(nèi)未讀郵件的ID以列表形式返回,并把ID以字節(jié)方式存放在data列表的第一個元素中,data列表的具體格式,你可以參考第10行注釋。接下來,我們需要根據(jù)每個郵件ID得到郵件的。由于郵件ID為字節(jié)類型,因此我將它轉(zhuǎn)換為列表之后,使用for循環(huán)進行遍歷,把每個郵件ID用mailid變量進行了保存。同時,我在第11行通過fetch()函數(shù),使用郵件ID向服務(wù)器發(fā)起請求,得到該郵件的所fetch()函數(shù)取得了郵件的內(nèi)容后,如果使用print()進行輸出,會發(fā)現(xiàn)你無法看到郵件里原因就在于郵件采用的是MIME類型,這種類型是郵件的標準格式,需要專門的工具進行內(nèi)容的解析。就像你無法通過記事本查看一張一樣,通過記事本只能看到中的數(shù)據(jù),無法得知上面的顏色和內(nèi)容。因此我需要再使用一個標準庫 message_from_string()方法,對MIME類型進行解析。解析之后,你就能夠得到、內(nèi)容、附件等郵件的不同部分了,由于我在當前案例需要提取郵件的,所以使用第15行的get()函數(shù)通過參數(shù)“subject”取得了當前郵件的頭部信息,并利用decode_header()取得了郵件的。為了能夠在Mac系統(tǒng)上也可以進行處理,我將采用“utf-8”編碼進行后,就能夠正常顯示漢字了。如果你想要判斷該是否包含“故障”關(guān)鍵字,可以使用我們多次使用到的正則表達式,使用re.search('故障',subject)進行正則匹配,并且你還可以增加在學(xué)習(xí)了自動接收郵件并對進行判斷的功能之后,還有兩點需要你注意,這也是初次使用imaplib庫的同學(xué)最容易犯的兩個錯。第一個是如果你沒有將在IMAP服務(wù)器上的郵件標記為已讀,會導(dǎo)致自動接收郵件程序重復(fù)處理該郵件。由于fech)函數(shù)的功能是從服務(wù)器郵件內(nèi)容,并對郵件進行自動化處理,所以服務(wù)器上的郵件狀態(tài)仍然為“未讀”狀態(tài)。這會導(dǎo)致你的程序陷入死循環(huán),對匹配的進行無限重復(fù)的處理。'+FLAGS','\seenmailid另一個經(jīng)常出現(xiàn)的問題是,當你的所有郵件都為已讀狀態(tài)時,應(yīng)當在遍歷郵件ID功能前增加對data變量的判斷,避免向服務(wù)器提交空ID,導(dǎo)致運行到fetch()函數(shù)時,服務(wù)器接收空ID報錯。dataifNone”,如果為None,則本次執(zhí)行到此結(jié)束。如果有未讀郵件,則再將郵件ID通過fetch()提交到服務(wù)送郵件采用了SMTP協(xié)議,而且也需要指定服務(wù)器地址、用戶名、以及收件人、主SMTP一步,我們需要采用和imaplib不同的包實現(xiàn)。在標準庫中發(fā)送郵件的包叫做smtplib,由于smtplib需要配置較多的通用參數(shù),所以還有一個對它進行了更高級的封裝的第庫yagmail庫。yagmail庫將大部分的默認參數(shù)在底層實現(xiàn)了,發(fā)送郵件時,你只需要關(guān)注必須填寫的服務(wù)器IP、用戶驗證以及郵件的內(nèi)yagmail第庫的安裝包和它同名,那么你可以使用pip命令直接安裝,安裝成功后把它導(dǎo)入并連接服務(wù)器即可。連接SMTP服務(wù)器的代碼如下:conn= )8yagmail庫使用SMTP()函數(shù)與服務(wù)器建立連接,并在連接時指定用戶名、、主機地這里需要注意的是,SMTP()函數(shù)通過默認參數(shù)“smtp_ssl=True”使用了SSL協(xié)議,如果你所使用的郵件服務(wù)器采用了不同版本的SSL傳輸加密協(xié)議,你需要先將默認端口從465587。如果沒有提示連接異常,表明建立連接是成功的,接下來就可以為這封郵f-string字符串的形式來存放郵件的內(nèi)容。例如你f-stringf-string代代content="內(nèi)容填充body=f"模版當你編寫好郵件的正文后,需要使用send()函數(shù)來發(fā)送郵件。send()函數(shù)一般會使用四個參數(shù),按照參數(shù)定義的順序,它們分別是收件人郵箱、、郵件正文和附件。我將這四個部分依次作為send()函數(shù)的參數(shù)后,就可以將郵件發(fā)送到SMTP服務(wù)器了。這里我有一個小的建議,我會建議你先把郵件發(fā)給自己,如果出現(xiàn)發(fā)送失敗,或發(fā)送內(nèi)容與自己期望不符時,更方便對內(nèi)容進行調(diào)整。我把發(fā)送命令和發(fā)送成功后的截圖貼在下面,供你參考。1", ",body, ","",body,這就是利用yagmail實現(xiàn)自動發(fā)送郵件的完整過程,掌握之后,你可以把上節(jié)課學(xué)習(xí)的定時任務(wù),以及自動生成圖形的matplotlib庫結(jié)合起來使用,將發(fā)送郵件功能定義為一個函最后,我來為你總結(jié)一下這一講的主要內(nèi)容。在本講,我使用了yagmail庫、imaplib庫 庫實現(xiàn)了郵件自動收發(fā)的功能。與Foxmail和Outlook比起來,使用Python實現(xiàn)的郵件客戶端,能夠在收取郵件后對等元素自行判斷,并與正則表達式、IM通知yagmailCeleryIMAP如果郵件接收或發(fā)送是你自動化工作中主要優(yōu)化的工具,那么我建議你用的時間來掌握IMAP與SMTP協(xié)議規(guī)范。當你掌握了IMAP協(xié)議能夠支持哪些操作以及不能支持哪些操作之后,才能更好地進行郵件API的學(xué)習(xí)。對于IMAP支持的功能,你可以參考文檔,找到函數(shù)及其參數(shù),對于最后的最后,除了、釘釘外,郵件可以說是我們職場中使用最廣泛的通訊工具了。并且也是我們工作中最正式的通訊工具。因此我建議你能夠多練習(xí)怎么通過Python更加熟按照慣例,我來為你留一道思考題,如果我希望每周六10點整,能夠自動的將C盤上的一個作為郵件的附件發(fā)送

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論