使用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 命令行非阻塞输入的小例子
Sep 27 Python
python数据结构之二叉树的建立实例
Apr 29 Python
Python中还原JavaScript的escape函数编码后字符串的方法
Aug 22 Python
Python中用Spark模块的使用教程
Apr 13 Python
详解用Python处理HTML转义字符的5种方式
Dec 27 Python
PyQt5实现无边框窗口的标题拖动和窗口缩放
Apr 19 Python
Python利用Django如何写restful api接口详解
Jun 08 Python
python一行sql太长折成多行并且有多个参数的方法
Jul 19 Python
如何安装并使用conda指令管理python环境
Jul 10 Python
python os.fork() 循环输出方法
Aug 08 Python
Python爬虫代理池搭建的方法步骤
Sep 28 Python
PyQt5通过信号实现MVC的示例
Feb 06 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
评分9.0以上的动画电影,剧情除了经典还很燃
2020/03/04 日漫
十大催泪虐心动漫,你能坚持看到第几部?
2020/03/04 日漫
让PHP支持页面回退的两种方法[转]
2007/02/14 PHP
Apache2中实现多网站域名绑定的实现方法
2011/06/01 PHP
php模拟post行为代码总结(POST方式不是绝对安全)
2012/02/22 PHP
php颜色转换函数hex-rgb(将十六进制格式转成十进制格式)
2013/09/23 PHP
php简单的留言板与回复功能具体实现
2014/02/19 PHP
PHP下载生成的csv文件及问题总结
2015/08/06 PHP
Laravel接收前端ajax传来的数据的实例代码
2017/07/20 PHP
Laravel 将数据表的数据导出,并生成seeds种子文件的方法
2019/10/09 PHP
基于laravel缓冲cache的用法详解
2019/10/23 PHP
Prototype1.5 rc2版指南最后一篇之Position
2007/01/10 Javascript
jquery 屏蔽一个区域内的所有元素,禁止输入
2009/10/22 Javascript
javascript,jquery闭包概念分析
2010/06/19 Javascript
jQuery中 noConflict() 方法使用
2013/04/25 Javascript
JavaScript Math.ceil() 函数使用介绍
2013/12/11 Javascript
使用javascript实现json数据以csv格式下载
2015/01/09 Javascript
非常漂亮的相册集 使用jquery制作相册集
2016/04/28 Javascript
javascript实现简单的on事件绑定
2016/08/23 Javascript
Web开发中客户端的跳转与服务器端的跳转的区别
2017/03/05 Javascript
JS解决移动web开发手机输入框弹出的问题
2017/03/31 Javascript
详解如何在微信小程序开发中正确的使用vant ui组件
2018/09/13 Javascript
Vue 自适应高度表格的实现方法
2020/05/13 Javascript
[02:30]DOTA2放量测试专访海涛:呼吁保护新手玩家
2013/08/26 DOTA
python抓取豆瓣图片并自动保存示例学习
2014/01/10 Python
Python实现求笛卡尔乘积的方法
2017/09/16 Python
删除DataFrame中值全为NaN或者包含有NaN的列或行方法
2018/11/06 Python
Python devel安装失败问题解决方案
2020/06/09 Python
Python timeit模块原理及使用方法
2020/10/10 Python
CSS3 Media Queries(响应式布局可以让你定制不同的分辨率和设备)
2013/06/06 HTML / CSS
《最佳路径》教学反思
2014/04/13 职场文书
绿色环保标语
2014/06/12 职场文书
村干部群众路线整改措施思想汇报
2014/10/12 职场文书
毕业生个人总结
2015/02/28 职场文书
Python 中数组和数字相乘时的注意事项说明
2021/05/10 Python
html form表单基础入门案例讲解
2021/07/21 HTML / CSS