Python实现自动发送邮件(详解)
Python实现自动发送邮件
1.开启SMTP服务
为了实现自动发送邮件的目的,我们需要在邮箱中开启SMTP服务:
这点很关键,别忘了去开启SMTP, 别忘了去开启SMTP,否则邮件是无法发送成功的 。然后你还需要点击下面生成授权码,这个授权码才是使用Python发送邮件时的真正密码。
2.python发邮件需要掌握两个模块
smtplib和email,这俩模块是python自带的,只需import即可使用。smtplib模块主要负责发送邮件,email模块主要负责构造邮件。
smtplib模块主要负责发送邮件:是一个发送邮件的动作,连接邮箱服务器,登录邮箱,发送邮件(有发件人,收信人,邮件内容)。
email模块主要负责构造邮件:指的是邮箱页面显示的一些构造,如发件人,收件人,主题,正文,附件等。
代码说明:
1)smtplib模块
smtplib.SMTP() :实例化SMTP()
login(user,password):
user:登录邮箱的用户名。
password:登录邮箱的密码,像笔者用的是网易邮箱,网易邮箱一般是网页版,需要用到客户端密码,需要在网页版的网易邮箱中设置授权码,该授权码即为客户端密码。
sendmail(from_addr,to_addrs,msg,…):
from_addr:邮件发送者地址
to_addrs:邮件接收者地址。字符串列表[‘接收地址1’,‘接收地址2’,‘接收地址3’,…]或’接收地址’
msg:发送消息:邮件内容。一般是msg.as_string():as_string()是将msg(MIMEText对象或者MIMEMultipart对象)变为str。
quit():用于结束SMTP会话。
2)email模块
email模块下有mime包,mime英文全称为“Multipurpose Internet Mail Extensions”,即多用途互联网邮件扩展,是目前互联网电子邮件普遍遵循的邮件技术规范。
该mime包下常用的有三个模块:text,image,multpart。
导入方法如下:
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
构造一个邮件对象就是一个Message对象,如果构造一个MIMEText对象,就表示一个文本邮件对象,如果构造一个MIMEImage对象,就表示一个作为附件的图片,要把多个对象组合起来,就用MIMEMultipart对象,而MIMEBase可以表示任何对象。它们的继承关系如下:
Message
+- MIMEBase+- MIMEMultipart+- MIMENonMultipart+- MIMEMessage+- MIMEText+- MIMEImage
1、自动发送普通的文字邮件代码实现如下:
from smtplib import SMTP_SSL
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header# smtplib模块主要负责发送邮件:是一个发送邮件的动作,连接邮箱服务器,登录邮箱,发送邮件(有发件人,收信人,邮件内容)。
# email模块主要负责构造邮件:指的是邮箱页面显示的一些构造,如发件人,收件人,主题,正文,附件等。host_server = 'smtp.qq.com' #qq邮箱smtp服务器
sender_qq = '9156393@qq.com' #发件人邮箱
pwd = '你的授权码'
receiver = ['910393@qq.com','824864@qq.com' ]#收件人邮箱
#receiver = '913@qq.com'
mail_title = 'Python自动发送的邮件' #邮件标题
mail_content = "您好,这是使用python登录QQ邮箱发送邮件的测试——zep" #邮件正文内容
# 初始化一个邮件主体
msg = MIMEMultipart()
msg["Subject"] = Header(mail_title,'utf-8')
msg["From"] = sender_qq
# msg["To"] = Header("测试邮箱",'utf-8')
msg['To'] = ";".join(receiver)
# 邮件正文内容
msg.attach(MIMEText(mail_content,'plain','utf-8'))smtp = SMTP_SSL(host_server) # ssl登录# login(user,password):
# user:登录邮箱的用户名。
# password:登录邮箱的密码,像笔者用的是网易邮箱,网易邮箱一般是网页版,需要用到客户端密码,需要在网页版的网易邮箱中设置授权码,该授权码即为客户端密码。
smtp.login(sender_qq,pwd)# sendmail(from_addr,to_addrs,msg,...):
# from_addr:邮件发送者地址
# to_addrs:邮件接收者地址。字符串列表['接收地址1','接收地址2','接收地址3',...]或'接收地址'
# msg:发送消息:邮件内容。一般是msg.as_string():as_string()是将msg(MIMEText对象或者MIMEMultipart对象)变为str。
smtp.sendmail(sender_qq,receiver,msg.as_string())# quit():用于结束SMTP会话。
smtp.quit()
2、发送html格式邮件
import smtplib
from smtplib import SMTP_SSL
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Headerhost_server = 'smtp.qq.com' #qq邮箱smtp服务器
sender_qq = '91693@qq.com' #发件人邮箱
pwd = '你的授权码'
receiver = '96393@qq.com'
mail_title = 'Python自动发送html格式的邮件' #邮件标题#邮件正文内容
mail_content = "您好,<p>这是使用python登录QQ邮箱发送HTNL格式邮件的测试:</p> <p><a href='https://blog.csdn.net/weixin_44827418?spm=1000.2115.3001.5113'>CSDN个人主页</a></p>"msg = MIMEMultipart()
msg["Subject"] = Header(mail_title,'utf-8')
msg["From"] = sender_qq
msg["To"] = Header("测试邮箱","utf-8")msg.attach(MIMEText(mail_content,'html'))try:smtp = SMTP_SSL(host_server) # ssl登录连接到邮件服务器smtp.set_debuglevel(1) # 0是关闭,1是开启debugsmtp.ehlo(host_server) # 跟服务器打招呼,告诉它我们准备连接,最好加上这行代码smtp.login(sender_qq,pwd)smtp.sendmail(sender_qq,receiver,msg.as_string())smtp.quit()print("邮件发送成功")
except smtplib.SMTPException:print("无法发送邮件")
3、发送带附件的邮件
import smtplib
import string
from smtplib import SMTP_SSL
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email.mime.application import MIMEApplication # 用于添加附件host_server = 'smtp.qq.com' #qq邮箱smtp服务器
sender_qq = '91393@qq.com' #发件人邮箱
pwd = '你的授权码'
receiver = '9193@qq.com'
mail_title = 'Python自动发送html格式的邮件' #邮件标题#邮件正文内容
mail_content = "您好,<p>这是使用python登录QQ邮箱发送HTNL格式邮件的测试:</p> <p><a href='https://blog.csdn.net/weixin_44827418?spm=1000.2115.3001.5113'>CSDN个人主页</a></p>"msg = MIMEMultipart()
msg["Subject"] = Header(mail_title,'utf-8')
msg["From"] = sender_qq
msg["To"] = Header("测试邮箱","utf-8")msg.attach(MIMEText(mail_content,'html'))
attachment = MIMEApplication(open('./test.xlsx','rb').read())
attachment["Content-Type"] = 'application/octet-stream'
# 给附件重命名
basename = "test.xlsx"
attachment.add_header('Content-Dispositon','attachment',filename=('utf-8', '', basename))#注意:此处basename要转换为gbk编码,否则中文会有乱码。
msg.attach(attachment)try:smtp = SMTP_SSL(host_server) # ssl登录连接到邮件服务器smtp.set_debuglevel(1) # 0是关闭,1是开启debugsmtp.ehlo(host_server) # 跟服务器打招呼,告诉它我们准备连接,最好加上这行代码smtp.login(sender_qq,pwd)smtp.sendmail(sender_qq,receiver,msg.as_string())smtp.quit()print("邮件发送成功")
except smtplib.SMTPException:print("无法发送邮件")
3.使用zmail模块读取邮件
首先需要在cmd命令行安装zmail模块,输入pip install zmail
安装即可
import zmailserver = zmail.server('9193@qq.com','你的授权码')
mail = server.get_latest()
zmail.show(mail)
import zmailserver = zmail.server('993@qq.com','你的授权码')
mail = server.get_latest()
# zmail.show(mail)
print(mail['subject'])
print(mail['id'])
print(mail['from'])
print(mail['to'])
print(mail['content_text'])
print(mail['content_html'])# 用来保存附件
# target_path为None则默认保存在当前目录下
# overwrite=True 是指如果出现同名文件则进行覆盖
zmail.save_attachment(mail,target_path=None,overwrite=True)
Python实现自动发送邮件(详解)相关推荐
- python实现自动答题详解含代码
预备软件(这几个都百度一下,攻略多,不难): 1.intellij idea下载 2.python下载 3.requests.AIP .PIL安装 4.adb下载(用于手机截图) https://ww ...
- python 拼音库_python有没有拼音库python进阶之socket详解
Socket的英文原义是"孔"或"插座".作为BSD UNIX的进程通信机制,通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句 ...
- python之sys模块详解_(转)python之os,sys模块详解
python之sys模块详解 原文:http://www.cnblogs.com/cherishry/p/5725184.html sys模块功能多,我们这里介绍一些比较实用的功能,相信你会喜欢的,和 ...
- c调用python脚本如何获取结果_使用C++调用Python代码的方法详解
一.配置python环境问题 1.首先安装Python(版本无所谓),安装的时候选的添加python路径到环境变量中 安装之后的文件夹如下所示: 2.在VS中配置环境和库 右击项目->属性-&g ...
- Python 中 with 用法详解
浅谈 Python 的 with 语句:https://developer.ibm.com/zh/articles/os-cn-pythonwith/ python3,浅谈with的神奇魔法:http ...
- python字符串连接操作-Python连接字符串过程详解
这篇文章主要介绍了python连接字符串过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在python中,如果有多个字符串,想要连接在一起, ...
- python怎么计算图像梯度_opencv python图像梯度实例详解
这篇文章主要介绍了opencv python图像梯度实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一阶导数与Soble算子 二阶导数与拉普 ...
- docker 打包部署 python项目_Docker如何部署Python项目的实现详解
Docker 是一个开源项目,为开发人员和系统管理员提供了一个开放平台,可以将应用程序构建.打包为一个轻量级容器,并在任何地方运行.Docker 会在软件容器中自动部署应用程序. 在本篇中,我将介绍如 ...
- Python Turtle 海龟绘图详解官方文档中文版
Python Turtle 海龟绘图详解 (官方文档中文版)-安徽省太湖中学陈晓中整理 概述 海龟绘图很适合用来引导孩子学习编程. 最初来自于 Wally Feurzeig, Seymour Pape ...
最新文章
- Pandas中Apply函数加速百倍的技巧
- 关于网络线与电话线共用之体会
- PHP类中的__get()和__set函数到底有什么用
- HTFS.Software.v7.3-ISO 1DVD(传热模拟,最新完全解密版)
- C++程序设计选择题
- java excel 合并两个单元格内容 无法换行_12个简单高效的EXCEL小技巧,让你秒变职场达人!...
- Android.mk文件官方使用说明
- 【大数据部落】基于随机森林、svm、CNN机器学习的风控欺诈识别模型
- 改变风格(css)的四种方法
- 面试题之——多线程详解
- 计算机网络实验报告3-tcp,计算机网络实验报告3 TCP
- html怎么让文字半透明,用js设置div背景半透明而文字不透明
- Seaborn绘图-绘制散点图,折线图-分类统计图
- 19年12月六级翻译词汇
- bagku秋名山老司机
- 2022劳务员-岗位技能(劳务员)特种作业证考试题库及模拟考试
- WinForm的控件二次开发
- 四万字32图,Kafka知识体系保姆级教程宝典
- 2022 极术通讯—AR的元宇宙
- CMD批量转换GIF图片为PNG图片