邮件接收

python3可以使用poplib.POP3进行邮件接收,具体如下:

import poplib
from email.parser import Parser def get_email(email,password,host="mail.163.com"):
# connect to pop3 server
server = poplib.POP3(host)
# open debug
server.set_debuglevel(1) # 身份验证
server.user(email)
server.pass_(password) # 返回邮件总数目和占用服务器的空间大小(字节数), 通过stat()方法即可
# print("Mail counts: {0}, Storage Size: {0}".format(server.stat())) # 使用list()返回所有邮件的编号,默认为字节类型的串
resp, mails, octets = server.list()
# print("响应信息: ", resp)
# print("所有邮件简要信息: ", mails)
# print("list方法返回数据大小(字节): ", octets) # get the latest, index from 1:
index = len(mails)
if index < 1:
return None
resp, lines, octets = server.retr(index) # 可以获得整个邮件的原始文本:
msg_content = b'\r\n'.join(lines).decode('utf-8')
# 解析出邮件:
msg = Parser().parsestr(msg_content)
# print(msg)
# print("解码后的邮件信息:\r\n"+str(msg)) #close
server.close()
return msg def delete_email(email,password,host="mail.163.com"):
# connect to pop3 server
server = poplib.POP3(host)
# open debug
# server.set_debuglevel(1) # 身份验证
server.user(email)
server.pass_(password) # 使用list()返回所有邮件的编号,默认为字节类型的串
# list()返回tuple
resp, mails, octets = server.list()
# print("响应信息: ", resp)
# print("所有邮件简要信息: ", mails)
# print("list方法返回数据大小(字节): ", octets) # get the latest, index from 1:
index = len(mails) # 删除所有邮件
while index > 0:
server.dele(index)
print(index)
index = index -1 # commit command and close
server.quit()

邮件解析


# 解析邮件正文
def get_mail_content(msg):
if msg == None:
return None
for part in msg.walk():
if not part.is_multipart():
data = part.get_payload(decode=True)
# print("emailcontent:\r\n"+data.decode())
return data.decode()

poplib关键函数解析

  • POP3.dele(which)

标记消息号 which 以进行删除。在大多数服务器上,删除直到QUIT才被实际执行(主要例外是Eudora QPOP,它通过在任何断开连接上进行未决删除而故意违反RFC)。

  • POP3.quit()

注销:提交更改,解锁邮箱,删除连接。

email.message关键函数解析

  • walk()

walk() 方法是一种通用的生成器,可用于以深度优先遍历顺序遍历消息对象树的所有部分和子部分。您通常会在 for 循环中使用 walk() 作为迭代器;每次迭代返回下一个子部分。

  • is_multipart()

is_multipart()

如果消息的有效内容是一个子EmailMessage 对象的列表,则返回 True,否则返回 False。当 is_multipart() 返回 False 时,有效负载应为字符串对象(可能是CTE编码的二进制有效负载)。注意,is_multipart() 返回 True 并不一定意味着“msg.get_content_maintype() == ‘multipart’”将返回 True。例如,当 EmailMessage 类型为 message/rfc822 时,is_multipart 将返回 True。

  • get_content_type()

get_content_type()返回消息的内容类型,强制为表格 maintype/subtype 的小写。如果消息中没有 Content-Type 头,则返回 get_default_type() 返回的值。如果 Content-Type 头无效,则返回 text/plain。

(根据 RFC 2045,消息总是有一个默认类型,get_content_type() 将总是返回一个值。RFC 2045 定义一个消息的默认类型为 text/plain,除非它出现在一个 multipart/digest 容器中,在这种情况下,它将是 message/rfc822 如果 Content-Type 头有一个无效的类型规范,RFC 2045 强制默认类型为 text/plain。)

email.message API文档

python3接收、解析邮件的更多相关文章

  1. javaMail邮件接收解析内容及附件 及删除邮件

    参考自:  http://blog.csdn.net/xyang81/article/details/7675160 package com.szy.project.utils; import jav ...

  2. java来接收邮件并解析邮件正文中的表格

    这里是实际需求中的一个DEMO 有一部分内容进行了注释和处理,参考需要修改成自己的实际参数.另这个是对于实际一个场景的案例并不是通用解决的工具类. import org.jsoup.Jsoup; im ...

  3. JavaMail入门第五篇 解析邮件

    上一篇JavaMail入门第四篇 接收邮件中,控制台打印出的内容,我们无法阅读,其实,让我们自己来解析一封复杂的邮件是很不容易的,邮件里面格式.规范复杂得很.不过,我们所用的浏览器内置了解析各种数据类 ...

  4. Python3 配置文件 解析

    /************************************************************************ * Python3 配置文件 解析 * 说明: * ...

  5. python之poplib模块下载并解析邮件

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #python之poplib模块下载并解析邮件 #https://github.com/michaelliao ...

  6. Python连载57- 邮件头和主题、解析邮件

    一.添加邮件头,抄送等信息 1.mail["From"]表示发送者信息,包括姓名和邮件 2.mail["To"]表示接收者信息,包括姓名和邮件地址 3.mail ...

  7. C#邮件接收系统核心代码(接收POP3邮件IMAP邮件)

    /* * Created by SharpDevelop. * User: Administrator * Date: 2013/11/18 * Time: 20:55 * * To change t ...

  8. Python3+getopt解析命令行参数

    一.说明 在学C语言的时候就知道可以通过argc获取命令行参数个数,可以通过argv获取具体参数.但自己写的程序获取到的参数一是没有键值形式二是写的参数不能乱序,和系统命令不太一样. 再往后点知道有g ...

  9. 邮件收取客户端LumiSoft类库接收yahoo邮件的问题。

    //开始循环取邮件数据 m_pImap.Fetch( false, IMAP_t_SeqSet.Parse("1:*"), new IMAP_t_Fetch_i[]{ new IM ...

随机推荐

  1. 好用的shell可以事半功倍

    程序员离不开shell,一个好用的shell可以事半功倍,推荐zsh以及一些插件 # install zsh $ brew install zsh # install a framework, we ...

  2. Prometheus 入门与实践

    原文链接:https://www.ibm.com/developerworks/cn/cloud/library/cl-lo-prometheus-getting-started-and-practi ...

  3. java 容器 集合 用法

    Set,List,Map,Vector,ArrayList的区别 JAVA的容器---List,Map,Set Collection ├List │├LinkedList │├ArrayList │└ ...

  4. maven 编译出现初始化异常:com/sun/tools/javac/code/TypeTags

    使用的式jdk11 lombok式1.16.4 错误原因:版本不匹配 升级lombok到1.18.4 问题解决

  5. 特征脸是怎么提取的之主成分分析法PCA

    机器学习笔记 多项式回归这一篇中,我们讲到了如何构造新的特征,相当于对样本数据进行升维. 那么相应的,我们肯定有数据的降维.那么现在思考两个问题 为什么需要降维 为什么可以降维 第一个问题很好理解,假 ...

  6. 设置TabWidget的样式的方法、关联Fragment与tabwidget的方法、点击tab显示相应Fragment方法

    private void updateTabHost(TabHost tabHost) { int count = tabHost.getTabWidget().getChildCount(); ; ...

  7. C#集合。

    集合命名空间: using system.collections. 非泛型集合 using system.collections.Generic.  泛型集合 为什么要用集合: 1.数组一旦声明长度就 ...

  8. 【译】《Clean C#》

    本文是<Clean C#>一书译文的序言,阅读译文请移步至:<Clean C#>译文. <Clean C#>的副标题是Readable,Maintainable,P ...

  9. redis复制

    一.官网解释 redis支持简单且易用的主从复制 ( master-slave replication )功能,改功能可以让服务器 ( slave server ) 成为主服务器 ( master s ...

  10. SSM+Netty项目结合思路

    最近正忙于搬家,面试,整理团队开发计划等工作,所以没有什么时间登陆个人公众号,今天上线看到有粉丝想了解下Netty结合通用SSM框架的案例,由于公众号时间限制,我不能和此粉丝单独沟通,再此写一篇手记分 ...