前言
由之前的爬虫需要获取邮箱验证码得以延伸,当时简单实现了一个支持pop3协议的邮件接收功能,但是不足点还有很多,扩展性也不强。比如支持的邮件服务商有限,功能针对性过强,换一个场景的话就无法使用了。于是整理了下思路,考虑到重复造轮子的话意义不大,现阶段不如多汲取已有轮子的优点,多进行积累未来才能造功能更强大完善的轮子。本着这样的想法,找到了一个收发邮件的第三方模块[zmail](https://github.com/zhangyunhao116/zmail)
,目前该项目虽已不再维护,不过功能依然很强大可用,后续有需求也可进行修改升级。该模块本质上还是调用的python的标准库smtplib
,poplib
。
简单分析
目录结构
1 | │─ zmail |
abc.py
快速开始
下面简单列举下如何使用该模块进行收发邮件,其他详细功能可以参考作者文档或阅读源码。发送邮件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16import 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
15import 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
11import 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
的发送和接收功能,更多详细的内容还需参考原作者的项目。
通过上述发送和接收邮件的案例可以看出,它为我们省去很很多繁琐的工作,例如编解码,解析及构造邮件等。很多时候我们不可避免的需要重复造轮子,通过不断的学习积累更好的第三方模块,才能使我们的轮子造的有意义。