Python 使用Python程序发送邮件
通常,电子邮件的作用是有相对来说比较重要的事情,比如工作内容的确认,工作中的上级交代任务向下派发,公司内部的人事任免,公司内部重要事项的通知等事件,或者是在运维的工作中,当某项运维系统的重要数据超出正常范围,需要予以关注,某项服务的状态不在正常范围,需要运维者对服务予以调整,以及各类软件,网站注册确认等等各项事件,诚然,有微信,有钉钉等各类软件,但比较来说,比较正式的通知仍然以邮件通知为主。作为在international中历史悠久的一个人际交流服务,还是有着一定的不可替代的作用的。
那么,既然作为一名程序员,普通的网站APP登陆邮箱然后发送信件不能满足一定的逼格,并且,在自动化运维的工作中,也需要使用邮件作为人机之间的交互接口,从而提高工作效率。例如,编写Python脚本时刻监控服务器的各类服务运行状态,监控服务器的内存使用率,cpu硬盘等等的使用率及温度等各项数据,如果超出了预设的值,那么发送邮件通知运维管理人员查看并处理问题,使得服务能够正常的提供。
下面,简单的举个实例,使用163邮箱发送邮件到QQ邮箱,发送本机为Windows的任务管理器的实时界面。
import os
import smtplib
from email.header import Header
from email.mime.text import MIMEText
def stm():
send_mail = "你的163邮箱@163.com"
revw = "523674801@qq.com"
task=os.popen('tasklist').read()#读取Windows命令运行后的结果,并保存为字符串形式赋值给变量#
task
zhengwen = task#邮件的正文部分,必须为字符串形式
msg = MIMEText(zhengwen)#生成邮件对象
msg['From'] = Header('你的163邮箱@163.com')#显示发送人
msg['TO'] = Header('你的QQ邮箱@qq.com')#显示抄送人
sub = "实时监控"#这是邮件的主题
msg['subject'] = Header(sub, 'utf-8')#主题的编码指定
smtp = smtplib.SMTP()
smtp.connect('smtp.163.com', 25)#如果是sina邮箱,改为‘smtp.sina.cn’
try:
smtp.login('你的163邮箱@163.com', '你的163邮箱登录密码')#模拟正常登录163邮箱服务器
smtp.sendmail( send_mail,revw, msg.as_string())#发送邮件的动作
print('发送成功')
except Exception as e:
print('登录失败,请检查密码')
#如果,输入密码错误或者别的原因,如网络问题,捕获异常,在此暂定为密码错误异常
stm()
该段代码,需要导入的包比较多,os包是提取任务管理器的内容,smtblib是实例化邮件的包,header包是邮件的信息头构造包,mimetext包是显示并发送邮件文本内容。
邮件发送带附件以及邮件内镶嵌图片等功能需要在导入mimeimage包,以及另外数个相关包,本文暂不讨论。