接着上一篇文章,可用将监控信息发送给邮件中来实现一些告警监控。这一篇文章就来实践开源库yagmail库。
先来个简单的测试。笔者使用的是163邮箱来发送邮件,注意需要进入邮箱开启SMTP服务,然后得到一个授权码,用于登录第三方邮件客户端的专用密码。那么 password替换为授权码即可。官网上有库的详细说明yagmail · PyPI 。
#导入发送邮件API
import yagmail
#链接邮箱服务器
yag = yagmail.SMTP(user="****@163.com", password="****", host='smtp.163.com')
#添加邮件标题
subject = "这是一个测试邮件"
# 邮箱正文
contents = '测试邮件内容'
#添加发送人
email_name = ['****@qq.com','****@163.com']
# 发送邮件
yag.send(email_name, subject, contents)
#关闭链接
yag.close()
如果调试时出现错误,一般就是三个方面的问题:安装yagmail库,smtp服务没开启,邮箱授权码要写对。
但是笔者在上一篇文章-Python使用psutil库监控服务器 的程序中发送邮件时一直存在告警,开始以为是库安装问题,切换root用户安装还是存在问题。有问题代码如下:
花费时间找了一圈才解决两个问题。
1、port=25
指定端口25时会发送失败,查看site-packages下的源码才知道端口号邮件不是25了。
2、encode('utf-8')
encode转码返回的是bytes类型的数据,而不是要求的str类型,直接删除即可。
其他使用方法。
1、 查看yagmail库的github使用说明,yagmail库可以指定链接以及加载图片,比如
yag.send(to=to,subject=subject,contents=[body,html,img])
2、还可以增加附件,比如
yag.send(to=recipients,subject=email_subject,contents=contents,attachments= ['path/to/attachment1.png','path/to/attachment2.pdf'])
3、同时,直接在代码里写明文的密码显然是不安全的,推荐使用 keyring。如果你是虚拟环境使用keyring的话,pypi官网上有信息配置资料。
4、使用上下文管理器进一步优化关闭链接的逻辑
网友评论