Python 发送带附件的邮件 发出去的附件格式就成bin

导语:学习到使用Python发送带附件的邮件,但收件人收到的附件格式是bin,附件名称也不是filename写的名称。

1、效果如下:

2、解决办法: 将 att1['Content-Disposition'] = 'attachment;filename = "星测试附件.txt"'替换成 att1.add_header('Content-Disposition', 'attachment', filename='星测试附件.txt'),即可完美解决

3、源码如下:

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header

sender = '××××@zhiqi.cn'  # 发送邮件的人
receivers = ['××××@zhiqi.com']  # 接收邮件人

# 第三方SMTP服务
mail_host='smtp.exmail.qq.com'  # 设置发送服务器
mail_user = '××××@zhiqi.cn'  # 登录邮箱名
mail_pass = '××××'  # 口令(授权码)

# 创建一个带附件的实例
message = MIMEMultipart()
message['From'] = Header(sender,'utf-8') # 发送者
message['To'] = Header('××××','utf-8')  # 接收者
subject = '发送带附件的邮件测试,勿回'   # 发送邮件标题
message['Subject'] = Header(subject,'utf-8')

# 邮件正文内容
mail_msg = '这个一个发送带附件的测试邮件,请忽略......' # 发送邮件内容
# 三个参数:第一个是文本内容,第二个plain设置文本格式,第三个utf-8设置编码
message.attach(MIMEText(mail_msg,'plain','utf-8'))  # 发送邮件正文(纯文本)

# 构造附件1,传送当前目录下的文件
att1 = MIMEText(open('test.txt','rb').read(),'base64','utf-8')
att1['Content-Type'] = 'application/octet-stream'
# 这里的filename是指邮件中显示的附件名称
# att1['Content-Disposition'] = 'attachment;filename = "星测试附件.txt"'
att1.add_header('Content-Disposition', 'attachment', filename='星测试附件.txt')
message.attach(att1)

# 构造附件1,传送当前目录下的文件
att2 = MIMEText(open('冒泡排序.py','rb').read(),'base64','utf-8')
att2['Content-Type'] = 'application/octet-stream'
# 这里的filename是指邮件中显示的附件名称
att2.add_header('Content-Disposition', 'attachment', filename='冒泡排序.py')
message.attach(att2)

try:
    smtpObj = smtplib.SMTP_SSL(mail_host,465)  # 发送服务器的端口号
    smtpObj.login(mail_user,mail_pass)
    smtpObj.sendmail(sender,receivers,message.as_string())
    print('邮件发送成功')
except smtplib.SMTPException:
    print('邮件发送失败')

 

  • 16
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

铩胍崾牮镪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值