文章来源:GITHub:https://github.com/kootenpv/yagmail

  1. 安装
pip3 install yagmail
pip3 install keyring
  1. 简单例子
import yagmail
yag = yagmail.SMTP(user = 'xxx@163.com', password = 'xxx', host = 'smtp.163.com')
yag.send(to = 'xxx@163.com', subject = 'This is subject', contents = 'This is content')

注意:

  • 如果你的邮箱没有开通IMAP/POP3/SMTP服务,就会提示如下错误信息:
    smtplib.SMTPAuthenticationError: (550, b'User has no permission')
    以163邮箱为例,解决方案在网页上登录自己邮箱,点击“设置->POP3/SMTP/IMAP”,勾选“POP3/STMP服务”和“IMAP/STMP服务”,弹窗会提示你设置授权码,点击“确定”,点击“开启”,通过验证后,即可开启。记住自己输入的授权码,在password中输入授权码,即可登录。
  • 如果程序运行没出错,而目标邮箱没有收到邮件,请检查垃圾箱。
  1. 给多个邮箱发邮件
yag.send(to = ['aa@163.com','bb@qq.com','cc@gmail.com'], 'subject', 'contents')

  

  1. 发送附件
yag.send(to = 'xxx@163.com', subject = 'subject',
contents = ['hello', 'C:\\Users\\Desktop\\test.txt'])

  

注意:如果邮件发送之后被退回,那么程序不会显示任何错误信息,但是发件人的邮箱会有退信邮件。

  1. 更多细节
yagmail.register('mygmailusername', 'mygmailpassword')

  

以下是项目介绍:

yagmail -- Yet Another GMAIL/SMTP client

  

这里的目标是尽可能简单,无痛地发送电子邮件。

最后,您的代码将如下所示:

import yagmail
yag = yagmail.SMTP()
contents = ['This is the body, and here is just text http://somedomain/image.png',
'You can find an audio file attached.', '/local/path/song.mp3']
yag.send('to@someone.com', 'subject', contents)

或者简单的单行:

yagmail.SMTP('mygmailusername').send('to@someone.com', 'subject', 'This is the body')

  

请注意,它将从您的密钥环安全地读取密码(如下所示)。如果您不想这样,您也可以使用以下内容进行初始化:

yag = yagmail.SMTP('mygmailusername', 'mygmailpassword')

  

但老实说,你想在你的脚本中写下你的密码吗?

同样,我使用我的用户名.yagmail在我的主文件夹中命名的文件中。

目录

部分 说明
安装 在此处查找有关如何安装yagmail的说明
用户名和密码 不再需要在脚本中填写用户名和密码
开始连接 开始吧
可用性 显示发送的一些使用模式
收件人 如何发送给多个人,给别名或发送给自己
神奇的内容 真的很容易发送文本,HTML,图像和附件
反馈 如何向我发送反馈
路线图(和优先事项)
错误 处理发送电子邮件的人员的常见错误列表

安装

对于Python 2.x和Python 3.x分别:

pip install yagmail[all]
pip3 install yagmail[all]

  

如果您在安装密钥环时遇到问题,请尝试不安装,即pip install yagmail

作为旁注,yagmail现在还可以用于从命令行发送电子邮件。

用户名和密码

钥匙圈引用

The Python keyring lib provides a easy way to access the system keyring service from python. It can be used in any application that needs safe password storage.

你知道你想要它。通过打开Python解释器并运行来设置它:

import yagmail
yagmail.register('mygmailusername', 'mygmailpassword')

  

事实上,它只是一个包装keyring.set_password('yagmail', 'mygmailusername', 'mygmailpassword')

如果未给出密码且密钥环中未找到用户,getpass.getpass()则用于提示用户输入密码。进入此一次后,它可以存储在钥匙圈中,永远不会再问。

另一个便利是将.yagmail文件保存在您的主文件夹中,只包含电子邮件用户名。然后,您可以省略所有内容,只需使用yagmail.SMTP()连接即可。当然,这不适用于更多帐户,但它可能是一个很好的默认值。根据要求,我会考虑在此.yagmail文件中添加更多详细信息(主机,端口和其他设置)。

开始连接

yag = yagmail.SMTP('mygmailusername')

  

请注意,此连接是可重用的,可关闭的,当它离开范围时,它将在CPython中自行清理。

正如tilgovi#39中指出的那样,SMTP不会在PyPy中自动关闭。with在这种情况下应该使用上下文管理器。

可用性

定义一些变量:

to = 'santa@someone.com'
to2 = 'easterbunny@someone.com'
to3 = 'sky@pip-package.com'
subject = 'This is obviously the subject'
body = 'This is obviously the body'
html = '<a href="https://pypi.python.org/pypi/sky/">Click me!</a>'
img = '/local/file/bunny.png'

  

所有变量都是可选的,并且知道甚至to不需要(您将向自己发送电子邮件):

yag.send(to = to, subject = subject, contents = body)
yag.send(to = to, subject = subject, contents = [body, html, img])
yag.send(contents = [body, img])

  

此外,如果您不想明确,可以执行以下操作:

yag.send(to, subject, [body, img])

  

收件人

也可以通过提供电子邮件字符串列表而不是单个字符串来发送给一组人:

yag.send(to = to)
yag.send(to = [to, to2]) # List or tuples for emailadresses *without* aliases
yag.send(to = {to : 'Alias1'}) # Dictionary for emailaddress *with* aliases
yag.send(to = {to : 'Alias1', to2 : 'Alias2'}

  

不做任何to争论将向您自己发送电子邮件。从这个意义上讲,yagmail.SMTP().send()已经可以发送电子邮件了。请注意,如果未使用显式,则将to = ...使用第一个参数发送到。可以避免像:

yag.send(subject = 'to self', contents = 'hi!')

  

请注意,默认情况下,所有电子邮件地址都使用soft_email_validation==True(默认)进行保守验证。

的oauth2

使用Oauth2进行身份验证甚至更安全,因为您可以撤消令牌的权限。

是oauth2代码严重依赖的最佳来源之一。

代码:

yag = SMTP("user@gmail.com", oauth2_file="~/oauth2_creds.json")
yag.send(subject="Great!")

  

当无法找到文件时,它会提示a google_client_id和a google_client_secret。可以在前一个链接之后获得这些变量。

提供后,终端中将显示一个链接,您应该遵循该链接以获取google_refresh_token。再次粘贴,你就安装好了!

请注意,获取该文件的人可以发送电子邮件,但没有其他内容。一旦发现,您可以直接禁用令牌。

神奇 contents

这个contents论点将被巧妙地猜到。它可以传递一个字符串(将变成一个列表); 或者一份清单。对于列表中的每个对象:

  • 如果它是字典,它将假设键是内容,值是别名(仅适用于当前的图像!),例如{'/ path / to / image.png':'MyPicture'}
  • 它将尝试查看内容(字符串)是否可以在本地读取,例如'/path/to/image.png'
  • 如果不可能,它将检查字符串是否有效html例如 <h1>This is a big title</h1>
  • 如果没有,那一定是文字。例如'Hi Dorika!'

请注意,本地文件可以是html(内联); 其他一切都会附上。

本地文件需要具有推断其内容类型的扩展名。

截至0.4.94版本,raw并且inline已被添加。

  • raw 确保字符串不会收到任何“魔法”(内联,html,附加)
  • inline 将使图像出现在文本中。

反馈

我将尽力在24小时内回应Github .....

请给我一些反馈意见SMTP().feedback('Great job!'):-)

路线图(和优先事项)

  • 增加了Image的可能性
  • 可选的SMTP参数应该使用** kwargs到我的SMTP
  • CC / BCC(高)
  • 自定义名称(高)
  • 允许发送返回预览而不是实际发送
  • 只需在“内容”中使用附件,智能猜测(高,复杂)
  • 列表中的附件(内容),以便它们实际定义订单(中)
  • 使用lxml查看它是否可以解析html(低)
  • 增加测试(高)
  • 允许缓存内容(低)
  • 其他类型(低) (例如,mp3也可以,如果有什么不起作用,请告诉我)
  • 可能是内容类型/默认类型的命名问题
  • 选择内联或不以某种方式(高)
  • 使lxml模块可选魔术(高)
  • 为复杂内容提供自动回退(中) (应该管用)
  • yagmail 安装时作为CLI上的命令
  • feedback在SMTP上添加功能可以直接向我发送反馈:-)
  • 添加了验证emailaddresses的选项...
  • 但是,我对错误电子邮件的错误处理/登录不满意
  • 记录计数和邮件功能(非常低)
  • 向异常类添加文档(低)
  • 添加raw和'内联```
  • 的oauth2
  • ~~ Travis CI整合~~
  • ~~为所有功能添加文档(高,中途)~~
  • 准备官方1.0
  • 再次浏览文档(中)
  • 允许.yagmail文件包含更多参数(中)
  • 添加缩小图像的选项(低)

错误

yagmail 邮箱的使用的更多相关文章

  1. python 数据库mysql、redis及发送邮件

    python 关系型数据库链接使用--mysql import pymysql # 引用mysql模块 # 创建连接,指定数据库的ip地址,账号.密码.端口号.要操作的数据库.字符集coon = py ...

  2. python自动发邮件库yagmail

    #### 一般发邮件方法 我以前在通过Python实现自动化邮件功能的时候是这样的: import smtplib from email.mime.text import MIMEText from ...

  3. yagmail让发邮件更简单

    这是我迄今为止碰到的最良心的库,真tm简单啊 import yagmail # 连接邮箱服务器 yag = yagmail.SMTP(user="wuyongqiang2012@163.co ...

  4. python之yagmail模块--小白博客

    yagmail 实现发邮件 yagmail 可以简单的来实现自动发邮件功能. 安装 pip install yagmail 简单例子 import yagmail #链接邮箱服务器 yag = yag ...

  5. yagmail 实现发邮件

    yagmail 实现发邮件 yagmail 可以更简单的来实现自动发邮件功能. github项目地址: https://github.com/kootenpv/yagmail 安装 pip insta ...

  6. python中用psutil模块,yagmail模块监控CPU、硬盘、内存使用,阈值后发送邮件

    import yagmailimport psutildef sendmail(subject,contents): #连接邮箱服务器 yag = yagmail.SMTP(user='邮箱名称@16 ...

  7. 天气提醒邮件服务器(python + scrapy + yagmail)

    天气提醒邮件服务器(python + scrapy + yagmail) 项目地址: https://gitee.com/jerry323/weatherReporter 前段时间因为xxx上班有时候 ...

  8. Python自动发邮件-yagmail库

    之前写过用标准库使用Python Smtplib和email发送邮件,感觉很繁琐,久了不用之后便忘记了.前几天看知乎哪些Python库让你相见恨晚?,看到了yagmail第三方库,学习过程中遇到一些问 ...

  9. Python自动发邮件——smtplib和email库和yagmail库

    ''' 一.先导入smtplib模块 导入MIMEText库用来做纯文本的邮件模板 二.发邮件几个相关的参数,每个邮箱的发件服务器不一样,以163为例子百度搜索服务器是 smtp.163.com 三. ...

随机推荐

  1. Hive_Hive的数据模型_视图

    - 视图是一种虚表,是一个逻辑概念:可以跨越多张表- 视图建立在已有表的基础上,视图赖以建立的这些表称为基表.- 视图可以简化复杂的查询. 创建视图 create view viewName as s ...

  2. CoreCLR源码2

    CoreCLR源码 前一篇我们看到了CoreCLR中对Object的定义,这一篇我们将会看CoreCLR中对new的定义和处理new对于.Net程序员们来说同样是耳熟能详的关键词,我们每天都会用到ne ...

  3. 076 Minimum Window Substring 最小窗口子字符串

    给定一个字符串 S 和一个字符串 T,找到 S 中的最小窗口,它将包含复杂度为 O(n) 的 T 中的所有字符.示例:S = "ADOBECODEBANC"T = "AB ...

  4. wepy开发踩坑记录

    与vue的不同 methods对象只存放tap等事件触发时的方法 events对象只存放$emit及$broadcast方法触发的事件 自定义方法及属性放在与methods平级的位置 props是动态 ...

  5. js动态更换img的src问题

    在本地开发测试过程中,通过js动态更换img的src没有问题,图片正常切换,但是放在服务器上后测试发现,图片不显示,解决方法为:在对应onclick事件执行切换图片的js函数后加上一个return f ...

  6. Java基础语法(Eclipse)

    Java基础语法 今日内容介绍 u Eclipse开发工具 u 超市库存管理系统 第1章 Eclipse开发工具 Eclipse是功能强大Java集成开发工具.它可以极大地提升我们的开发效率.可以自动 ...

  7. Android中文件加密和解密的实现

    最近项目中需要用到加解密功能,言外之意就是不想让人家在反编译后通过不走心就能获取文件里一些看似有用的信息,但考虑到加解密的简单实现,这里并不使用AES或DES加解密 为了对android中assets ...

  8. 宿主机Windows访问虚拟机Linux文件(一)

    如果用户使用windows操作系统,但是在虚拟机下配置Linux内核操作操作系统,往往需要实现通过宿主机Windows操作系统访问Linux内核操作系统中资源.本次实验实现的是宿主机windows 1 ...

  9. selenium报错信息-- Python 中 'unicodeescape' codec can't decode bytes in position XXX: trun错误解决方案

    本以为是缺少utf-8造成的错误,但是加完这个还是报错,于是在网上百度了一下是因为上传的路劲粗无偶导致的 正确的写法是把路劲中“\”变为“\\”,或者在路劲的开头加上“r”,或者在路劲的开头加上“r” ...

  10. 一点对Promise的理解与总结

    全手打原创,转载请标明出处:https://www.cnblogs.com/dreamsqin/p/10959411.html,多谢,=.=~ axios用多了就开始疑惑它里面到底是个啥,虽然总被告知 ...