美文网首页
zmail使用

zmail使用

作者: 玄语梨落 | 来源:发表于2018-03-25 16:55 被阅读0次

zmail是一个用于收发邮件的python扩展包。github上有这个项目还有中文的简介。我打算用它写一个自动下载病分类班级邮箱里面的课件的东西,研究了一下这个项目。我感觉有些地方写的不太清楚,把遇到的问题和一些见解写在了最后。本人还是一个python渣渣,希望有了解的人解释一下,en...,不要嘲笑我。
以下是项目的地址和中文的说明书:
github地址
readme-cn.md

个人理解

  1. 对于get_info()方法,会获取所有邮件的头文件信息并写到一个字典里。这个头文件信息包括:Subject、From、To、Date等,但是注意一定是首字母大写的key,小写的不可以用。

get_info()get_mail获取的邮件是两种不同的东西。get_mail的key似乎都是小写。而get_info()除了id似乎都是大写。

  1. 对于get_attachment(mail,*args),会将文件保存到当前目录,如果后面的args为绝对路径的话,则会保存在那个路径,但是似乎无法判断附件的个数,args的参数个数无法把握,有没有好心人告诉我怎么办?我就直接没有用这个而是把它重写了一下。
  2. 对于get_mails(subject= ,after=, before= ,sender=)这个,我发现他也是调用的info这样的函数,所以似乎也无法通过这个获取'attachments',特别是,我使用的过程中,总是报一个KeyError,发生在一个内部函数_match()上,KeyError: 'subject'。尝试了几次发现还是不行。用的163邮箱。
  3. 我发现通过get_mail(id)获取邮件是可以的,再通过get_latest()方法获取邮箱最大的id值,然后通过这个获取date进行比较,再进行附件的下载。
    代码还没写完,写完后更新。

隔了这么久终于写完了,好久不写东西了,感觉技术变生疏了,另外我也不会多线程什么的发现自己写的东西效率极差,以后好好学学这方面的东西。

import zmail
import time
from collections import Iterable

"""
这是一个邮件的附件下载器
"""
def save_attachment(mail):
"""这部分是重写了zmail的方法,是附件能保存在指定目录,再改改就可以分类保存了"""
    if isinstance(mail['attachments'], Iterable):
        for attachment in mail['attachments']:
            info = attachment[0].split(';')
            name = '/home/ccyx/Downloads/邮件/' + info[0]
            body_type = info[1]
            is_text_file = True if body_type.find('text/plain') > -1 else False
            # Write file.
            if not is_text_file:
                # Binary file.
                body = b''.join(attachment[1:])
                with open(name, 'wb') as f:
                    f.write(body)
            else:
                # Text file.
                body = tuple(map(lambda x: x.decode() + '\r\n', attachment[1:]))
                with open(name, 'w') as f:
                    f.writelines(body)


def date_compare(date1, date2):
"""这是我所能想到的最好的方法,进行日期比较"""
    pattern = '%a, %d %b %Y %H:%M:%S %z'
    print(date2)
    t1 = time.strptime(date1, pattern)
# 这里出了问题,调试了好久,原来是不同邮件日期格式不同,之所以strip是因为有的日期为个位数,最后会多一个空格
    t2 = time.strptime(date2[:31].strip(), pattern)
    if t1 > t2:
        return 1
    elif t1 < t2:
        return -1
    else:
        return 0


server = zmail.server('邮箱', '密码')
mail = server.get_latest()
max_id = int(mail['id'])
date = 'Thu, 1 Mar 2018 12:00:00 +0800'
mail_id = max_id
while date_compare(date, mail['date']) == -1:
    print('--------------------')
    save_attachment(mail)
    mail_id -= 1
    mail = server.get_mail(mail_id)
    print(mail['from'])

然而还是不太好,报了一个这样的错误:

poplib.error_proto: b'-ERR Unable to log on'

应该跟我的代码没有关系,所以也就没管了,反正我要的东西都下载好了,就先这样吧。

相关文章

  • zmail使用

    zmail是一个用于收发邮件的python扩展包。github上有这个项目还有中文的简介。我打算用它写一个自动下载...

  • zmail发送和接收邮件

    背景:最近学习使用python来发送和接收邮件。查阅网上其他资料,各种复杂。后面发现有zmail使用起来特简洁。但...

  • Python3中通过Zmail库发送电子邮件

    一、Zmail 是什么 Zmail或许是最简单的邮件收发库,开发网址为: https://github.com/Z...

  • Python邮件发送

    使用Python发邮件常用的库有smtplibemail等常用的,但是代码太复杂,不便于学习,zmail库更简单,...

  • PY使用Zmail发送测试报告

    1.这里我们需要用到zmail,仅py3支持哈 首先就是本地安装zmail -- pip install zmai...

  • Zmail--让邮件变得简单的python邮件模块

    发送邮件是个很简单的需求,但是在实际的使用中依然碰到了很多坑,因此创建了zmail这个项目,让你使用python发...

  • Python开源项目介绍:用zmail简单地发邮件

    发送邮件是个很简单的需求,但是在实际的使用中依然碰到了很多坑,因此创建了zmail这个项目,让你使用python发...

  • Python库-zmail

    zmail可实现发送邮件与获取你邮件信息的功能

  • python对outlook邮件整理

    网上资料同质化严重,也尝试了很多包,yagmail, zmail, exchanglib,大同小异。以win32c...

  • Python之Zmail邮件处理

    介绍 Zmail 使得在python3中发送和接受邮件变得更简单。你不需要手动添加服务器地址、端口以及适合的协议,...

网友评论

      本文标题:zmail使用

      本文链接:https://www.haomeiwen.com/subject/tbzhcftx.html