python发送邮件带附件—— 杜绝中文乱码

目录

 

摘要

乱码现象

解决办法


摘要

网上有很多python发送邮件的方法参考,但基本都无法防止乱码现象的发生,今天在写自动化脚本的时候遇到了这个问题,在此处记录一下,希望能对大家有所帮助!

乱码现象

首先我们来看我最开始写的python发送邮件的代码,如下所示:

# coding=utf-8
import os
import xlwt

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders


def sendMail(self):
    # 收件人(列表)
    mail_receivers=['[email protected]']
    # 邮件标签
    mail_lable="测试邮件"
    # 使用的邮箱的smtp服务器地址,这里是qq的
    mail_host="smtp.qq.com"
    # 用户名,登录名
    mail_user="[email protected]"
    # 授权码,注意这里不是密码是授权码
    mail_pass="xxxx"
    # 邮箱的后缀
    mail_postfix="qq.com"

    files = ['D:/中文测试.xlsx']
    me=mail_lable+"<"+mail_user+"@"+mail_postfix+">"
    msg = MIMEMultipart()
    msg.attach(MIMEText('正文',_subtype='html', _charset='utf-8'))
    msg['Subject'] = '标题'
    msg['From'] = me
    msg['To'] = ",".join(mail_receivers)                #将收件人列表以‘,’分隔
    #print(len(files))
    if len(files) != 0:
        for i in range(len(files)):

            if os.path.isfile(files[i]):
                att = MIMEBase('application', 'octet-stream')
                att.set_payload(open(files[i], 'rb').read())
                att.add_header('Content-Disposition', 'attachment', filename=os.path.basename(files[i])) 
                encoders.encode_base64(att)
                msg.attach(att)

    try:
        server = smtplib.SMTP_SSL(mail_host, 465)
        server.login(mail_user,mail_pass)                    #登录操作
        server.sendmail(me, mail_receivers, msg.as_string())
        server.close()
    except Exception as e:
        return False
    return True
if __name__ == '__main__':
   sendMail()

qq邮箱申请授权码方法如下:

点击设置——》账户:

下拉,把这一栏全部开启,然后点击生成授权码即可。

代码比较简单,遍历文件列表,加入到msg对象中,最后以附件的形式发送到邮箱,这里我使用的是自己的邮箱,给自己发送信息,调用sendMail方法运行,本来以为完事了,结果附件名称却显示乱码,于是开始寻找解决之道。

解决办法

最后经过各种尝试,查阅资料等,找到了一种确实可行的方法,修改以下代码即可:

att.add_header('Content-Disposition', 'attachment', filename=('gbk', '', os.path.basename(files[i])) )

这之后乱码问题就被解决了。后来发现windows平台下使用gbk没有问题,改成utf-8的话网页没有问题,但是手机端会乱码。再后来我用同事的电脑进行尝试,发现他的电脑不需要修改代码也不会有乱码问题的出现,修改了本行代码也不会有问题。。。

总而言之,这样不会出现问题就好,希望能对正在观看的你有所帮助,喜欢还请右上角点个赞哦,谢谢!

发布了26 篇原创文章 · 获赞 99 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/m0_37719874/article/details/96475827