使用python获取邮箱邮件的设置方法


Posted in Python onSeptember 20, 2019

首先我们要在邮箱的设置中开通那个POP3

然后我们要导入这些包

import poplib
from datetime import datetime
import jieba
import re
from email.parser import Parser
from email.header import decode_header
from email.utils import parseaddr
from lxml import etree

然后进行链接

name_list = []
email = 'xxx@xx.com'
password = 'xxxxxx'
pop3_server = 'imap.exmail.qq.com'
# 连接到POP3服务器:
server = poplib.POP3(pop3_server)
# 可以打开或关闭调试信息:
server.set_debuglevel(1)
# 可选:打印POP3服务器的欢迎文字:
print(server.getwelcome().decode('utf-8'))
# 身份认证:
server.user(email)
server.pass_(password)
# stat()返回邮件数量和占用空间:
print('Messages: %s. Size: %s' % server.stat())
# list()返回所有邮件的编号:
resp, mails, octets = server.list()
# 可以查看返回的列表类似[b'1 82923', b'2 2184', ...]
print(mails)
# 获取最新一封邮件, 注意索引号从1开始:
index = len(mails)
print(index,'2222')
resp, lines, octets = server.retr(284)
# lines存储了邮件的原始文本的每一行,
# 可以获得整个邮件的原始文本:
msg_content = b'\r\n'.join(lines).decode('utf-8')
# 稍后解析出邮件:
msg = Parser().parsestr(msg_content)
# print(msg)
messageObject = Parser().parsestr(msg_content)
msgDate = messageObject["date"]
print(678,msgDate)
# 可以根据邮件索引号直接从服务器删除邮件:
# server.dele(index)
# 关闭连接:

这里的index是全部的邮件数量,server.retr(284),从最新的开始,retr里面传你要读取的第几个,

try:
  GMT_FORMAT = '%a, %d %b %Y %H:%M:%S +0800 (CST)'
  new_date = datetime.strptime(msgDate, GMT_FORMAT)
except:
  GMT_FORMAT = '%a, %d %b %Y %H:%M:%S +0800'
  new_date = datetime.strptime(msgDate, GMT_FORMAT)
name_list.append(str(new_date))
print(datetime.strptime(msgDate, GMT_FORMAT))

直接读取出来的时间是Tue, 17 Sep 2019 16:21:25 +0800(CST) 这种形式,这里是转为为2019-09-17 16:21:25这种亚子。哈哈

继续

def print_info(msg, indent=0):
  if indent == 0:
    for header in ['From', 'To', 'Subject']:
      value = msg.get(header, '')
      if value:
        if header == 'Subject':
          value = decode_str(value)
        else:
          hdr, addr = parseaddr(value)
          name = decode_str(hdr)
          value = u'%s <%s>' % (name, addr)
          print('7777',name)
      print('%s%s: %s' % (' ' * indent, header, value))
  if (msg.is_multipart()):
    parts = msg.get_payload()
    for n, part in enumerate(parts):
      print('%spart %s' % (' ' * indent, n))
      print('%s--------------------' % (' ' * indent))
      print_info(part, indent + 1)
  else:
    content_type = msg.get_content_type()
    if content_type == 'text/plain' or content_type == 'text/html':
      content = msg.get_payload(decode=True)
      charset = guess_charset(msg)
      if charset:
        content = content.decode(charset)
      print('%sText: %s' % (' ' * indent, content + '...'))
  else:
    print('%sAttachment: %s' % (' ' * indent, content_type))

这里就是读取邮件内容了

继续还有两个函数

def decode_str(s):
  value, charset = decode_header(s)[0]
  if charset:
    value = value.decode(charset)
  return value
def guess_charset(msg):
  charset = msg.get_charset()
  if charset is None:
    content_type = msg.get('Content-Type', '').lower()
    pos = content_type.find('charset=')
    if pos >= 0:
      charset = content_type[pos + 8:].strip()
  return charset
print_info(msg = msg)
print(name_list)
server.quit()

就这样了

总结

以上所述是小编给大家介绍的使用python获取邮箱邮件的设置方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
Python中的defaultdict模块和namedtuple模块的简单入门指南
Apr 01 Python
python实现linux下使用xcopy的方法
Jun 28 Python
详解python的ORM中Pony用法
Feb 09 Python
用python编写第一个IDA插件的实例
May 29 Python
django DRF图片路径问题的解决方法
Sep 10 Python
基于Python实现迪杰斯特拉和弗洛伊德算法
May 27 Python
简单了解Pandas缺失值处理方法
Nov 16 Python
Python API 操作Hadoop hdfs详解
Jun 06 Python
升级keras解决load_weights()中的未定义skip_mismatch关键字问题
Jun 12 Python
sklearn的predict_proba使用说明
Jun 28 Python
pandas.DataFrame.drop_duplicates 用法介绍
Jul 06 Python
用 Python 元类的特性实现 ORM 框架
May 19 Python
Python中的上下文管理器相关知识详解
Sep 19 #Python
Python Opencv提取图片中某种颜色组成的图形的方法
Sep 19 #Python
pandas read_excel()和to_excel()函数解析
Sep 19 #Python
python openvc 裁剪、剪切图片 提取图片的行和列
Sep 19 #Python
vscode 配置 python3开发环境的方法
Sep 19 #Python
python实现简易学生信息管理系统
Apr 05 #Python
Python字符串大小写转换拼接删除空白
Sep 19 #Python
You might like
建立文件交换功能的脚本(一)
2006/10/09 PHP
php引用地址改变变量值的问题
2012/03/23 PHP
本地计算机无法启动Apache故障处理
2014/08/08 PHP
PHP实时统计中文字数和区别
2019/02/28 PHP
js类中获取外部函数名的方法与代码
2007/09/12 Javascript
js 操作css实现代码
2009/06/11 Javascript
用javascript获取当页面上鼠标光标位置和触发事件的对象的代码
2009/12/09 Javascript
js获取url中&quot;?&quot;后面的字串方法
2014/05/15 Javascript
node.js中的http.response.writeHead方法使用说明
2014/12/14 Javascript
jQuery实现数字加减效果汇总
2014/12/16 Javascript
JavaScript之数组(Array)详解
2015/04/01 Javascript
javascript创建对象的几种模式介绍
2016/05/06 Javascript
js中通过getElementsByName访问name集合对象的方法
2016/10/31 Javascript
原生js实现新闻列表展开/收起全文功能
2017/01/20 Javascript
浅谈angular2 组件的生命周期钩子
2017/08/12 Javascript
ES6中数组array新增方法实例总结
2017/11/07 Javascript
Vue+jquery实现表格指定列的文字收缩的示例代码
2018/01/09 jQuery
搭建element-ui的Vue前端工程操作实例
2018/02/23 Javascript
webpack4+Vue搭建自己的Vue-cli项目过程分享
2018/08/29 Javascript
vue多层嵌套路由实例分析
2019/03/19 Javascript
小程序如何在不同设备上自适应生成海报的实现方法
2019/08/20 Javascript
Node.js使用MongoDB的ObjectId作为查询条件的方法
2019/09/10 Javascript
Python 'takes exactly 1 argument (2 given)' Python error
2016/12/13 Python
Python中序列的修改、散列与切片详解
2017/08/27 Python
Python 查看文件的编码格式方法
2017/12/21 Python
Python使用Dijkstra算法实现求解图中最短路径距离问题详解
2018/05/16 Python
浅谈Python中的可迭代对象、迭代器、For循环工作机制、生成器
2019/03/11 Python
Python正则表达式匹配和提取IP地址
2019/06/06 Python
解决Keras的自定义lambda层去reshape张量时model保存出错问题
2020/07/01 Python
Django通过设置CORS解决跨域问题
2020/11/26 Python
Django中使用Celery的方法步骤
2020/12/07 Python
基于Python实现天天酷跑功能
2021/01/06 Python
基于Python的接口自动化读写excel文件的方法
2021/01/15 Python
公务员政审个人鉴定
2014/02/25 职场文书
关于召开会议的通知
2015/04/15 职场文书
2015年大学生工作总结
2015/04/21 职场文书