导语:学习到使用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('邮件发送失败')