0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

马哥Linux运维 来源:lq 2019-01-30 15:17 次阅读

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

GitHub:https://github.com/ZYunH/zmail

其他轮子的缺点:

服务端拒信:首要问题。很多其他的轮子需要自己构造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和@http://gmail.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@example.com, '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@example.com, 'yourpassword')

mail = server.get_latest()

zmail.show(mail)

输出 :

content-type multipart/mixed

subject Success!

to zmail_user

from zmail

date 2018-2-301: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@example.com, 'yourpassword')

mail = server.get_latest()

zmail.get_attachment(mail)

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

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

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

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模块
    +关注

    关注

    7

    文章

    2670

    浏览量

    47333
  • 邮件
    +关注

    关注

    0

    文章

    31

    浏览量

    18799
  • python
    +关注

    关注

    56

    文章

    4781

    浏览量

    84441

原文标题:Python开源项目介绍:用zmail简单地发邮件

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    labview发邮件实现与远程预警

    labview发邮件实现与远程预警
    发表于 08-18 11:48

    要看portel99教程的给我发邮件

    要看portel99教程的给我发邮件fflyinsky@126.com
    发表于 05-23 08:16

    如何在嵌入式Linux下发邮件

    有谁知道如何在嵌入式Linux下发邮件?的2440开发板...
    发表于 05-08 10:18

    版主招募ing、交流/建议、板块运营 发邮件

    版主招募ing、交流/建议、板块运营请发邮件到 users@elecfans.com
    发表于 11-10 10:40

    GPRS模块收发邮件有参考的资料吗

    MC52ir3 GPRS模块,可以收发邮件大家有参考的资料吗,
    发表于 01-28 04:24

    请问这个是发邮件到哪里的?

    One easy way to import a file is to e-mail it to yourself and then select open in SensorTag app.请问这个是发邮件到哪里,在app里看到有一个IBMcloud,是不是和哪个有关。
    发表于 10-11 08:14

    Python爬虫8个常用的爬虫技巧分析总结

    python也差不多一年多了,python应用最多的场景还是web快速开发、爬虫、自动化运维:写过简单网站、写过自动发帖脚本、写过收发邮件
    的头像 发表于 08-18 11:45 5084次阅读

    精选10个Python开源项目

    过去一个月里,我们对近 250 个 Python 开源项目进行了排名,并挑选出热度前 10 的项目
    的头像 发表于 11-12 09:47 6297次阅读

    简单:Python让Excel飞起来

    简单:Python让Excel飞起来
    发表于 05-25 10:46 54次下载

    简单电源开源项目

    电子发烧友网站提供《简单电源开源项目.zip》资料免费下载
    发表于 07-06 11:12 9次下载
    <b class='flag-5'>简单</b>电源<b class='flag-5'>开源</b><b class='flag-5'>项目</b>

    如何用python发邮件呢?

    先做一些准备,把邮件SMTP服务器、收发mail、邮件标题和正文准备好。
    的头像 发表于 03-06 14:49 752次阅读

    怎么Python构建一个自动发送邮件的脚本

    ? 类似的应用场景还有很多,不仅仅是在股票策略提醒上,比如定时向某些人发送邮件;网站宕机了,实时发送邮件提醒;网站负载过高,发送邮件提醒......等等。 下面就来讲讲怎么
    的头像 发表于 10-21 14:47 725次阅读
    怎么<b class='flag-5'>用</b><b class='flag-5'>Python</b>构建一个自动发送<b class='flag-5'>邮件</b>的脚本

    怎么Python构建一个自动发送邮件的脚本

    呢? 类似的应用场景还有很多,不仅仅是在股票策略提醒上,比如定时向某些人发送邮件;网站宕机了,实时发送邮件提醒;网站负载过高,发送邮件提醒......等等。 下面就来讲讲怎么
    的头像 发表于 10-31 16:36 515次阅读
    怎么<b class='flag-5'>用</b><b class='flag-5'>Python</b>构建一个自动发送<b class='flag-5'>邮件</b>的脚本

    如何用Python批量定制化发送邮件

    现实生活中,如果只是发邮件给自己,像上一篇文章那样简陋的格式是可以接受的,但若要针对每个人进行邮件的定制化,群发给公司客户、内部员工、亲戚朋友,则需更加高级的邮件发送方式。 我们可以通过HTML制作
    的头像 发表于 11-01 11:32 2167次阅读

    如何使用Python编写脚本来自动发送邮件

    Python是一种非常流行的编程语言,可以用于多种用途,包括自动化任务。其中一个常见的自动化任务是自动发送邮件。在本文中,我们将介绍如何使用Python编写脚本来自动发送
    的头像 发表于 12-07 11:36 1300次阅读