返回顶部
首页 > 资讯 > 后端开发 > Python >Python 15.2 POP3 收取邮
  • 128
分享到

Python 15.2 POP3 收取邮

Python 2023-01-31 07:01:56 128人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

POP3收取邮件收取邮件就是编写一个MUA作为客户端,从MDA把邮件获取到用户的电脑或者手机上。收取邮件最常用的就是POP3协议。python内置了一个poplib模块,实现了POP3协议,可以直接用来收取邮件。注意,POP3收取不是一个可

POP3收取邮件

收取邮件就是编写一个MUA作为客户端,从MDA把邮件获取到用户的电脑或者手机上。收取邮件最常用的就是POP3协议。

python内置了一个poplib模块,实现了POP3协议,可以直接用来收取邮件。

注意,POP3收取不是一个可以直接阅读的邮件本身,而是邮件的原始文本,这和SMTP很像,SMTP也是发送一大堆经过编码的文本。要把POP3收取的文本变成可阅读的邮件,还需要用email模块提供的各种类来解析原始文本,变成可阅读的对象。

所以,收取邮件分为两部分:
1、用poplib把邮件的原始文本下载到本地。

2、用email解析原始文本,还原为邮件对象。


通过POP3下载邮件

POP3协议本身很简单,以下面代码为例,我们来获取最新的一封邮件内容:
import poplib

email =imput('Email:')

passWord =input('Password:')

pop3_server =input('POP3 Server:')

server =poplib.POP3(pop3_server)

server.set_debuglevel(1)

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)

resp,lines,octets =server.retr(index)

#lines存储了原始文本邮件的每一行

#可以获得整个原始文本的内容

msg_content =b'\r\n',join(lines).decode('utf-8')

#稍后解析出邮件

msg =Parser().parsestr(msg_content)

#可以根据索引直接从服务器上删除邮件:
server.dele(index)

#关闭连接:
server.close()

用POP3获取邮件其实很简单,要获取所有邮件,只需要循环使用retr()把每一封邮件内容拿到即可。真正麻烦的是把拿到的原始文本解析为可阅读的邮件对象。


解析邮件

解析邮件过程和上一节构造邮件过程正相反,因此,先倒入必要模块:
from email.parser import Parser

from email.header import decode_header

from email.utils import parseaddr

import poplib

只需要一行代码就可以把邮件内容解析为Message对象:
msg =Parser().parsestr(msg_content)

但是这个Message对象本身可能是一个MessageMultipart对象,即包含嵌套的其他MIMEBase对象。嵌套可能还不止一层:
所以我们要递归的打印出Message对象的层次结构:
#indent 用于缩进显示:
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('%s%s : %s' % ('  '* indent,header,value))

   if (msg.is_multipart()):

        parts =msg.get_payload()

        for n,part in enumerate(parts):

            print('%s part %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('%s Text: %s' % ('  ' * indent,content + '...'))

        else:

            print('%s Attachment: %s' % ('  ' * indent ,content_type))

邮件的Subject或者Email中包含的名字都是经过编码后的str,要正常显示必须decode:
def decode_str(s):

    value,charset =decode_header(s)[0]

    if charset: 

        value =value.decode(charset)

   return value

decode_header()返回一个list,因为像Cc,Bcc这样的字段可能包含多个邮件地址,所以解析出来的会有很多个元素。上面的代码我们偷了个懒,只取了第一个元素。

文本邮件的正文也是str,还需要检测编码,否则,非UTF-8编码的邮件都无法正常显示:
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 poss >= 0:

            charset =content_type[pos + 8:].strip()

    return charset

把上面的代码整理好,我们就可以收取一封邮件了。


+OK Welcome to coremail Mail Pop3 Server (163coms[...])
Messages: 126. Size: 27228317

From: Test <xxxxxx@qq.com>To: Python爱好者 <xxxxxx@163.com>Subject: 用POP3收取邮件
part 0
--------------------
  part 0
  --------------------
    Text: Python可以使用POP3收取邮件……...
  part 1
  --------------------
    Text: Python可以<a href="...">使用POP3</a>收取邮件……...
part 1
--------------------
  Attachment: application/octet-stream

我们从大阴中可以看出,这封邮件是一个MIMEMultiport,它包含两部分,第一部分又是一个MIMEMultiport,第二部分是个附件。而内嵌的MIMEMultipart和一个HTML格式的MIMEText。


小结:
用poplib模块收取邮件分两步:第一部分使用POP3协议将邮件获取到本地,第二步使用email模块把原始邮件解析为Message对象,然后用适当的形式显示给用户即可。

--结束END--

本文标题: Python 15.2 POP3 收取邮

本文链接: https://lsjlt.com/news/191506.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python 15.2 POP3 收取邮
    POP3收取邮件收取邮件就是编写一个MUA作为客户端,从MDA把邮件获取到用户的电脑或者手机上。收取邮件最常用的就是POP3协议。Python内置了一个poplib模块,实现了POP3协议,可以直接用来收取邮件。注意,POP3收取不是一个可...
    99+
    2023-01-31
    Python
  • python学习——POP3收取邮件
    SMTP用于发送邮件,如果要收取邮件呢? 收取邮件就是编写一个MUA作为客户端,从MDA把邮件获取到用户的电脑或者手机上。收取邮件最常用的协议是POP协议,目前版本号是3,俗称POP3。 Python内置一个poplib模块,实现了...
    99+
    2023-01-31
    邮件 python
  • PHP使用POP3协议接收邮件的详细过程
    随着互联网的不断发展和普及,电子邮件已经成为了人们日常沟通的一种常见方式。PHP作为一种流行的编程语言,也提供了一些强大的邮件处理功能。在本文中,我们将分享如何使用PHP通过POP3协议接收邮件的详细过程。一、POP3协议POP3(Post...
    99+
    2023-05-22
    PHP POP 邮件接收
  • Foxmail收取雅虎邮件方法
    许多人想用Foxmail收取雅虎邮件, 不知如何设置, 现将自己测试通过的方法告诉大家![@more@]1.首先要开启你邮箱的POP功能http://edit.my.yahoo.com/config/set_popfwd.src=ym&do...
    99+
    2023-06-04
  • 利用python发送和接收邮件
    关于电子邮件 大学之前,基本不用邮箱,所以基本感觉不到它的存在,也不知道有什么用;然而大学之后,随着认识的人越来越多,知识越来越广泛,邮箱已然成为很重要的通讯工具,大学一些课程作业需要有邮箱发给老师,注...
    99+
    2022-06-04
    接收邮件 python
  • python小脚本-提取邮箱
            使用python正则表达式,在一堆各种字符中提取是邮箱名的字符串。import refile = open("AT.txt")c=[]for line in file.readlines():    contant = re...
    99+
    2023-01-31
    脚本 邮箱 python
  • Python读取邮箱中的邮件,含文本,附
    #-*- encoding: utf-8 -*- import sys import locale import poplib from email import parser import email import string # ...
    99+
    2023-01-31
    文本 邮箱 邮件
  • python爬取51job中hr的邮箱
    本文实例为大家分享了python爬取51job中hr的邮箱具体代码,供大家参考,具体内容如下 #encoding=utf8 import urllib2 import cookielib import...
    99+
    2022-06-04
    邮箱 python hr
  • python开发_email_读取邮件头
    在python中的类库中,python自带了email模块。在email模块中,我们可以email类库实现对邮件的读取,和邮件的发送等功能。本文先来谈谈在python中,利用email模块读取邮件头.....先来看看一封百度云发给我的邮件:...
    99+
    2023-01-31
    邮件 python
  • 用Python实现电子邮件接收程序(PO
    从网络上摘抄的代码: import poplib # 输入邮件地址, 口令和POP3服务器地址: email = raw_input('Email: ') password = raw_input('Password: ') p...
    99+
    2023-01-31
    电子邮件 程序 Python
  • Python怎么读取Outlook电子邮件
    这篇文章主要介绍“Python怎么读取Outlook电子邮件”,在日常操作中,相信很多人在Python怎么读取Outlook电子邮件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python怎么读取Outlo...
    99+
    2023-06-27
  • Python中怎么自动化读取邮件
    这篇文章将为大家详细讲解有关Python中怎么自动化读取邮件,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、poplib库poplib 模块提供了 poplib.POP3 和 poplib...
    99+
    2023-06-15
  • python读取邮件的方法是什么
    Python读取邮件的方法可以使用以下两个库实现:1. `imaplib`:这个库提供了IMAP(Internet Mail Acc...
    99+
    2023-09-07
    python
  • Python如何使用email、smtplib、poplib、imaplib模块收发邮件
    一封电子邮件的旅程是:Mail User Agent (MUA) refers to an email client or software used by a user to access their email account.。(即类...
    99+
    2023-05-17
    Python email smtplib
  • Python中怎么读取Outlook的电子邮件
    这篇文章给大家介绍Python中怎么读取Outlook的电子邮件,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。首先你需要导入 win32com.client,为此你需要安装 pywin32:pip insta...
    99+
    2023-06-17
  • linux脚本实现自动发送和收取邮件的设置方法
    1. 命令行模式下的发送邮件 1.1 安装sendemail 2.2 使用sendemail和举例 2. 命令行模式下的收取邮件 2.1 安装getmail4 2.2 配置getmail4和简单举例 2.3...
    99+
    2022-06-04
    脚本 自动发送 邮件
  • Python+Selenium实现读取网易邮箱验证码
    前面写到了一些关于python+Selenium的基础操作 的教程,这篇文章将讲解一些实战内容。 在自动化工作中,有可能会遇到一些发送邮箱验证码类似的功能,如下 我们一般的解决思路...
    99+
    2024-04-02
  • python 如何自动监控新邮件并读取
    本篇内容主要讲解“python 如何自动监控新邮件并读取”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python 如何自动监控新邮件并读取”吧!我就废话不多说了,大家还是直接看代码吧~#zma...
    99+
    2023-06-07
  • linux脚本怎么实现自动发送和收取邮件的设置方法
    本篇内容介绍了“linux脚本怎么实现自动发送和收取邮件的设置方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 命令行模式下的发送邮件 1...
    99+
    2023-06-09
  • Python网络编程之使用email、smtplib、poplib、imaplib模块收发邮件
    一封电子邮件的旅程是: MUA:Mail User Agent——邮件用户代理。(即类似Outlook的电子邮件软件)MTA:Mail Transfer Ag...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作