更多课程 选择中心


Python培训

400-996-5531

如何用zmail简单地发邮件? Python开源项目分享

  • 发布:ZYunH
  • 来源:Python中文社区
  • 时间:2019-01-29 16:11

今天我们为大家分享的是一个Python开源项目——用zmail简单地发邮件,那么在Python编程中,这个过程是如何实现的呢?我们又为什么选择zmail,而不是其他的轮子呢?所有相关的疑问,这里帮你解决。

Python开源项目分享

其他轮子的缺点:

服务端拒信:首要问题。很多其他的轮子需要自己构造MIME和邮件头(通常优化了过程),但经常遭遇拒信,具体原因是其没有正确的定义邮件头,诸如From和To的头信息在使用SMTP时每家服务商检查都会有细微的差别,以及一些平台的差异(win10 localhost乱码导致发件拒信),甚至在你发往不同的地址检查也会有差别(国内发国外需要额外验证一些信息预防垃圾邮件)。

构造太麻烦:特别是添加附件的时候,有些还需要额外去自定义类型,体验很差。

发送太麻烦:你需要找到你服务商的smtp地址,端口号,有些服务商不是默认的端口(@http://163.com),有些只能SSL验证(@http://qq.com),有些需要TLS(@gmailcom),一个不小心就发送失败。

解析邮件复杂:Bytes坑多,还有boundary,各种格式乱码错误。

引入过多的外部包:一些轮子引入了好几个包,可能会造成包与原来的程序版本冲突(常见于requests之类的包),并且发生错误无法得到及时的文档支持。在我尝试发送失败后,使用django的email模块成功发送了邮件,但是django的目的显然不是这个,使用一个如此大的框架来实现那么小的需求显然不合理(并且构造过程依然复杂)。

Zmail的优势:

自动填充大多数导致服务端拒信的头信息(From To LocalHost之类的)

将一个字典映射为email,构造信件就像构造字典一样简单

自动寻找邮件服务商端口号地址,自动选择合适的协议(经过认证的)

只依赖于Python3,嵌入其他项目时无需烦恼

你可以使用zmail来:

作为监控脚本的发送&接收邮件模块,及时传递信息

嵌入到已有的项目中实现邮件功能

自定义邮件发送过程,诸如准点发送、定时发送、自动监控等

安装

$ pip3 install zmail

也可以使用pip代替pip3

注意:zmail仅支持Python3,不支持Python2,使用前所有邮箱都要开启SMTP功能,@http://163.com和@# 的邮箱需要额外设定SMTP密码,网上很多信息,具体自行百度google,这里先行省略。

发送邮件

import zmail


# 你的邮件内容


mail_content = {'subject': 'Success!',  # 随便填写


    
'content': 'This message from zmail!',  # 随便填写


}




# 使用你的邮件账户名和密码登录服务器


server = zmail.server('12345678@qq.com, '你的qq邮箱密码')


# 发送邮件


server.send_mail('555555@qq.com', mail)

为你的邮件添加附件,修改你的邮件内容 即可,其他内容同上

# 你的邮件内容


mail_content = {'subject': 'Success!',  # 随便填写


    
'content': 'This message from zmail!',  # 随便填写


    
'attachments': '/Users/zyh/Documents/example.zip',  # 最好使用绝对路径,若你电脑没有这个文件会造成错误


}

给多个信箱发件,修改发送邮件 即可,其他内容同上

# 发送邮件


server.send_mail(['555555@qq.com','666666@qq.com'], mail)

添加额外的头信息,直接加入到mail_content即可

取回你的邮件

取得最新的邮件

 import zmail


server = zmail.server('yourmail@#, 'yourpassword')


mail = server.get_latest()

依据id取回邮件

mail = server.get_mail(2)

依据 (subject,after,before,sender)取回一个列表的邮件

mail = server.get_mails(subject='GitHub',after='2018-1-1',sender='github')

示例中, 如果 'GitHub' 在邮件的主题中,这封邮件将会被匹配, 例如' [GitHub] Your password has changed'

sender亦是如此

得到所有邮件的头文件信息.一个由字典组成的列表,每个字典包含了所有能够提取的头文件.

mail_info = server.get_info()

得到邮箱的信息

mailbox_info = server.stat()

结果为包含两个整型的元组: (邮件的数量, 邮箱的大小).

解析你的邮件

在zmail中,接收到的邮件被映射为一个字典,你可以通过访问python字典的形式来访问你的邮件,字典中的所有key在下方邮件结构中有列出,例如

subject = mail['subject']

展示你的邮件,使用 zmail.show()

import zmail


server = zmail.server('yourmail@#, 'yourpassword')


mail = server.get_latest()


zmail.show(mail)

输出 :

content-type multipart/mixed


subject Success!


to zmail_user


from zmail<zmail@#>


date 2018-2-3 01:42:29 +0800


boundary ===============9196441298519098157==


content ['This message from zmail!']


contents [[b'Content-Type: text/plain; charset="utf-8"', b'MIME-Version: 1.0', b'Content-Transfer-Encoding: base64', b'', b'VGhpcyBtZXNzYWdlIGZyb20gem1haWwh', b'']]


attachments None


id 5

邮件的结构

content-type: 邮件内容的类型

subject: 邮件主题

to:收件人

from:寄件人

date: 年-月-日 时间 时区

boundary: 如果邮件为multiple - - - parts,你可以得到其分界线

content: 邮件的文本内容(仅在text/plain时可以被解析)

contents: 邮件的body,里面包含着由分界线分割的每一个段落

attachments: None 或者 [['附件名称;编码方式','附件的二进制内容']...]

id: 在邮箱中的id

获得附件

import zmail


server = zmail.server('yourmail@#, 'yourpassword')


mail = server.get_latest()


zmail.get_attachment(mail)

你可以重命名你的附件,使用

zmail.get_attachment(mail,'example.zip')

支持的邮件服务商:列表中的邮件服务商已经被测试可正常使用

支持的邮件服务商

如果你的邮箱不在此列,前往Github提交issue。

感谢您的阅读,以上就是今天为大家分享的Python开源项目——用zmail简单地发邮件,你看懂了吗?看懂了就赶紧自己尝试着动手练习一下,并把邮件发出去吧!好了,更多Python有趣有料的内容尽在达内Python培训机构官网,敬请关注!

免责声明:内容和图片源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

预约申请免费试听课

填写下面表单即可预约申请免费试听! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:python培训教程:Python 2.X与3.X快速切换版本
下一篇:【Python习题库】开启Python之旅

python基础-面向对象编程

Python基础语法——条件控制以及循环语句

Python爬虫之申万指数抓取

Copyright © 2023 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省