使用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多进程通信Queue、Pipe、Value、Array实例
Nov 21 Python
Python cookbook(数据结构与算法)找到最大或最小的N个元素实现方法示例
Feb 13 Python
解决python3爬虫无法显示中文的问题
Apr 12 Python
Python设计模式之解释器模式原理与用法实例分析
Jan 10 Python
python五子棋游戏的设计与实现
Jun 18 Python
详解利用python+opencv识别图片中的圆形(霍夫变换)
Jul 01 Python
完美解决pycharm 不显示代码提示问题
Jun 02 Python
Python Scrapy图片爬取原理及代码实例
Jun 12 Python
python如何绘制疫情图
Sep 16 Python
Python3如何使用tabulate打印数据
Sep 25 Python
使用Python爬虫爬取小红书完完整整的全过程
Jan 19 Python
什么是Python装饰器?如何定义和使用?
Apr 11 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
PHP 面向对象详解
2012/09/13 PHP
PHP中常用的转义函数
2014/02/28 PHP
PHP实现递归目录的5种方法
2016/10/27 PHP
Laravel框架使用Seeder实现自动填充数据功能
2018/06/13 PHP
jquery ui对话框实例代码
2013/05/10 Javascript
javascript使用百度地图api和html5特性获取浏览器位置
2014/01/10 Javascript
jQuery中offset()方法用法实例
2015/01/16 Javascript
js控制输入框获得和失去焦点时状态显示的方法
2015/01/30 Javascript
Javascript 正则表达式实现为数字添加千位分隔符
2015/03/10 Javascript
JS回调函数简单用法示例
2017/02/09 Javascript
less简单入门(CSS 预处理语言)
2017/03/08 Javascript
Vue组件模板形式实现对象数组数据循环为树形结构(实例代码)
2017/07/31 Javascript
详解extract-text-webpack-plugin 的使用及安装
2018/06/12 Javascript
JS加密插件CryptoJS实现AES加密操作示例
2018/08/16 Javascript
vue使用原生js实现滚动页面跟踪导航高亮的示例代码
2018/10/25 Javascript
Vue利用History记录上一页面的数据方法实例
2018/11/02 Javascript
node实现生成带参数的小程序二维码并保存到本地功能示例
2018/12/05 Javascript
JS实现checkbox互斥(单选)功能示例
2019/05/04 Javascript
[23:18]Spirit vs Liquid Supermajor小组赛A组 BO3 第二场 6.2
2018/06/03 DOTA
Python自定义类的数组排序实现代码
2016/08/28 Python
Python实现动态图解析、合成与倒放
2018/01/18 Python
在python中安装basemap的教程
2018/09/20 Python
Python换行与不换行的输出实例
2020/02/19 Python
Python通过yagmail实现发送邮件代码解析
2020/10/27 Python
HTML5去掉输入框type为number时的上下箭头的实现方法
2020/01/03 HTML / CSS
使用HTML5做的导航条详细步骤
2020/10/19 HTML / CSS
司法所长先进事迹
2014/06/02 职场文书
运动会入场口号
2014/06/07 职场文书
应急管理培训方案
2014/06/12 职场文书
英语专业求职信
2014/07/08 职场文书
2014县委书记四风对照检查材料思想汇报
2014/09/21 职场文书
先进个人事迹材料范文
2014/12/30 职场文书
微观世界观后感
2015/06/10 职场文书
2016入党积极分子党课学习心得体会
2015/10/09 职场文书
javascript数组includes、reduce的基本使用
2021/07/02 Javascript
python中if和elif的区别介绍
2021/11/07 Python