• 您当前位置:网站首页 >> Python学习 >> Python 收邮件、读邮件、标记已读和删除邮件
  • Python 收邮件、读邮件、标记已读和删除邮件

    iCoA首席特工 逍遥峡谷 发布:2020-01-04 更新:2020-01-04 浏览1条评论
    内容简介

    相关关键词:Python   imbox   收邮件  

    本文链接:https://www.icoa.cn/a/891.html

    本站文章如非注明皆为原创,未经允许禁止转载。如有问题可以给我留言或发邮件。

    使用Python收取邮件同样需要安装一些第三方模块,之前文章Python 第三方模块和安装方法有介绍方法,本文除了上篇发送邮件的文章中用到的 yagmail 模块之外,还会用到 keyring 模块和 imbox 模块。

    首先需要用到 keyring 模块,用来读取邮箱密码

    因为如果直接把邮箱密码放到源文件里,如果源文件不小心分享出去了,就容易泄露你的邮箱密码。而使用 keyring 模块存储密码,这样即便是你写的程序源文件被分享出去,别人也看不到你的密码是什么。

    当然,用keyring 读取密码的前提是,已经在上一篇文章Python 使用 yagmail 模块发送邮件中通过 yagmail 设置好密码了。

    读取之前存储的密码的代码:

    import keyring
    mail_pass = keyring.get_password('yagmail','[email protected]')
    # 将 [email protected] 邮箱的密码赋值给 mail_pass 变量


    使用 imbox 模块读取邮件

    注意,如果你使用的是网易邮箱的话,需要通过下面地址(把[email protected]换成你自己的网易邮箱地址,然后复制到浏览器打开这个网址),激活一下你的IMAP服务,否则无法成功读取邮件。

    http://config.mail.163.com/settings/imap/[email protected]
    import keyring
    from imbox import Imbox
    mail_pass = keyring.get_password('yagmail','[email protected]')
    with Imbox('imap.163.com','[email protected]',mail_pass,ssl=True) as imbox:
        # imap服务器地址,邮箱,密码,是否支持ssl
        all_mails = imbox.messages()
        # 读取收件箱所有信息
        for uid, messages in all_mails:
            print(messages.subject)
            # 输出邮件主题
            print(messages.body['plain'])
            # 输出邮件内容以文本格式

    其中 messages.subject 是邮件主题,下面列出常用的参数,和代表的内容:

    参数内容
    messages.sent_from发件人
    messages.sent_to收件人
    messages.subject邮件主题
    messages.date发送日期
    messages.body['plain']文本格式的正文
    messages.body['html']HTML格式的正文
    messages.attachments附件

    前面代码是读取所有邮件,可以用不同参数分别读取不同类型的邮件。

    读取所有邮件

    imbox.messages()

    读取未读邮件

    imbox.messages(unread=True)

    读取标旗邮件

    imbox.messages(flagged=True)

    读取某个发件人的邮件

    imbox.messages(sent_from='[email protected]')

    读取某个收件人的邮件

    imbox.messages(sent_to='[email protected]')

    按照日期筛选邮件(注意中间是两个下划线__)

    参数内容
    date__lt某天之前
    date__gt某天之后
    date__on某天
    imbox.messages(date__gt=datetime.date(2019,10,31))


    处理邮件

    将邮件标记已读

    imbox.mark_seen(uid)

    将邮件删除

    imbox.delete(uid)

    比如收取所有未读邮件,并标记已读

    import keyring
    from imbox import Imbox
    mail_pass = keyring.get_password('yagmail','[email protected]')
    with Imbox('imap.163.com','[email protected]',mail_pass,ssl=True) as imbox:
        # imap服务器地址,邮箱,密码,是否支持ssl
        unread_mails = imbox.messages(unread=True)
        # 读取收件箱所有信息
        for uid, messages in unread_mails:
            title = messages.subject
            sent_from = messages.sent_from
            print(f'收到来自{sent_from}的邮件,邮件主题为:{title}')
            imbox.mark_seen(uid)
            print('已标记为已读')

    更多Python学习日志,点击:Python学习日志目录


    本文链接:https://www.icoa.cn/a/891.html
    关键词: Python   imbox   收邮件  


    如果您愿意支持本站,欢迎点击打赏哦~



    下一篇:Python 函数与函数的自定义

    上一篇:Python 使用 yagmail 模块发送邮件


    - 相关文章 -


    Python 数字与数字型运算 - 2020-09-08

    Python 基础知识之数据类型 - 2020-09-07

    Python 学习中非常好用的编辑器 Sublime Text 3 - 2020-09-07

    Python 基础知识之变量 - 2020-09-03

    Python 详细安装步骤图解 - 2020-09-01

    Python 数据分析模块 Pandas 之 DataFrame 数据 - 2020-02-09

    Python 数据分析模块 Pandas 之 Series 数据 - 2020-02-05

    Python 数据分析第三方库 Numpy 的安装和使用 - 2020-02-03


    - 文章评论 -




    8315

    [由于政策原因,您的留言如果提交成功后,需要审核才能展示,请改天再来查看,请不要重复提交,谢谢支持!]

    - 最新评论[1条评论] -


    james
    2020-07-16 12:08:04

    运行结果 求解
    C:\Users\何家明>1.py
    Traceback (most recent call last):
      File "C:\Users\何家明\1.py", line 6, in <module>
        unread_mails = imbox.messages(unread=True)
      File "C:\Users\何家明\AppData\Local\Programs\Python\Python38\lib\site-packages\imbox\imbox.py", line 100, in messages
        return messages_class(connection=self.connection,
      File "C:\Users\何家明\AppData\Local\Programs\Python\Python38\lib\site-packages\imbox\messages.py", line 37, in __init__
        self._uid_list = self._query_uids(**kwargs)
      File "C:\Users\何家明\AppData\Local\Programs\Python\Python38\lib\site-packages\imbox\messages.py", line 48, in _query_uids
        _, data = self.connection.uid('search', None, query_)
      File "C:\Users\何家明\AppData\Local\Programs\Python\Python38\lib\imaplib.py", line 876, in uid
        raise self.error("command %s illegal in state %s, "
    imaplib.error: command SEARCH illegal in state AUTH, only allowed in states SELECTED

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
      File "C:\Users\何家明\1.py", line 13, in <module>
        print('已标记为已读')
      File "C:\Users\何家明\AppData\Local\Programs\Python\Python38\lib\site-packages\imbox\imbox.py", line 49, in __exit__
        self.logout()
      File "C:\Users\何家明\AppData\Local\Programs\Python\Python38\lib\site-packages\imbox\imbox.py", line 52, in logout
        self.connection.close()
      File "C:\Users\何家明\AppData\Local\Programs\Python\Python38\lib\imaplib.py", line 466, in close
        typ, dat = self._simple_command('CLOSE')
      File "C:\Users\何家明\AppData\Local\Programs\Python\Python38\lib\imaplib.py", line 1205, in _simple_command
        return self._command_complete(name, self._command(name, *args))
      File "C:\Users\何家明\AppData\Local\Programs\Python\Python38\lib\imaplib.py", line 943, in _command
        raise self.error("command %s illegal in state %s, "
    imaplib.error: command CLOSE illegal in state AUTH, only allowed in states SELECTED

    站长回复: 代码也贴一下,敏感信息比如邮箱可以用其他字符代替。

    另外网易邮箱,需要激活一下IMAP服务,不过我看了下,之前的激活网址不能用了,这个只能找一下网易邮箱的客服咨询一下了。
    [>>>点击查看更多评论]

    版权所有©逍遥峡谷 - 星际中心超自然局 · 地球总部 | 逍遥峡谷 · 酷品优选
    Copyright©Interstellar Central Occult Agency (I.C.O.A)
    本局纯属虚构,如有雷同,纯属巧合

    冀公网安备13011102001055号 · 冀ICP备06033848号