Python自动化运维笔记(六):使用smtplib模块发送电子邮件
来源:互联网 发布:伦敦生活 知乎 编辑:程序博客网 时间:2024/06/07 01:17
运行环境:
Python3.6
,Windwos10 RS1
,Pycharm
参考书籍—《Python自动化运维--技术与最佳实践》
刘天斯著
模块介绍
我们在监测系统状态发送警报信息,或者业务质量报表的时候,可以通过发送邮件来第一时间获取服务状态。SMTP
是发送邮件的协议,POP
是接收邮件的协议。Python
内置对SMTP
的支持,可以发送纯文本邮件、HTML邮件
以及带附件的邮件。Python
对SMTP
支持有smtplib
和email
两个模块,email
负责构造邮件,smtplib
负责发送邮件。
所以我们可以使用smtplib
模块来实现邮件收发功能,模拟一个smtp
客户端。在Python2.3
以上的版本中已经自带smtplib
模块。
模块的使用
常用类SMTP
SMTP
类是smtp
模块中最常用的类:有关于类的定义:
smtplib.SMTP(host[,port[,local_hostname[,,timeout]]])# 可以完成登录、校验、发送、退出等# host参数为远程smtp主机地址,比如stmp.163.com;port为连接端口,默认为25;# local_hostname的作用是在本地的FQDN(完整的域名)发送HELO/EHLO指令# timeout为连接或尝试在多少秒超时。
在SMTP
类中有如下方法:
SMTP.connect([host[,port]]) # 连接远程smtp主机方法,host为远程主机地址,port为远程主机smtp端口,默认25,也可以直接使用host:port形式表示,例如:SMTP.connect("smtp.163.com","25').SMTP.login(user,password) # 远程smtp主机的校验方法,参数为用户名与密码,如SMTP.login("18801457794@139.com",'123456').SMTP.sendmail(from_addr,to_addrs,msg[,mail_options,rcpt_options]) # 实现邮件的发送功能,参数依次为发件人,收件人,邮件内容,例如:SMTP.sendmail("python@163.com",'404408853@qq.com',body),其中body内容定义如下: """From:python@163.com To:404408853@qq.com Subject:test mail test mail body"""SMTP.starttls([keyfile[,certfile]]) # 启用TLS(安全传输)模式,所有SMTP指令都讲加密传输,例如使用gmail的stmp服务器时需要启动此项才能正常发送邮件SMTP.quit() # 端口smtp服务器的连接
邮件发送代码示例
我用的是QQ邮箱
向QQ邮箱
发送邮件,下面附上一张QQ邮箱
的配置参考图,SMTP
默认端口25
:
参考代码如下:
# -*- coding: utf-8 -*-# @Time : 2017/10/3 11:24 # @File : smtplibTest.py # @Software: PyCharmimport smtplib## user = "你的邮箱地址"# password = "你的邮箱密码"HOST = "smtp.qq.com" # 定义smtp主机SUBJECT = "This is my first Python Email" # 定义邮件主题TO = "2479696353@qq.com" # 定义邮件收件人FROM = "962457839@qq.com" # 定义邮件发件人text = "python test mail" # 邮件的内容BODY = "\r\n".join(( # 组装sendmail方法的邮件主体内容,各段以"\r\n"进行分隔 "From:%s" % FROM, "To:%s" % TO, "Subject:%s" % SUBJECT, "", text))server = smtplib.SMTP() # 创建一个SMTP对象server.connect(HOST, "25") # 通过connect方法连接smtp主机server.starttls() # 启动安全传输模式server.login("962457839@qq.com", "**MyPassword**") # 邮件账户登录校验server.sendmail(FROM, TO, BODY) # 邮件发送server.quit() # 断开smtp连接
运行效果:
值得一提的是,我刚开始是按照书上的代码进行照搬的,书上的操作环境是Python2.6
,而我使用的是Python3.6
。在BODY
内容时会抛出异常,一查原因原来是在Python2
中,string
模块中有一个join()
函数,用于以特定的分隔符分隔源变量中的字符串,将其作为新的元素加入到一个列表中;但是在Python3
中,string
模块中取消了join()
函数,join()
函数作为一个全局函数被使用。
所以可以按照下面两个作为参考对变量BODY
进行更改:
Python2环境中
import string# 组装sendmail方法的邮件主体内容,各段以"\r\n"进行分隔BODY = string.join(( "From: %s" % FROM, "To: %s" % TO, "Subject: %s" % SUBJECT, "" text ),"\r\n")
Python3环境中
import string# 组装sendmail方法的邮件主体内容,各段以"\r\n"进行分隔BODY = "\r\n".join(( "From:%s" % FROM, "To:%s" % TO, "Subject:%s" % SUBJECT, "", text))
另外可以使用email模块
来实现邮件的个性化定制。
如果是想实现更多的功能,请参考廖雪峰的这篇教程(链接)
- Python自动化运维笔记(六):使用smtplib模块发送电子邮件
- 使用python内置smtplib模块发送邮件
- Python使用smtplib发送邮件
- python模块学习 ---- smtplib 邮件发送
- python模块学习 ---- smtplib 邮件发送
- python模块学习 ---- smtplib 邮件发送
- python模块学习 ---- smtplib 邮件发送
- python模块学习 ---- smtplib 邮件发送
- python模块学习 ---- smtplib 邮件发送
- 转:python模块学习 ---- smtplib 邮件发送
- python模块学习 ---- smtplib 邮件发送
- python模块学习 ---- smtplib 邮件发送
- python:利用smtplib模块发送邮件
- 使用python发送电子邮件
- 使用python发送电子邮件
- 使用Python发送电子邮件
- 使用PYTHON发送电子邮件
- PYTHON模块学习之邮件发送模块smtplib(2015-4-3)
- 信号量基本操作函数用法
- 从零开始写Python爬虫 --- 1.7 爬虫实践: 排行榜小说批量下载
- BitBoost——The Block
- Qt Creator工作目录
- 线段树 or 树状数组求逆序对
- Python自动化运维笔记(六):使用smtplib模块发送电子邮件
- 将Excel列转为字符串存到数据库表中
- 什么是-持续集成
- 在window上提交spark代码到远程测试环境上运行
- CTU Open Contest 2016 Suspicious Samples(单调队列)
- Linux自定义命令别名配置
- 有树形依赖的背包问题
- LeedCode Longest Substring Without Repeating Characters
- 认识AS中的Gradle