
imaplib
基礎(chǔ)概念
POP 和 IMAP
第一個用于下載郵件的協(xié)議稱為郵局協(xié)議(Post Office Protocal, POP),記錄在 RFC 918 中。郵局協(xié)議的目的是讓用戶的工作站可以訪問郵箱服務(wù)器里的郵件并可以通過簡單郵件傳輸協(xié)議(SMTP)將郵件發(fā)送到郵件服務(wù)器。POP協(xié)議的最新版本是第三版,也成為 POP3
在POP出現(xiàn)幾年之后有了一個與之競爭的協(xié)議,即因特網(wǎng)消息訪問協(xié)議(Internet Message Access Protocol, IMAP),它旨在提供比POP更完整的解決方案(各客戶端間的一致性)。當(dāng)前廣泛使用的版本為 IMAP4rev1。
郵箱配置
一般郵箱的設(shè)置里面都會有,打開IMAP
代碼
from email import header
import imaplib
import email
username = *
password = *
# 連接服務(wù)器
session = imaplib.IMAP4_SSL(host='imap.qq.com')
# 登陸
login_statue, login_message = session.login(username, password)
if login_statue != 'OK':
raise('Login Fail')
session.select('INBOX')
# QQ郵箱的search就是個坑,只有從所有的里面慢慢搜了
search_statue, uids = session.search(None, 'ALL')
if search_statue != 'OK':
raise('Search Fail')
list_uid = uids[0].split()
for uid in list_uid[::-1]:
fetch_statue, fetch_content = session.fetch(uid, '(RFC822)')
if fetch_statue != 'OK':
raise('Fecth content Fail')
msg = email.message_from_string(fetch_content[0][1])
subject, encoding = header.decode_header(msg['subject'])[0]
encoding = 'utf-8' if encoding is None else encoding
# 這里是我要用的名字,自行忽略
subject_content = subject.decode(encoding).strip().split()[-1]
if subject_content in names:
# 遍歷這個郵件
for part in msg.walk():
if part.get_content_maintype() == 'multipart':
continue
if part.get('Content-Disposition') is None:
continue
file_out = os.path.join(
dir_out, '{}.tar.gz'.format(subject_content))
with open(file_out, 'wb') as OUT:
print(part.get_payload(decode=True), end='', file=OUT)
session.close()
session.logout()