Python实现自动发送邮件功能
作者:Stephen_XMC 发布时间:2021-04-01 14:41:55
简单邮件传输协议(SMTP)是一种协议,用于在邮件服务器之间发送电子邮件和路由电子邮件。Python提供smtplib模块,该模块定义了一个SMTP客户端会话对象,可用于使用SMTP或ESMTP * 守护程序向任何互联网机器发送邮件。
SMTP通讯的基本流程可以概括为以下几点:
1.连接SMTP服务器
2.登陆用户名和密码
3.发送指定邮件内容
4.退出SMTP连接
一、发送纯文本格式邮件
#coding:utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
import smtplib
from smtplib import SMTP
from email.mime.text import MIMEText
from email.header import Header
#构造纯文本邮件内容
msg = MIMEText('hello,send by Python.....','plain','utf-8')
#发送者邮箱
sender = 'xxxxx@XXXXX.com.cn'
#发送者的登陆用户名和密码
user = 'xxxxx@XXXX.com.cn'
password = 'xxxxxx'
#发送者邮箱的SMTP服务器地址
smtpserver = 'xxxx'
#接收者的邮箱地址
receiver = ['xxxxxx@qq.com','xxxxxx@outlook.com'] #receiver 可以是一个list
smtp = smtplib.SMTP() #实例化SMTP对象
smtp.connect(smtpserver,25) #(缺省)默认端口是25 也可以根据服务器进行设定
smtp.login(user,password) #登陆smtp服务器
smtp.sendmail(sender,receiver,msg.as_string()) #发送邮件 ,这里有三个参数
'''
login()方法用来登录SMTP服务器,sendmail()方法就是发邮件,由于可以一次发给多个人,所以传入一个list,邮件正文
是一个str,as_string()把MIMEText对象变成str。
'''
smtp.quit()
运行之后就会收到邮件:
但是仔细观察会发现:
1.邮件没有主题
2.看不到收件人的信息
这是因为邮件主题、如何显示发件人、收件人等信息并不是通过SMTP协议发给MTA,而是包含在发给MTA的文本中的,所以,我们必须把From、To和Subject添加到MIMEText中,才是一封完整的邮件:
msg = MIMEText('hello,send by Python.....','plain','utf-8')
msg['From'] = Header('Python测试','utf-8')
msg['To'] = Header('管理员','utf-8')
subject = 'python SMTP 测试邮件'
msg['Subject'] = Header(subject,'utf-8')
二、发送HTML格式的邮件
如果我们要发送HTML邮件,而不是普通的纯文本文件怎么办?方法很简单,在构造MIMEText对象时,把HTML字符串传进去,再把第二个参数由plain变为html就可以了:
msg = MIMEText('<html><h1>你好!<h1><html>','html','utf-8')
#发送HTML格式邮件就只需要把对应的第二个参数改为html即可
三、发送带附件的邮件
发送带附件的邮件,首先要创建MIMEMultipart()实例,然后构造附件,如果有多个附件,可依次构造,最后利用smtplib.smtp发送。
#coding:utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
#发送邮件服务器
smtpserver = 'xxxxx'
#发送邮箱用户名和密码
user = 'xxxxxx'
password = 'xxxxxx'
#发送邮箱
sender = 'xxxxx'
#接受邮箱
receiver = 'xxxxxxx'
#创建一个带附件的实例
message = MIMEMultipart()
message['From'] = Header('Python 测试','utf-8')
message['To'] = Header('测试','utf-8')
subject = 'Python SMTP邮件测试'
message['Subject'] = Header(subject,'utf-8')
#邮件正文内容
message.attach(MIMEText('这是测试Python发送附件功能....','plain','utf-8'))
#构造附件1,传送当前目录下的test.txt文件
att1 = MIMEText(open('123.txt','rb').read(),'base64','utf-8')
att1['Content-Type'] = 'application/octet-stream'
#这里的filename可以任意写,写什么名字 邮件中就显示什么名字
att1['Content-Disposition'] = 'attachment;filename:"123.txt"'
message.attach(att1)
smtp = smtplib.SMTP()
smtp.connect(smtpserver,25)
smtp.login(user,password)
smtp.sendmail(sender,receiver,message.as_string())
smtp.quit()
小结
使用Python的smtplib发送邮件十分简单,只要掌握了各种邮件类型的构造方法,正确设置好邮件头,就可以顺利发出。
构造一个邮件对象就是一个Messag对象,如果构造一个MIMEText对象,就表示一个文本邮件对象,如果构造一个MIMEImage对象,就表示一个作为附件的图片,要把多个对象组合起来,就用MIMEMultipart对象,而MIMEBase可以表示任何对象。它们的继承关系如下:
Message
+- MIMEBase
+- MIMEMultipart
+- MIMENonMultipart
+- MIMEMessage
+- MIMEText
+- MIMEImage
这种嵌套关系就可以构造出任意复杂的邮件。你可以通过email.mime文档查看它们所在的包以及详细的用法。
来源:http://www.cnblogs.com/stephenmc/p/8028411.html


猜你喜欢
- SQLSRV驱动程序允许您创建一个结果集,其中包含可以根据游标类型以任何顺序访问的行。本主题将讨论客户端(缓冲)和服务器端(非缓冲)游标及其
- PYTHON 操作 XML读取XML文件关于XML的介绍<data> 与 </data> 是一对标签的开始与结束&l
- 基本原理选好画板大小,设置好画笔颜色、粗细,定位好位置,依次画鼻子、头、耳朵、眼睛、腮、嘴、身体、手脚、尾巴,完事儿。都知道,T
- 安装Nginx首先拉下centos镜像docker pull centos我们安装最新的nginx1.19版本:下载地址将centos镜像运
- binlog 就是binary log,二进制日志文件,这个文件记录了mysql所有的dml操作。通过binlog日志我们可以做数据恢复,做
- 需要使用到的文件wxapp.py, read_file.py, setup.py#!/usr/bin/env python# -*- cod
- wxPython树控件介绍树(tree)是一种通过层次结构展示信息的控件,如下图所示是树控件示例,左窗口中是树控件,在wxPython中树控
- gRPC是Google发起的一个开源RPC框架,使用HTTP/2传输协议,使用Protocol Buffers编码协议,相比RESTful框
- mysql优化了所以先说说这个,其实这个,很复杂,对于不同的网站,其在线,访问量,帖子数量,网络情况,以及机器配置都有关系,优化不是一次可以
- 你可能正建立自己在网上的家-WEB页,又或者它已经被你安置在网络某一角里。无论出于什么目的,你都希望有
- 一、jupyter notebook是什么官网的介绍是:Jupyter Notebook是一个Web应用程序,允许您创建和共享包含实时代码,
- 1.前言数据库的重要性相信大家都有所了解,作为各种数据的电子资料夹,其中可能包含了各种信息,从企业员工信息到网站访问或成交数据无所不包,甚至
- python class(object)的含义在python2中有区别,在Python3中已经没有区别:object为默认类,表示继承关系c
- 一、前言使用过Python的同学们一定被她的各种编码问题缠绕过,因为平常维护的新老项目跨越 2、3两个版本,编码问题有时更是让我苦不堪言,遂
- 一、什么是shutilshutil可以简单地理解为sh + util ,shell工具的意思。shutil模块是对os模块的补充,主要针对文
- 近期,需要实现检测摄像头中指定坐标区域内的主体颜色,通过查阅大量相关的内容,最终实现代码及效果如下,具体的实现步骤在代码中都详细注释,代码还
- 前些日子在做绩效体系的时候,遇到了一件囧事,居然忘记怎样在Excel上拟合正态分布了,尽管在第二天重新拾起了Excel中那几个常见的函数和图
- 前言大家可能乍一看,通过TCP/IP层连接两个进程会感觉可怕, 但是在Go语言中可能比你想象的要简单的多。下面话不多说了,来一起看看详细的介
- 介绍Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户
- 视频对象提取与其说是视频对象提取,不如说是视频颜色提取,因为其本质还是使用了OpenCV的HSV颜色物体检测。下面话不多说了,来一起看看详细