#郵件數量太多,執行緩慢,因此只讀取最近的郵件
#!/usr/bin/python
# -*- coding: utf-8 -*-
# 檔名:read_email.py
from email.parser import parser
import poplib
from bs4 import beautifulsoup
from email.header import decode_header
# 郵件的subject或者email中包含的名字都是經過編碼後的str,要正常顯示,就必須decode
def decode_str(s):
value, charset = decode_header(s)[0]
# decode_header()返回乙個list,因為像cc、bcc這樣的字段可能包含多個郵件位址,所以解析出來的會有多個元素。上面的**我們偷了個懶,只取了第乙個元素。
if charset:
value = value.decode(charset)
return value
def print_info(msg,indent=0):
if indent ==0:
for header in ["from","to","subject","name"]:
value = msg.get(header,"")
if value:
if header == "subject":
value = decode_str(value)
if value == "郵件主題名" :#取18封郵件中需要的郵件
for par in msg.walk():
if not par.is_multipart(): # 這裡要判斷是否是multipart,是的話,裡面的資料是無用的,至於為什麼可以了解mime相關知識。
content_type = par.get_content_type()
if content_type == 'text/plain' or content_type == 'text/html':
content = par.get_payload(decode=true)
return htmlparse(content)
def getmail(host,user,passwd,port=110):
p = poplib.pop3(host,port)
try:
p.user(user)
p.pass_(passwd)
except (poplib.error_proto,e):
print ("login failed:",e)
sys.exit(1)
# 獲取伺服器上信件資訊,返回是乙個列表,第一項是一共有多上封郵件,第二項是共有多少位元組
status = p.stat()
resp, mails, octets = p.list()
#可以檢視返回的列表類似[b'1 82923', b'2 2184', ...]
#print(mails)
#print(p.list())
for i in range(0,18): #取最近的18封郵件
# 獲取最新一封郵件, 注意索引號從1開始:
index = len(mails)-i
resp, lines, octets = p.retr(index)
#print(lines)
# lines儲存了郵件的原始文字的每一行,
# 可以獲得整個郵件的原始文字:
msg_content = b'\r\n'.join(lines).decode('utf-8')
# 稍後解析出郵件:
msg = parser().parsestr(msg_content)
param = print_info(msg)
if not param is none:
return(param)
p.quit()
if __name__ == '__main__':
host = "pop3.------.com" # "pop.mail_serv.com"
username = "[email protected]"
password = "----------"
getmail(host,user,passwd)
Python 讀取郵件
最近由於工作需要,對參會的代表發給我的姓名 公司 行程車次等資訊進行統計處理形成聯絡單,我的思路是 可以python利用pop協議自動收取郵件,numpy pandas對發來的資料進行處理並匯出至excel mysql資料庫。收取郵件就是編寫乙個mua作為客戶端,從mda把郵件獲取到使用者的電腦或者...
python 讀取檔案內容向多人發郵件
coding utf 8 import smtplib import email.charset chst email.charset.charset input charset utf 8 header裡分別定義發件人,收件人 收件人如果是多個,用list即可 以及郵件主題。header from...
Python讀取本地文件內容並傳送郵件
當需要將本地某個路徑下的文件內容讀取後並作為郵件正文傳送的時候可以參考該文,使用到的模組包括smtplib,email。usr bin env python3 coding utf 8 author tdcqma import smtplib,email chst email.charset.cha...