文章来源: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. Windows和Ubuntu使用网线直连搭建局域网

    1.Windows下的配置:右键右下角的网络图标(或者右键网络→属性)→更改适配器设置→以太网→右键属性→TCP/IPv4→IP地址(192.168.1.3)→子网掩码(255.255.255.0)→ ...

  2. (转)nginx应用总结(1)--基础认识和应用参数优化配置

    在linux系统下使用nginx作为web应用服务,用来提升网站访问速度的经验已五年多了,今天在此对nginx的使用做一简单总结. 一.nginx服务简介Nginx是一个高性能的HTTP和反向代理服务 ...

  3. spring和springmvc是单例还是多例

    这么说其实不规范 spring的bean    默认是单例 springmvc的controller    默认是单例 所以最好不要在controller里定义成员变量 都可通过注解 @scope=p ...

  4. docker部署mysql远程连接 解决1251 client does not support ..

    现象:用虚拟机上Docker启动mysql之后无法在本地安装的navicat上远程连接已启动的mysql,错误截图: 原因:mysql 8.0 默认使用 caching_sha2_password 身 ...

  5. 构造方法,this,super,final,static

    1构造方法 一个Person类,属性都被private了,外界无法直接访问属性,必须对外提供相应的set和get方法.但如果需要在创建对象的同时明确对象的属性值,就需要构造方法了. 1.1定义 构建创 ...

  6. Kendo UI 移动应用开发简介

    Kendo UI 移动应用开发简介 Kendo UI 支持开发 Web 应用,前面介绍的 SPA,也支持开发移动应用,至于使用 HTML5 + JavaScript + CSS 开发移动是不是一个好的 ...

  7. There is much opportunity for anyone willing to dedicate himself to his labors.

    There is much opportunity for anyone willing to dedicate himself to his labors.付出努力的人才有机会出人头地.

  8. 织梦修改“dedecms提示信息”

    1.根目录下include文件夹,找到common.func.php: 2.根目录下dede文件夹(管理目录默认dede),找到sys_data_done.php: 3.打开以上2个.php文件,把“ ...

  9. Android tess_two Android图片文字识别

    文字识别一般都用的tesseract-ocr. GitHub:https://github.com/tesseract-ocr/tesseract 而Android对应的比较推荐的有个tess-two ...

  10. Linux下端口被占用如何解决???

    有时候关闭软件后,后台进程死掉,导致端口被占用.下面以JBoss端口8083被占用为例,列出详细解决过程. 解决方法: 1.查找被占用的端口 netstat -tln netstat -tln | g ...