找回密码
 会员注册
查看: 22|回复: 0

python如何通过python来发邮件,各种发邮件方式详细解析

[复制链接]

2万

主题

0

回帖

7万

积分

超级版主

积分
72027
发表于 2024-9-7 12:53:40 | 显示全部楼层 |阅读模式
✨✨欢迎大家来到景天科技苑✨✨🎈🎈养成好习惯,先赞后看哦~🎈🎈🏆作者简介:景天科技苑🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。🏆《博客》:Python全栈,前后端开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,linux,shell脚本等实操经验,网站搭建等分享。所属的专栏:python基础语法,高阶实战应用教学景天的主页:景天科技苑文章目录Python发送邮件1.发送普通邮件1需要有一个发送邮件的邮箱2申请开启发送邮件3写python代码,实现发送邮件(smtp模块--》python内置)4.发送邮件api详解5.发送普通邮件完整代码2.发送html格式邮件3发送带附件邮件4.总结Python发送邮件在日常工作中,我们可能经常会用到发送邮件,但如果每次都人工来发送,那岂不是很麻烦,今天我们就来讲解下如何通过python语言来优雅地发送邮件1.发送普通邮件1需要有一个发送邮件的邮箱163,126,qq…今天咱们是以qq邮箱为例,其它大家自行尝试,都基本类似2申请开启发送邮件生成一个秘钥:x**************ic#很重要,不要泄露3写python代码,实现发送邮件(smtp模块–》python内置)就使用我们的账号:31*******35@qq.com以QQ邮箱为例,开启授权码图解,登录邮箱,点击设置往下拉,找到pop3那一串,点击开启点击管理服务,在弹出的页面生成授权码点击生成授权码,然后需要扫码发短信同意授权,会生成一串字符串4.发送邮件api详解在Python3中,使用mimetext模块可以轻松地创建电子邮件消息。在发送电子邮件时,我们需要设置邮件的主题、收件人、发件人、正文和附件等信息。而mimetext模块就是用来处理邮件中的文本和附件的。本文将详细介绍mimetext模块中的参数及其用法。发邮件常见的几个类介绍1.MIMEText类MIMEText类用来创建邮件的正文,它有三个参数:_text:邮件正文内容,可以是纯文本或HTML格式。_subtype:邮件正文内容的类型,可以是"plain"(纯文本)、“html”(HTML格式)。_charset:邮件正文内容的编码方式,常用的有"utf-8"、"gbk"等。常见用法如下:fromemail.mime.textimportMIMEText#----------方法1msg=MIMEText('测试邮件。收到请不用回复','plain','utf-8')#-----------方法2content=''' 我的地址: 我的公众号二维码: '''html=MIMEText(content,'html','utf-8')12345678910111213'运行运行2.MIMEImage类MIMEImage类用来创建邮件中的图片,它有两个参数:_imagedata:图片的二进制数据。_subtype:图片的类型,可以是"jpeg"、“gif”、"png"等。代码示例fromemail.mime.imageimportMIMEImage#-----------方法1withopen('test.jpeg','rb')asf:image_data=f.read()msg=MIMEImage(image_data,'jpeg')#----------方法2withopen('test.gif','rb')asf:image_data=f.read()msg=MIMEImage(image_data,'gif')#---------方法3withopen('test.png','rb')asf:image_data=f.read()msg=MIMEImage(image_data,'png')123456789101112133.MIMEAudio类MIMEAudio类用来创建邮件中的音频文件,它有两个参数:_audiodata:音频文件的二进制数据。_subtype:音频文件的类型,可以是"mp3"、"wav"等。代码示例fromemail.mime.audioimportMIMEAudiowithopen('test.mp3','rb')asf:audio_data=f.read()msg=MIMEAudio(audio_data,'mp3')12345674.MIMEBase类MIMEBase类是所有MIME类型的基类,它有四个参数:_maintype:MIME类型的大类,常见的有"text"、“image”、“audio”、“video”、"application"等。_subtype:MIME类型的子类,如"text/plain"、“image/jpeg”、"audio/mp3"等。_encoder:编码方式,可以是"base64"、"quoted-printable"等。_payload:MIME类型的内容,可以是文本、图片、音频、视频等。代码示例:fromemail.mime.baseimportMIMEBasewithopen('test.pdf','rb')asf:pdf_data=f.read()msg=MIMEBase('application','octet-stream')msg.set_payload(pdf_data)1234567895.发送普通邮件完整代码#1导入模块importsmtplibfromemail.mime.textimportMIMEText#往邮件中写内容的对象fromemail.utilsimportformataddr#发件人信息#2发送方和接收方配置#发件方邮箱:谁发送的msg_from='3*****2@qq.com'#生成的授权码:不能泄露password='h******ifj'##发送给谁,可以写多个人,以列表形式存储msg_to=['li*****91@126.com','18*******68@139.com']#邮件主题subject="给领导问好"#主题content="领导早上好,领导辛苦了"#邮件内容#生成一个MIMEText对象(还有一些其它参数)msg=MIMEText(content)#放入邮件主题msg['Subject']=subject#放入发件人,元祖中内容第一个是发件人名称,第二个是发件地址msg['From']=formataddr(('景天',msg_from))#放入收件人,将收件人转化为以逗号分隔的字符串msg['to']=','.join(msg_to)try:#通过ssl方式发送,服务器地址,端口s=smtplib.SMTP_SSL("smtp.qq.com",465)#登录到邮箱s.login(msg_from,password)#发送邮件:发送方,收件方,要发送的消息s.sendmail(msg_from,msg_to,msg.as_string())#第二个参数可以以列表的方式写多个print('成功')exceptBaseExceptionase:print(e)finally:#不管是否发送成功,都退出服务s.quit()1234567891011121314151617181920212223242526272829303132333435363738登录邮箱查看,发送成功2.发送html格式邮件#1导入模块importsmtplibfromemail.mime.textimportMIMEText#往邮件中写内容的对象fromemail.utilsimportformataddr#发件人信息#2发送方和接收方配置#发件方邮箱:谁发送的msg_from='3******72@qq.com'#生成的授权码:不能泄露password='h*********ifj'##发送给谁,可以写多个人,以列表形式存储msg_to=['li*******1@126.com','1**********8@139.com']#邮件主题subject="非常重要,中了五百万"#主题#构建html标签content=''' 恭喜您中奖了 '''#生成一个MIMEText对象(发送html格式邮件)msg=MIMEText(content,'html','utf-8')#放入邮件主题msg['Subject']=subject#放入发件人,元祖中内容第一个是发件人名称,第二个是发件地址msg['From']=formataddr(('景天',msg_from))#放入收件人,将收件人转化为以逗号分隔的字符串msg['to']=','.join(msg_to)try:#通过ssl方式发送,服务器地址,端口s=smtplib.SMTP_SSL("smtp.qq.com",465)#登录到邮箱s.login(msg_from,password)#发送邮件:发送方,收件方,要发送的消息s.sendmail(msg_from,msg_to,msg.as_string())#第二个参数可以以列表的方式写多个print('成功')exceptBaseExceptionase:print(e)finally:#不管是否发送成功,都退出服务s.quit()12345678910111213141516171819202122232425262728293031323334353637383940414243444546邮箱查看,发送成功3发送带附件邮件添加附件时需要使用MIMEMultipart类,它有一个attach()方法可以添加邮件中的附件。用smtplib模块发送示例代码:#1导入模块importsmtplibfromemail.mime.imageimportMIMEImagefromemail.mime.textimportMIMEText#往邮件中写内容的对象fromemail.utilsimportformataddr#发件人信息fromemail.mime.multipartimportMIMEMultipartfromemail.mime.baseimportMIMEBasefromemailimportencoders#2发送方和接收方配置#发件方邮箱:谁发送的msg_from='3*******2@qq.com'#生成的授权码:不能泄露password='h**********fj'##发送给谁,可以写多个人,以列表形式存储msg_to=['li*********1@126.com','1*********8@139.com','3*********2@qq.com']#邮件主题subject="老板,这是今日日报,请查收"#主题#创建一个带附件的实例msg=MIMEMultipart()#放入邮件主题msg['Subject']=subject#放入发件人,元祖中内容第一个是发件人名称,第二个是发件地址msg['From']=formataddr(('景天',msg_from))#放入收件人,将收件人转化为以逗号分隔的字符串msg['to']=','.join(msg_to)#邮件正文内容msg.attach(MIMEText('今日日报:1xxx','plain','utf-8'))#添加附件1#构造附件1,传送当前目录下的ribao.txt文件,注意文件要以rb的形式读取file=open('ribao.txt','rb').read()att1=MIMEText(file,'base64','utf-8')att1["Content-Type"]='application/octet-stream'#这里的filename可以任意写,写什么名字,邮件中显示什么名字att1.add_header('Content-Disposition','attachment',filename="日报.txt")msg.attach(att1)#添加附件2--图片withopen('gzh.png','rb')asf:#设置附件的MIME和文件名,这里是png类型:mime=MIMEBase('image','png',filename='gzh.png')#加上必要的头信息:mime.add_header('Content-Disposition','attachment',filename='gzh.png')mime.add_header('Content-ID','')mime.add_header('X-Attachment-Id','0')#把附件的内容读进来:mime.set_payload(f.read())#用Base64编码:encoders.encode_base64(mime)#添加到MIMEMultipart:msg.attach(mime)#构造附件3,图片格式fp=open('对称加密.png','rb')msgImage=MIMEImage(fp.read(),'png')fp.close()#这里的filename可以任意写,写什么名字,邮件中显示什么名字msgImage.add_header('Content-Disposition','attachment',filename="对称加密.png")#定义图片ID,在HTML文本中引用msgImage.add_header('Content-ID','')msg.attach(msgImage)try:#通过ssl方式发送,服务器地址,端口s=smtplib.SMTP_SSL("smtp.qq.com",465)#登录到邮箱s.login(msg_from,password)#发送邮件:发送方,收件方,要发送的消息s.sendmail(msg_from,msg_to,msg.as_string())#第二个参数可以以列表的方式写多个print('成功')exceptBaseExceptionase:print(e)finally:#不管是否发送成功,都退出服务s.quit()1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495查看邮件中,已包含附件4.总结综上,就是我们通过python来发送邮件的常用方法的详细流程,我们也可以结合linux定时任务,或者celery来实现定时发送,也不难。上述代码在使用时可以直接拿去用,只需要改下自己邮箱的参数即可,是不是很方便,喜欢的朋友一键三连,python常规用法持续更新中!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-10 22:58 , Processed in 0.761510 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表