python實現收郵件判斷模塊poplib,email


一、代碼

# 輸入郵件地址, 口令和POP3服務器地址:
import datetime
import email
import poplib
import email.policy
from email.parser import Parser
flag=False

emailaddress = '******'
# 注意使用開通POP,SMTP等的授權碼
password = '*******'
pop3_server = '*******'

# 連接到POP3服務器:
server = poplib.POP3(pop3_server)
# 可以打開或關閉調試信息:
# server.set_debuglevel(1)
# POP3服務器的歡迎文字:
print(server.getwelcome())

# 身份認證:
server.user(self.emailaddress)
server.pass_(self.password)

# stat()返回郵件數量和占用空間:
messagesCount, messagesSize = server.stat()
print('messagesCount:', messagesCount)
print('messagesSize:', messagesSize)
# list()返回所有郵件的編號:
resp, mails, octets = server.list()
print("resp:", resp)
print("mails:", mails)
print("octets:", octets)

length = len(mails)

print(length)

for i in range(length):
    i=length-i
    resp, lines, octets = server.retr(i)
    msg_content=b'\r\n'.join(lines)
    msg = email.parser.BytesParser(policy=email.policy.default).parsebytes(msg_content)
    print('發件人', msg['from'])
    print('收件人', msg['to'])
    print('主題', msg['subject'])
    print('第一個收件人用戶名', msg['to'].addresses[0].username)
    print('第一個發件人用戶名', msg['from'].addresses[0].username)
    theme= msg['subject']
    email_content=[part.get_content() for part in msg.walk() if part.get_content_maintype() == 'text'][0]
    if theme=="啟動查庫任務分派機器人" and email_content==datetime.datetime.now().strftime("%Y%m%d"):
        flag=True
        break

server.quit()
print(flag)

二、解決編碼問題

import chardet

#繼承重寫解析類
class BytesParser_new(email.parser.BytesParser):
    def parsebytes(self, text, headersonly=False):
        import chardet
        encoding=chardet.detect(text).get("encoding")
        text = text.decode(encoding, errors='surrogateescape')
        return self.parser.parsestr(text, headersonly)

msg = BytesParser_new(policy=email.policy.default).parsebytes(msg_content)

三、代碼封裝

import email
import poplib
import email.policy


class ReadEmail(object):
    def __init__(self, emailaddress, password, pop3_server):
        self.emailaddress = emailaddress
        self.password = password
        self.pop3_server = pop3_server
        self.server = poplib.POP3(pop3_server)

    def login(self):
        # 可以打開或關閉調試信息:
        self.server.set_debuglevel(1)
        # POP3服務器的歡迎文字:
        print(self.server.getwelcome())
        # 身份認證:
        self.server.user(emailaddress)
        self.server.pass_(password)

    def read(self):
self.login()
# stat()返回郵件數量和占用空間: messagesCount, messagesSize = self.server.stat() print('messagesCount:', messagesCount) print('messagesSize:', messagesSize) # list()返回所有郵件的編號: resp, mails, octets = self.server.list() print("resp:", resp) print("mails:", mails) print("octets:", octets) length = len(mails) print(length) for i in range(1, length): resp, lines, octets = self.server.retr(i) msg_content = b'\r\n'.join(lines) msg = email.parser.BytesParser(policy=email.policy.default).parsebytes(msg_content) # print('發件人', msg['from']) # print('收件人', msg['to']) print('主題', msg['subject']) # print('第一個收件人用戶名', msg['to'].addresses[0].username) # print('第一個發件人用戶名', msg['from'].addresses[0].username) theme = msg['subject'] email_content = [part.get_content() for part in msg.walk() if part.get_content_maintype() == 'text'][0] if theme == "系統退信/The email is returned": self.server.dele(i) print("刪除郵件成功:", msg['subject']) self.server.quit() if __name__ == '__main__': emailaddress = '********' # 注意使用開通POP,SMTP等的授權碼 password = '********' pop3_server = 'imap.qq.com' rm=ReadEmail(emailaddress,password ,pop3_server ) rm.read()

四、github最新smtplib代碼

進一步對發送模塊smtplib進行了封裝,歡迎大家提意見

https://github.com/fengfumin/EasyMail

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM