python--smtplib加email带Excel、txt、PNG、MP3附件发邮件给指定邮箱(二)


      更多关于Python的知识请加关注哟~~。若需联系博主请私信或者加博主联系方式:
      QQ:1542334210
      微信公众号:不一样的数据分析
      微信号:ZDSL1542334210

更多精彩内容请关注微信公众:不一样的数据分析

前言:

       上一篇文章就提到如何使用Python的smtplib+email模块进行邮件的发送,当时做的是消息的简单发送,今天我将脚本进行修改,转变为带有附件发送到指定邮箱,今天的测试将以Excel文件作为附件进行发送测试,文章第6部分会附上如何发送TXT、PNG、mp3、mp4文件。
【PS:这里我会分几篇文章进行讲解,从发送消息–>发送excel–>发送txt–>发送图片–>发送mp3–>发送mp4–>定时发送邮件】

1、python与smtp服务器之间的具体交互
server = smtplib.SMTP_SSL("smtp.qq.com",timeout=30)   #实例化一个SMTP对象 ,传人:邮件服务地址,端口号
server.set_debuglevel(0) #是否打印出与邮箱交易的所有信息 0表示不用打印1表示打印
server.ehlo("smtp.qq.com") #使用ehlo指令向ESMTP(SMTP扩展)确认你的身份
server.login(myemail,password)  # 传入发送者邮箱地址和授权码
server.sendmail(msg['from'], msg['to'],msg.as_string()) # msg['from'] 发送人邮箱地址,msg['to'] 收件人邮箱地址,msg.as_string()中as_string()是将msg(MIMEText或MIMEMultipart对象)变为str。
server.close()  # 关闭服务
2、如何携带附件发送
# 导入模块
import smtplib
from email.mime.text import MIMEText
import warnings
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from email.mime.base import MIMEBase
from email import encoders
# 执行代码部分
file_excel='D:/ZhongPstudy/AWORK_ABORD/Data/Email_zidong/朱建豪.xlsx'   # 需要发的邮箱文件路径
msg  = MIMEMultipart()  # 实例化一个对象
msg['to'] = '332790841@qq.com'   # 接收者邮箱 请修改
msg['from'] = '154233421@qq.com' #  发送者邮箱 请修改
msg['subject'] = "御天朱哥 请查收,来自excel发送测试邮件"  #邮件标题
part = MIMEText("邮箱发送附件-excel 给 御天朱哥")  # 邮件正文内容
msg.attach(part)
msg["Accept-Language"]="zh-CN" # 设置消息为中文
msg["Accept-Charset"]="utf-8" # 指定编码
att  =  MIMEApplication(open(file_excel,'rb').read(),'utf-8')  # 读入需要发送的excel文件
#添加附加 并且命名为.xlsx后缀文件  名字可以自取  但是后缀必须和源文件后缀相同
att.add_header('Content-Disposition', 'attachment', filename='%朱建豪.xlsx')
msg.attach(att)
server = smtplib.SMTP_SSL("smtp.qq.com",timeout=30)   #实例化一个SMTP对象  邮件服务地址,端口号
server.set_debuglevel(1)     # 设置为1表示打印出与邮箱交易的所有信息  0表示 不用打印
server.ehlo("smtp.qq.com")   #使用ehlo指令向ESMTP(SMTP扩展)确认你的身份
server.login('154233421@qq.com',"password")  # 你的邮箱账号和授权码
server.sendmail(msg['from'], msg['to'],msg.as_string())
server.close()

       这里server.set_debuglevel(1)是打印出与邮箱交易信息,打印后你将会看到一堆只有模块和邮箱之间才看得到的东西,当然我们接下来的函数封装会不打印这些信息,就轻便许多了。

3、函数封装
def Send_Gemail(myemail,otheremail,password,file_excel,name):
    '''函数解释:自定义发邮件函数,myemail:发送者邮箱,password:发送者密码,
    otheremail:接收者邮箱,file_excel:发送的文件'''
    #邮箱件内容
    msg  = MIMEMultipart()
    msg['to'] = otheremail
    msg['from'] = myemail
    msg['subject'] = "%s 请查收,来自excel发送测试邮件"%(name)  #邮件标题
    part = MIMEText("邮箱发送附件-excel 给 %s"%(name))  # 邮件正文内容
    msg.attach(part)
    msg["Accept-Language"]="zh-CN" # 设置消息为中文
    msg["Accept-Charset"]="utf-8" # 指定编码
#     att  =  MIMEApplication(open(file_excel, 'rb').read())
    att  =  MIMEApplication(open(file_excel,'rb').read(),'utf-8')  # 读入需要发送的excel文件
#     att  =  MIMEApplication(open(file_excel,'rb').read(),'utf-8')  # 发送图片
#     att["Content-Type"] = 'application/octet-stream'
    #添加附加 并且命名为.xlsx后缀文件  名字可以自取  但是后缀必须和源文件后缀相同
    att.add_header('Content-Disposition', 'attachment', filename='%s.xlsx'%(name)) 
#     att["Content-Disposition"] ='attachment; filename="sendmail.xlsx"'
    msg.attach(att)
    server = smtplib.SMTP_SSL("smtp.qq.com",timeout=30)   #实例化一个SMTP对象  邮件服务地址,端口号
    server.set_debuglevel(1)     # 设置为1表示打印出与邮箱交易的所有信息  0表示 不用打印
    server.ehlo("smtp.qq.com")   #使用ehlo指令向ESMTP(SMTP扩展)确认你的身份
    server.login(myemail,password)
    server.sendmail(msg['from'], msg['to'],msg.as_string())
    server.close()
    print("邮件发送成功!")
4、函数调用
# 这里就可以发送任意的excel文件,只要路径读取的正确,就会成功发送到邮箱!
file_excel='D:/ZhongPstudy/AWORK_ABORD/Data/Email_zidong/朱建豪.xlsx'
Send_Gemail('154233420@qq.com','332790831@qq.com','uajsuycdnxppba',file_excel,'御天朱哥')
5、结果展示

在这里插入图片描述

6、其他附件TXT、PNG、mp3的添加方法

       Python发邮件的速度是很快的,而且这里的附件你可以更换为任意文件,TXT、JPG,PNG、mp3、MP4均可,只需要将文件路径file_excel修改为你需要发送的文件路径,然后再将att.add_header('Content-Disposition', 'attachment', filename='%s.xlsx'%(name))的后缀修改为对应发送的后缀(如果是记事本就修改为“.txt”,图片就修改为“.PNG”)

7、文末彩蛋–轻松一刻

       大家都知道我有一好朋友小熊,他初中的时候特别爱学,我们不是学到物理课嘛,老师说生活中很多东西都会热胀冷缩,于是他回家就问他爸爸:“爸爸,什么是热胀冷缩?”他爸爸说:“就是物体有一个属性,热了体积会变大,冷了就会缩小!”他答到:“那人有吗?”他爸爸沉默着红着脸回答:“…也有…”。最后小熊说道:“那老妈那么胖,你为什么不把妈妈塞进冰箱冻瘦一点呢?..”

        今天到这里就结束啦~这里是Jeruser python自动化栏目,让你体验不一样的Python数据分析魅力,如何将工作变得有趣,请持续关注我。谢谢观看我是Jetuser–data

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我可以为您提供一些参考代码。您需要使用Python中的smtplib模块email模块。 以下是一个基本示例: ```python import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.base import MIMEBase from email.utils import COMMASPACE from email import encoders import os def send_mail(send_from, send_to, subject, text, files=[]): ''' 发送邮件并携附件。 send_from: 发件人邮箱 send_to: 收件人邮箱 subject: 邮件主题 text: 邮件正文 files: 附件列表 ''' assert isinstance(send_to, list) msg = MIMEMultipart() msg['From'] = send_from msg['To'] = COMMASPACE.join(send_to) msg['Subject'] = subject msg.attach(MIMEText(text, 'html')) for file in files: part = MIMEBase('application', "octet-stream") with open(file, 'rb') as f: part.set_payload(f.read()) encoders.encode_base64(part) part.add_header('Content-Disposition', 'attachment; filename="{}"'.format(os.path.basename(file))) msg.attach(part) smtp = smtplib.SMTP('smtp.gmail.com', 587) smtp.starttls() smtp.login(send_from, 'your-password-here') smtp.sendmail(send_from, send_to, msg.as_string()) smtp.quit() ``` 您需要将'your-password-here'替换为您的发件人帐户密码,并确认您的发件人帐户允许使用SMTP发送电子邮件。 然后,您可以使用以下代码运行该函数: ```python send_mail('sender@gmail.com', ['receiver1@gmail.com', 'receiver2@gmail.com'], 'Test email with attachment', 'This is a test email', ['test.txt', 'test.png']) ``` 这将从'sender@gmail.com'发送一封包含'test.txt'和'test.png'两个附件的电子邮件,发送给'receiver1@gmail.com'和'receiver2@gmail.com'。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值