Py-imaplib读取163邮箱
import os
import email
import imaplib
import quopri
import datetime
import requests
import json
import time
import hmac
import hashlib
import base64
import urllib.parse
from optparse import OptionParser
import re
def login(self):
imap_server = imaplib.IMAP4_SSL(self.host)
imap_server.login(self.account, self.password)
imaplib.Commands["ID"] = ('AUTH',)
args = ("name", self.account, "contact", self.account, "version", "1.0.0", "vendor", "myclient")
imap_server._simple_command("ID", str(args).replace(",", "").replace("\'", "\""))
return imap_server
- 通过select选中邮箱,注意如果仅读取邮件内容,不改变邮件未读属性,设置readonly=True。该属性默认为False,读取内容后会将邮件设置为已读。
self.imap_server.select(mailbox='INBOX', readonly=True)
- 通过search获取邮件ID列表,默认邮件接收时间排序是由远到近。
self.imap_server.search(None, message_type)
- 通过reversed倒排邮件ID循环fetch读取,获取的邮件内容需要处理,通过email获取邮件可读内容。
for message_index in reversed(items[0].split()):
msg_data = Message()
fetch_status, message = self.imap_server.fetch(message_index, "(RFC822)")
msg = email.message_from_bytes(message[0][1])
for part in msg.walk():
if not part.is_multipart():
content_type = part.get_content_type()
filename = part.get_filename()
if filename:
file_header = email.header.Header(filename)
decode_header = email.header.decode_header(file_header)
file_name = decode_header[0][0]
data = part.get_payload(decode=True)
try:
print('Attachment : ' + file_name)
if file_name:
save_file(file_name, data, save_path)
files.append(file_name)
except:
print(file_name)
else:
if content_type in ['text/plain']:
suffix = '.txt'
if content_type in ['text/html']:
suffix = '.htm'
if part.get_charsets() is None:
message_content = part.get_payload(decode=True)
else:
message_content = part.get_payload(decode=True).decode(part.get_charsets()[0])
import os
import email
import imaplib
import quopri
import datetime
import r