Python实现自动发送邮件功能


Posted in Python onMarch 02, 2021

简单邮件传输协议(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()

运行之后就会收到邮件:

Python实现自动发送邮件功能

但是仔细观察会发现:

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文档查看它们所在的包以及详细的用法。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python 运算符 供重载参考
Jun 11 Python
简洁的十分钟Python入门教程
Apr 03 Python
Python计时相关操作详解【time,datetime】
May 26 Python
Python调用C语言的方法【基于ctypes模块】
Jan 22 Python
Python切片操作实例分析
Mar 16 Python
python 统计数组中元素出现次数并进行排序的实例
Jul 02 Python
celery4+django2定时任务的实现代码
Dec 23 Python
Python 自动登录淘宝并保存登录信息的方法
Sep 04 Python
pytorch 修改预训练model实例
Jan 18 Python
Python操作Jira库常用方法解析
Apr 10 Python
PyTorch-GPU加速实例
Jun 23 Python
Django filter动态过滤与排序实现过程解析
Nov 26 Python
django站点管理详解
Dec 12 #Python
Django 生成登陆验证码代码分享
Dec 12 #Python
python+django加载静态网页模板解析
Dec 12 #Python
Django入门使用示例
Dec 12 #Python
django使用html模板减少代码代码解析
Dec 12 #Python
Python使用三种方法实现PCA算法
Dec 12 #Python
Java分治归并排序算法实例详解
Dec 12 #Python
You might like
MySQL中create table语句的基本语法是
2007/01/15 PHP
PHP导出Excel实例讲解
2016/01/24 PHP
CI配置多数据库访问的方法
2016/03/28 PHP
php实现与python进行socket通信的方法示例
2017/08/30 PHP
jquery拖动插件(jquery.drag)使用介绍
2013/06/18 Javascript
浅析js设置控件的readonly与enabled属性问题
2013/12/25 Javascript
5个可以帮你理解JavaScript核心闭包和作用域的小例子
2014/10/08 Javascript
简单的vue-resourse获取json并应用到模板示例
2017/02/10 Javascript
js记录点击某个按钮的次数-刷新次数为初始状态的实例
2017/02/15 Javascript
基于Bootstrap 3 JQuery及RegExp的表单验证功能
2017/02/16 Javascript
Angular1.x自定义指令实例详解
2017/03/01 Javascript
js css3实现图片拖拽效果
2017/03/04 Javascript
Angular 4.x中表单Reactive Forms详解
2017/04/25 Javascript
基于vue实现swipe分页组件实例
2017/05/25 Javascript
Vue中的无限加载vue-infinite-loading的方法
2018/04/08 Javascript
ES6知识点整理之函数数组参数的默认值及其解构应用示例
2019/04/17 Javascript
JavaScript函数式编程(Functional Programming)箭头函数(Arrow functions)用法分析
2019/05/22 Javascript
jQuery高级编程之js对象、json与ajax用法实例分析
2019/11/01 jQuery
使用python将mdb数据库文件导入postgresql数据库示例
2014/02/17 Python
在Python的Flask框架中实现全文搜索功能
2015/04/20 Python
Python快速排序算法实例分析
2017/11/29 Python
numpy.delete删除一列或多列的方法
2018/04/03 Python
Python设计模式之工厂方法模式实例详解
2019/01/18 Python
Python 堆叠柱状图绘制方法
2019/07/29 Python
Python3.0 实现决策树算法的流程
2019/08/08 Python
Python reshape的用法及多个二维数组合并为三维数组的实例
2020/02/07 Python
使用Python开发个京东上抢口罩的小实例(仅作技术研究学习使用)
2020/03/10 Python
python获取响应某个字段值的3种实现方法
2020/04/30 Python
Matlab中plot基本用法的具体使用
2020/07/17 Python
Python性能分析工具py-spy原理用法解析
2020/07/27 Python
StubHub墨西哥:购买和出售您的门票
2016/09/17 全球购物
Fossil加拿大官网:化石手表、手袋、首饰及配饰
2019/04/23 全球购物
澳大利亚Rockwear官网:女子瑜伽、健身和运动服
2021/01/26 全球购物
Wolford法国官网:奥地利奢侈内衣品牌
2020/08/11 全球购物
专业实习自我鉴定
2013/10/29 职场文书
乡镇消防工作实施方案
2014/03/27 职场文书