一、代码

# 输入邮件地址, 口令和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()

python实现收邮件判断模块poplib,email的更多相关文章

  1. python之模块poplib之常见用法

    # -*- coding: cp936 -*- #python 27 #xiaodeng #python之模块poplib之常见用法 ''' 所以,收取邮件分两步: 第一步:用poplib把邮件的原始 ...

  2. Python使用SMTP模块、email模块发送邮件

    一.smtplib模块: 主要通过SMTP类与邮件系统进行交互.使用方法如下: 1.实例化一个SMTP对象: s = smtplib.SMTP(邮件服务地址,端口号) s = smtplib.SMTP ...

  3. Python自动发邮件——smtplib和email库和yagmail库

    ''' 一.先导入smtplib模块 导入MIMEText库用来做纯文本的邮件模板 二.发邮件几个相关的参数,每个邮箱的发件服务器不一样,以163为例子百度搜索服务器是 smtp.163.com 三. ...

  4. Python通过yagmail和smtplib模块发送简单邮件

    SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件.HTML邮件以及带附件的邮件.python发邮件需要掌握两个模块的用法,smtplib和email,这俩模块是pytho ...

  5. 使用Python内置的smtplib包和email包来实现邮件的构造和发送。

    此文章github地址:https://github.com/GhostCNZ/Python_sendEmail Python_sendEmail 使用Python内置的smtplib包和email包 ...

  6. python发送各类邮件的主要方法

    更多详见: http://www.w3cschool.cc/python/python-email.html python中email模块使得处理邮件变得比较简单,今天着重学习了一下发送邮件的具体做法 ...

  7. 九、Python发送QQ邮件(SMTP)

    看了廖雪峰老师的教程: 一封电子邮件的旅程就是 发件人 -> MUA -> MTA -> MTA -> 若干个MTA -> MDA <- MUA <- 收件人 ...

  8. Python之日志处理 logging模块

    Python之日志处理(logging模块)   本节内容 日志相关概念 logging模块简介 使用logging提供的模块级别的函数记录日志 logging模块日志流处理流程 使用logging四 ...

  9. Python 【收发邮件】

    发邮件 smtplib模块主要负责发送邮件 email模块主要负责构造邮件.这两个都是Python内置模块 smtplib.SMTP.方法 #按住Ctrl键并点击SMTP ,会看到对SMTP的解释(v ...

随机推荐

  1. 如果全球的沙子都对你发起DDoS攻击,如何破?

    IPv6已来 2016年6月1日开始,苹果规定所有提交至AppStore的应用必须兼容IPv6-only标准.可以预计,2018年底会有大量互联网资源.上网用户使用IPv6协议.这意味着,如果一个互联 ...

  2. jekins—持续集成

    json转换为Python的字典形式 Martin fowler:通过自动化的构建,编译-发布-自动化测试,尽早的发现集成的错误 持续集成的要素: 统一的代码库 自动构建编译 自动测试(单元测试) 每 ...

  3. 向上转型---父类引用指向子类对象 A a = New B()的使用

    一.向上转型 向上转型是JAVA中的一种调用方式,是多态的一种表现.向上转型并非是将B自动向上转型为A的对象,相反它是从另一种角度去理解向上两字的:它是对A的对象的方法的扩充,即A的对象可访问B从A中 ...

  4. PostgreSQL9.6的新特性并行查询

    PostgreSQL在2016年9月发布了9.6版本,在该版本中新增了并行计算功能,目前PG支持的并行查询主要是顺序扫描(Sequencial Scans),并且支持部分链接查询(join)和聚合(a ...

  5. 能打开电脑都看懂的系列之Windows下修改MongoDB用户密码

    起因 还能怎么滴,我忘了MongoDB的密码呗. 操作 进入MongoDB的安装目录的bin目录下,(我的目录是D:\developer\MongoDB\Server\4.2\bin): 用记事本打开 ...

  6. jQuery.Deferred exception: a.indexOf is not a function TypeError: a.indexOf is not a function

    jq版本问题 3.2换成1.9就可以了

  7. Java继承和构造函数

    构造函数不是类的成员,它们不是由子类继承的.它们用于初始化实例变量. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 class CSuper {   public ...

  8. spark sql数据源--hive

    使用的是idea编辑器 spark sql从hive中读取数据的步骤:1.引入hive的jar包 2.将hive-site.xml放到resource下 3.spark sql声明对hive的支持 案 ...

  9. ArangoDB 的graph查询

    一个graph包含vertices 和edges.edges被存储在edges document当中.vertices可以是document collection 中的document也可以是edge ...

  10. elasticsearch-6.0.1安装

    elasticsearch-6.0.1安装 0. 介绍:     ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎:是目前全文搜索引擎的首选. ...