python笔记37-史上最好用的发邮件zmail
简介
python发邮件之前用的是smtplib,代码太过于复杂,学习成本大,并且很多人学不会。之前专门写过一篇https://www.cnblogs.com/yoyoketang/p/7277259.html,无奈还是一大堆人发送邮件失败。
今天介绍一个最简单,最强大的发邮件的包zmail,简单好上手,妈妈再也不用担心我不会发邮件了!
github原文地址https://github.com/ZYunH/zmail
zmail简介
Zmail允许您在python中尽可能发送和接收电子邮件。无需检查服务器地址或制作您自己的MIME对象。使用zmail,您只需要关心您的邮件内容。
Zmail只在python3中运行,不需要第三方模块。不支持python2
pip3 install zmail
特征:
- 自动查找服务器地址及其端口。
- 自动使用合适的协议登录。
- 自动将python字典转换为MIME对象(带附件)。
- 自动添加邮件标题和本地名称,以避免服务器拒绝您的邮件。
- 轻松自定义邮件标题。
- 支持HTML作为邮件内容。
- 只需要python> = 3.5,您可以将其嵌入到项目中而无需其他模块。
在使用之前,请确保:
- 使用python3
- 在您的邮件中打开SMTP / POP3功能(对于@ 163.com和@ gmail.com,您需要设置您的应用程序私人密码)
然后,您只需要导入zmail即可
快速开始
import zmail
server = zmail.server('yourmail@example.com', 'yourpassword')
# Send mail
server.send_mail('yourfriend@example.com',{'subject':'Hello!','content_text':'By zmail.'})
# Or to a list of friends.
server.send_mail(['friend1@example.com','friend2@example.com'],{'subject':'Hello!','content_text':'By zmail.'})
# Retrieve mail
latest_mail = server.get_latest()
zmail.show(latest_mail)
案例
验证SMTP和POP功能是否正常工作
import zmail
server = zmail.server('yourmail@example.com’, 'yourpassword')
if server.smtp_able():
pass
# SMTP function.
if server.pop_able():
pass
# POP function.
如果SMTP和POP工作正常,该函数将返回True,否则返回Fasle。
发送邮件
import zmail
mail = {
'subject': 'Success!', # Anything you want.
'content_text': 'This message from zmail!', # Anything you want.
'attachments': ['/Users/zyh/Documents/example.zip','/root/1.jpg'], # Absolute path will be better.
}
server = zmail.server('yourmail@example.com', 'yourpassword')
server.send_mail('yourfriend@example.com', mail)
您可以通过添加 'from':'Boss <mymail@foo.com>'
邮件来定义发件人的姓名。
收件人列表
server.send_mail([ ' yourfriend@example.com ',' 12345 @ example.com ' ],mail)
你也可以命名它们(使用元组,首先是它的名字,下一个是它的地址)
server.send_mail([('Boss','yourfriend@example.com'),'12345@example.com'], mail)
发送HTML内容
mail = {
'subject': 'Success!', # Anything you want.
'content_html': ['HTML CONTENT'],
'attachments': '/Users/zyh/Documents/example.zip', # Absolute path will be better.
}
server.send_mail('yourfriend@example.com',mail)
或者
with open('/Users/example.html','r') as f:
content_html = f.read()
mail = {
'subject': 'Success!', # Anything you want.
'content_html': content_html,
'attachments': '/Users/zyh/Documents/example.zip', # Absolute path will be better.
}
server.send_mail('yourfriend@example.com',mail)
使用抄送
server.send_mail(['foo@163.com','foo@126.com'],mail,cc=['bar@163.com'])
同样,你也可以命名它们(使用元组,首先是它的名字,下一个是它的地址)
server.send_mail(['foo@163.com','foo@126.com'],mail,cc=[('Boss','bar@163.com'),'bar@126.com'])
自定义您的服务器
server = zmail.server('username','password',smtp_host='smtp.163.com',smtp_port=994,smtp_ssl=True,pop_host='pop.163.com',pop_port=995,pop_tls=True)
收到你的邮件
获取最新邮件
import zmail
server = zmail.server('yourmail@example.com‘, 'yourpassword')
mail = server.get_latest()
通过其ID检索邮件。
mail = server.get_mail(2)
获取邮件列表(主题,之后,之前,发件人)
mail = server.get_mails(subject='GitHub',start_time='2018-1-1',sender='github')
在示例中,如果'GitHub'在邮件的主题中,它将被匹配,例如'[GitHub]您的密码已更改'
发件人是一样的。
您还可以指定邮件范围。
mail = server.get_mails(subject='GitHub',start_time='2018-1-1',sender='github',start_index=1,end_index=10)
获取邮箱信息。
mailbox_info = server.stat()
结果是2个整数的元组:(message count, mailbox size)。
解析你的邮件
在zmail中,所有邮件都将映射到python字典,您可以通过访问您的邮件
subject = mail['subject']
显示邮件,使用zmail.show()
import zmail
server = zmail.server('yourmail@example.com', 'yourpassword')
mail = server.get_latest()
zmail.show(mail)
查看邮件中的所有内容。
import zmail
server = zmail.server('yourmail@example.com', 'yourpassword')
mail = server.get_latest()
for k,v in mail.items():
print(k,v)
github原文地址https://github.com/ZYunH/zmail
python笔记37-史上最好用的发邮件zmail的更多相关文章
- HCNP学习笔记之史上最全华为路由器交换机配置命令大合集
先来一张思科和华为命令的对照表: 史上最全华为路由器交换机配置命令大合集,熟练掌握下面的华为路由器交换机配置知识点,你只需花几分钟的时间就能明白华为路由器交换机配置.交换机的配置命令等等. 华为路由器 ...
- Python 实现网页截屏、查库、发邮件
本文介绍了使用 Python(2.7版本)实现网页截屏.查库.发邮件的 demo.用到了 selenium.phantomjs.mailer.jinja2.mysqldb 还有 image,都是比较典 ...
- Python 爬取1688货源重量,自动发邮件到指定邮箱(qq),设置定时运行程序
1 # -*- coding: utf-8 -*- 2 # @Time : 2020/7/6 13:46 3 # @Author : Chunfang 4 # @Email : 3470959534@ ...
- python 检测nginx状态,若无法访问发邮件通知
应用场景:用来检测网站可用性,访问失败,则发邮件通知 #!/usr/bin/env python import urllib2,time,smtplib,string,logging from con ...
- python学习教程,史上最全面的python学习路线图
Python 是Web 开发.游戏脚本.计算机视觉.物联网管理和机器人开发的主流语言之一,随着Python用户可以预期的增长,它还有机会在多个领域里登顶.Python学习路线分享给你. 阶段一是Pyt ...
- python try 异常处理 史上最全
在程序出现bug时一般不会将错误信息显示给用户,而是现实一个提示的页面,通俗来说就是不让用户看见大黄页!!! 有时候我们写程序的时候,会出现一些错误或异常,导致程序终止. 为了处理异常,我们使用try ...
- 23种计模式之Python实现(史上最全最通俗易懂)内容整改中
第一篇 Python与设计模式:前言 第二篇(23种设计模式) 创建类设计模式(5种) 单例模式.工厂模式.简单工厂模式.抽象工厂模式.建造者模式.原型模式 结构类设计模式(7种) 代理模式.装饰器模 ...
- python笔记05
python笔记05 数据类型 上个笔记知识点总结: 列表中extend特性:extend,(内部循环,将另外一个列表,字符串.元组添加到extend前的列表中) li.extend(s),将s中元素 ...
- python笔记06
python笔记06 数据类型 上个笔记内容补充 补充 列表 reverse,反转. v1 = [1,2,3111,32,13] print(v1) v1.reverse() print(v1) v1 ...
随机推荐
- ssh_exchange_identification: read: Connection reset by peer 解决思路
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/Jdk_yxs/article/deta ...
- 最常见的Java面试题及答案汇总(四)
反射 57. 什么是反射? 反射主要是指程序可以访问.检测和修改它本身状态或行为的一种能力 Java反射: 在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能 ...
- 解决SQL语句在Dapper执行超时比Query慢的问题
在语句结尾加上 Add OPTION (RECOMPILE) to the end https://stackoverflow.com/questions/10933366/sp-executesql ...
- [IISNode] 如何在IIS7/8下,配置一个可以通过IIS访问NodeJS的web项目
参考了一下几篇很给力的文章,在每篇文章中,都学到了解决遇到的问题的答案: (1)用iisnode模块,让你的Node.js应用跑在Windows系统IIS中 (2)让IIS能够运行Nodejs (3) ...
- python语法入门之变量
目录 一.变量 1.1 什么是变量 1.2 怎么使用变量 1.3 变量名的命名规范 1.4 变量名的命名风格 1.5 变量的三大特征 2.常量 一.变量 1.1 什么是变量 # 变量就是可以变化的量, ...
- git对某个文件取消跟踪
git rm --cached readme1.txt 删除readme1.txt的跟踪,并保留在本地. git rm --f readme1.txt 删除readme1.txt的跟踪,并 ...
- JS中,JSON 和 对象互转,数组和字符串的转换?
JSON 与 J对象转化 要实现从对象转换为 JSON 字符串,使用 JSON.stringify() 方法: 如下: var json = JSON.stringify({a: 'Hello', b ...
- Linux查看CPU信息计算CPU核数量
1. 物理CPU的个数: cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l 2. 每个物理CPU的核心数量: ...
- redis源码分析(二)-rio(读写抽象层)
Redis io抽象层 Redis中涉及到多种io,如socket与file,为了统一对它们的操作,redis设计了一个抽象层,即rio,使用rio可以实现将数据写入到不同的底层io,但是接口相同.r ...
- MNIST机器学习入门(二)
在前一个博客中,我们已经对MNIST 数据集和TensorFlow 中MNIST 数据集的载入有了基本的了解.本节将真正以TensorFlow 为工具,写一个手写体数字识别程序,使用的机器学习方法是S ...