让邮件变得简单-zmail

前言

由之前的爬虫需要获取邮箱验证码得以延伸,当时简单实现了一个支持pop3协议的邮件接收功能,但是不足点还有很多,扩展性也不强。比如支持的邮件服务商有限,功能针对性过强,换一个场景的话就无法使用了。于是整理了下思路,考虑到重复造轮子的话意义不大,现阶段不如多汲取已有轮子的优点,多进行积累未来才能造功能更强大完善的轮子。本着这样的想法,找到了一个收发邮件的第三方模块[zmail](https://github.com/zhangyunhao116/zmail),目前该项目虽已不再维护,不过功能依然很强大可用,后续有需求也可进行修改升级。该模块本质上还是调用的python的标准库smtplib,poplib

简单分析

目录结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
│─ zmail
│ __init__.py
│ abc.py
│ api.py
│ compat.py
│ exceptions.py
│ helpers.py
│ info.py
│ mime.py
│ parser.py
│ server.py
│ settings.py
│ structures.py
│ utils.py
  • abc.py

    快速开始

    下面简单列举下如何使用该模块进行收发邮件,其他详细功能可以参考作者文档或阅读源码。

    发送邮件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    import zmail

    mail = {
    "subject": "Hello", # 邮件主题
    "content_text": "send message test", # 邮件内容
    "attachments": ["/tmp/test.py", "/tmp/1.jpg"], # 附件内容(最好使用绝对路径)
    "from": "Name <your email account>" # 自定义发送者
    }

    server = zmail.server("your email", "your password")

    # 批量发送
    server.send_mail(["send email"], mail)

    # 添加抄送
    server.send_mail(["send email"], mail, cc=["send email2"])

    接收邮件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    import zmail

    server = zamil.server("your email", "your password")

    # 获取最新邮件
    mail = server.get_latest()

    # 根据id取邮件
    mail = server.get_mail(2)

    # 根据(subject,after,before,sender)取邮件
    mail = server.get_mails(subject="Github", start_time="2022-6-1", sender="github", start_index=1, end_index=10)

    # 获取邮箱信息
    mailbox_info = server.stat()

    解析邮件

    zamil将接收到的邮件映射为了一个字典,可直接获取到对应字段的值。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    import zmail

    server = zamil.server("your email", "your password")
    mail = server.get_latest()

    # 打印邮件
    zmail.show(mail)

    # 查看邮件所有内容
    for k, v in mail.items():
    print(k, v)

    支持的邮件服务商

    另外将该模块支持的邮件服务商列出,方便以后有用到的话直接进行查阅。
** 服务商地址** 发送邮件 接收邮件 备注
@163.com 需要应用专用密码
@126.com
@qq.com pop3需要应用专用密码
@yeah.net
@gmail.com 需要应用专用密码
@sina.com
@outlook 需要应用专用密码
@hotmail 需要额外设置

支持的企业邮箱、

** 名称** 使用示例
腾讯企业邮箱 zmail.server(‘username’,’psw’,config=’qq’)
阿里企业邮箱 zmail.server(‘username’,’psw’,config=’ali’)
网易企业邮箱 zmail.server(‘username’,’psw’,config=’163’)
谷歌企业邮箱 zmail.server(‘username’,’psw’,config=’google’)

总结

以上只是简单列出zmail的发送和接收功能,更多详细的内容还需参考原作者的项目。
通过上述发送和接收邮件的案例可以看出,它为我们省去很很多繁琐的工作,例如编解码,解析及构造邮件等。很多时候我们不可避免的需要重复造轮子,通过不断的学习积累更好的第三方模块,才能使我们的轮子造的有意义。