python獲取郵件
1. python 收取郵件都是亂碼。
一般郵件在傳輸的時候都會被編碼,圖中的是base64編碼的特徵,這類編碼是可逆的,只需要進行base64解碼即可,python有個base64模塊,可以用來編碼和解碼。
2. python批量發送郵件--包括批量不同附件
小豬在公司做出納,乾的活卻包括了出納、會計、結算專員等工作,周末都要被無奈在家加班,主要還沒有加班費,簡直是被公司嚴重壓榨。每個月初都要給每個工長發預付款賬單郵件,月中發結算款賬單。重復性機械工作。
一個及格線上的程序員,最起碼的覺悟就是將重復性的機械工作自動化,於是,在我花了一個多小時,幫她給一部分工長發了一次郵箱後,默默的回來寫了這個腳本。
所以,設計要點就是一個字—— 懶 。
恩,就醬。
經過我觀察,郵件內容分為兩種,這里先說第一種,「結算款」:
(1) 郵件內容(content)不變,為固定的txt文本
(2) 附件(attch)為每個工長的結算賬單(excel文件.xlsx),此文件命名為總賬單中自動分割出來的名字(暫時不懂怎麼分割出來的=.=),格式為:
(3) 郵件主題(Subject)為附件名(不帶後綴名)
(4) 郵件接收對象(工長)的名單及其郵箱地址基本不變,偶爾變動
(5)
(1) 將工長及其郵箱地址存為CSV文件的兩列,python中將其讀取為字典形式,存儲以供後續查詢郵箱地址。
(2) 遍歷文件夾中的附件(.xlsx類型文件),對其進行兩種操作,一方面將其名字(不帶路徑和後綴)提取出來,作為郵件主題(Subject),並對Subject進一步劃分,得到其中的人名(工長);另一方面,將其傳入MIMEbase模塊中轉為郵件附件對象。
(3) 由上述得到的人名(name),在字典形式的通訊錄中,查找相應的地址(value),即為收件人名稱和地址
(4) 利用python中的email模塊和smtp模塊,登錄自己的郵箱賬號,再對每個附件,得到的收件人名和地址,添加附件,發送郵件。done
在設計過程中有幾點需要注意
(1) 有時一個郵件地址對應兩個人名,此時應該在CSV文件中分為兩行存儲,而不是將兩個人名存為同一個鍵;
(2)有賬單.xlsx文件,通訊錄里卻沒存儲此人記錄,程序應該列印提示沒有通訊記錄的人名,且不能直接退出,要保證員工看到此提示,此第一版程序還有解決此問題;
(3)此程序發送的郵件內容為純文本,若要求郵件內容有不同格式(如部分加粗,部分紅色),還有小部分需要每次更改的地方(如郵件內容包含當前月份),如何解決?(這就是第二種郵件內容,「預算款」);
(4)重名的,暫時還沒碰到,程序中也沒給出解決方案。
第一版到此,20180830,待更新
第二版更新,20180904
第三版更新,20180909
轉戰CSDN博客,更多博客見傳送門《 xiaozhou的博客主頁 》
3. 如何使用python電子郵件獲取解碼附件文件
import email.utils
msg = email.message_from_string(self.request.body)
部分配滲族在msg.walk()中:
ctype = part.get_content_type()
如喊核果['image / jpeg',培弊'image / png']中的ctype為
image_file = part.get_payload(decode = True)
image_file_name = part。 get_filename()
4. Python腳本也可以用來發送電子郵件
准備工作:安裝第三方包,yagmail和keyring
安裝完成後,打開命令提示符窗口(我用的是win)。輸入python回車,輸入import yagmail回車,輸入yagmail.register('你的郵箱地址','郵箱密碼或郵箱安全碼')回車。沒有報錯後,就可以開始編寫python腳本了。
直接上腳本:
import yagmail
smtp_server=yagmail.SMTP(user='[email protected]',host='smtp.qq.com')
#host 需要你到郵箱首頁幫助中心找一下,一般都是smtp.xxxx.com
contents=['郵件正文內容,可以逗號分開多寫幾行,也可以用轉行符號!']
smtp_server.send('[email protected]','郵件主題描述',contents)
# [email protected]收件郵箱地址,可以設置成一樣的,測試一下自己能收到不。
執行上面的腳本,基本上就可以收到郵件了。不要執行多次,太頻繁,容易被伺服器攔截,最後可能會被封號。
另外 contents 里可以寫html,也可以放附件,附件的話直接寫個本機文件路徑即可。
5. python 使用zmail收發電子郵件
1、發送郵件:
import zmail
server = zmail.server(' [email protected] 』, 'yourpassword')
server.send_mail(' [email protected] ',{'subject':'Hello!','content_text':'By zmail.'})
server.send_mail([' [email protected] ',' [email protected] '],{'subject':'Hello!','content_text':'By zmail.'})
2、接收最後一封郵件:
import zmail
server = zmail.server(' [email protected] 』, 'yourpassword')
latest_mail = server.get_latest()
zmail.show(latest_mail)
3、發送帶附件的郵件:
import zmail
mail = {
'subject': 'Success!', # Anything you want.
'content_text': 'This message from zmail!', # Anything you want.
'attachments': ['/Users/zyh/Documents/example.zip','/root/1.jpg'], # Absolute path will be better.
}
server = zmail.server(' [email protected] 』, 'yourpassword')
server.send_mail(' [email protected] ', mail)
server.send_mail([' [email protected] ',' [email protected] '], mail)
4、發送html格式郵件:
with open('/Users/example.html','r') as f:
content_html = f.read()
mail = {
'subject': 'Success!', # Anything you want.
'content_html': content_html,
'attachments': '/Users/zyh/Documents/example.zip', # Absolute path will be better.
}
server.send_mail(' [email protected] ',mail)
5、使用抄送:
server.send_mail([' [email protected] ',' [email protected] '],mail,cc=[' [email protected] '])
6、自定義server
server = zmail.server('username','password',smtp_host='smtp.163.com',smtp_port=994,smtp_ssl=True,pop_host='pop.163.com',pop_port=995,pop_tls=True)
7、根據ID取回郵件:mail = server.get_mail(2)
根據日期、主題、發送人取回郵件:
mail = server.get_mails(subject='GitHub',after='2018-1-1',sender='github')
mail = server.get_mails(subject='GitHub',start_time='2018-1-1',sender='github',start_index=1,end_index=10)
8、查看郵箱統計
mailbox_info = server.stat() #結果為包含兩個整型的元組: (郵件的數量, 郵箱的大小).
9、刪除郵件:MailServer.delete(which)
10、保存附件:zmail.save_attachment(mail,target_path=None,overwrite=False)
11、保存郵件:zmail.save(mail,name=None,target_path=None,overwrite=False)
12、讀取郵件:zmail.read(file_path,SEP=b'\r\n')
支持的列表:
6. python對outlook郵件讀取
鑒於周報都要讀取不同郵件內容,想定時運行便於操作。
一些相關性質記錄:
寫郵件:
尚存問題:
2.附件沒法直接讀取,要保存後再讀取,尚需探索。
7. python電子郵件系列(三)之POP接收郵件
由上篇文章我們已經得知郵件從發送到接收的過程:
發件人->MUA->MTA->若干MTA->MDA->MUA->收件人
本節接收郵件主要就是編寫一個 MUA 客戶端,從 MDA 將郵件取回本地。
收取郵件最常用的是 POP協議 ,目前版本是第三版,也稱 POP3 。python內置了 poplib 模塊,支持POP3協議。
回想上一節 SMTP ,我們對要發送的郵件內容進行了各種編碼,包括添加MIME header,編碼之後再進行發送。
因此,我們通過POP3協議接收的也不是原內容,而是經過一系列編碼等處理的文本。
所以,要想把POP3收取的文本變為可閱讀的郵件對象,就需要利用 email 模塊對原始郵件進行解析。
所以,郵件收取的流程就是:
由上一篇 文章 最後總結部分可知。郵件由字元到發送到網路經歷了如下的格式轉化:
純文本:
str->bytes->base64->str->bytes
二進制文件:
binary code->base64->str->bytes
我們解析郵件也是按這個思路,逆序解析出內容。
這里的 decode('utf-8') 先把位元組流轉化為字元串,再將字元串轉化為 message 結構的對象。這步與發送郵件的 as_string 函數相反。
先從上一節結構化的 msg 中取出信件頭,列印出來。
如果是 multipart 結構, get_payload 函數會返回一個包含不同part的list,然後對每一part遞歸調用 print_info ,列印子信件頭和子信件內容。
不是 multipart 時,之後再依據 Content-Type 作不同處理:
如果是 text :
利用 get_payload(decode = Ture) 取出子信件的內容, decode 為True,則按照 Content-Transfer-Type 將 base64 或 QP 解碼為 bytes 。
再 guess_charset 猜出編碼方式,之後將其解碼為字元顯示。
如果不是 Text 對象,則為附件:
列印出附件的 Content-Type 。
8. 如何用程序獲得電子郵箱[email protected]中的用戶名和域名Python
指導郵箱地址緩冊就可以指導用戶名和域名了,不用使用任何程序。
你的郵箱地址就是這個郵箱用陸侍戶名。
域名是@後面早哪吵的內容,這個郵箱就是163.com。
9. Python編寫一個程序 可以讀取郵件日誌(mbox.txt),統計每個郵件發出的郵件數量,並輸出結果。
由於工作需要在一大堆日誌裡面提取相應的一些固定字元,如果單純靠手工取提取,數據量大,勞心勞力,於是自然而然想到了用Python做一個對應的提取工具,代替手工提取的繁雜,涉及中文字元,正則表達式不好匹配,但不是不可以實現,這個以後優化時再說。
需求描述:
一個父目錄中存在多個子文件夾,子文件夾下有多個txt形式化的Log日誌,要求從所有地方Log日誌中找出CardType=9, CardNo=0時的CardID的值,並將其統計存儲到一個文本文件中,要求CardID不能夠重復。
需求解析:
首先獲取所有的Log日誌的全路徑,根據路徑分別載入到將各個Log日誌載入到內存中進行提取分析,並將結果存儲到給定的文本文件中。
解決方案:
為了盡可能的簡潔通用,這里使用配置文件作為輸入變數的依據。不多說,上代碼:
配置文件如下:
心得體會:
1、利用Python去處理一些日常的小任務,可以很方便的完成,相比較C/C++來說,這方面生產力高了不少。
2、本文設計對中文字元的處理,所以使用正則表達式不太怎麼方便,但不少不可以,後續版本中會添加對正則的支持!
3、由於初學中,所以代碼寫的不夠精煉簡潔,後續進行再優化!