IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> python smtp发送邮件 附件 中文名乱码 问题 -> 正文阅读

[游戏开发]python smtp发送邮件 附件 中文名乱码 问题

重点

   mime.add_header('Content-Disposition', 'attachment', filename=( make_header([(file_name, 'UTF-8')]).encode('UTF-8')))

完整代码可以发送多个附件

import smtplib
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email.header import Header, make_header
from email.utils import COMMASPACE, formatdate
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
from email.mime.application import MIMEApplication
from email import encoders
from datetime import datetime
from config import mail_tail

import time, os




SMTP_IP = 'sftp.gmail.com'

SMTP_PORT = 25  # 587

EMAIL_FROM = 'rpa05@rpa.com'
EMAIL_PASSWORD = '82767630'

SMTP_CONTENT_TYPE_HTML = 'html'
SMTP_CONTENT_TYPE_TEXT = 'text'


# 第三方 SMTP 服务
mail_host = SMTP_IP  # 设置服务器
mail_user = EMAIL_FROM # 用户名
mail_pass = EMAIL_PASSWORD  # 口令

sender = EMAIL_FROM


to = cc = receivers = ['yu@rpa.com']  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱

week = time.strftime("%W")
year = time.strftime("%Y")
day = datetime.now().strftime('%Y%m%d')

mail_msg = mail_tail




def send_mail(mail_msg, subject, to, cc, bcc, file_name=None, file_path=None, name=None):
    message = MIMEMultipart('related')
    # message = MIMEText(mail_msg, 'html', 'utf-8')
    message['From'] = 'rpa05@rpa.com'

    message['To'] = COMMASPACE.join(to)
    message['Cc'] = COMMASPACE.join(cc)
    msgAlternative = MIMEMultipart('alternative')
    message.attach(msgAlternative)

    #添加附件

    # att1 = MIMEBase(open(file_path, 'rb').read(), 'base64')
    # att1["Content-Type"] = 'application/octet-stream'
    # # 这里的filename可以任意写,写什么名字,邮件中显示什么名字
    # att1["Content-Disposition"] = f'attachment; filename={file_name}'
    # message.attach(att1)

    if file_path:
        print('os path', os.path.exists(file_path))
        a = os.path.exists(file_path)
        while not a:
            print('while os path', os.path.exists(file_path))
            time.sleep(0.5)
            a = os.path.exists(file_path)


    if file_path:
        with open(file_path, 'rb') as f:
            # 设置附件的MIME和文件名,这里是png类型:
            mime = MIMEBase('application','vnd.ms-excel') #, filename=file_name
            # 加上必要的头信息:
            mime.add_header('Content-Disposition', 'attachment', filename=file_name)
            mime.add_header('Content-ID', '<0>')
            mime.add_header('X-Attachment-Id', '0')
            # 把附件的内容读进来:
            mime.set_payload(f.read())
            # 用Base64编码:
            encoders.encode_base64(mime)
            # 添加到MIMEMultipart:
            message.attach(mime)


    subject = subject
    message['Subject'] = Header(subject)
    message['Date'] = formatdate(localtime=True)
    msgAlternative.attach(MIMEText(mail_msg, 'html', 'utf-8'))

    # 指定图片为当前目录
    # fp = open(img, 'rb')
    # msgImage = MIMEImage(fp.read())
    # fp.close()

    # 定义图片 ID,在 HTML 文本中引用
    # msgImage.add_header('Content-ID', '<image1>')
    # message.attach(msgImage)

    server = smtplib.SMTP('10.10.10.10:25')

    server.ehlo_or_helo_if_needed()
    server.ehlo()  # 向Gamil发送SMTP 'ehlo' 命令
    server.starttls()
    # server.login(sender, mail_pass)
    print(datetime.now())
    print("邮件发送成功---------->",name)
    if file_path:
        os.remove(file_path)

 
    server.sendmail('rpa@rpa.com', to + cc + bcc , message.as_string())
    server.quit()


def send_mail_multi_attch(mail_msg, subject, to, cc, bcc, file_list=None,  name=None):
    message = MIMEMultipart('related')
    # message = MIMEText(mail_msg, 'html', 'utf-8')
    message['From'] = 'rpa05@rpa.com'
  
    message['To'] = COMMASPACE.join(to)
    message['Cc'] = COMMASPACE.join(cc)
    msgAlternative = MIMEMultipart('alternative')
    message.attach(msgAlternative)

    #添加附件

    # att1 = MIMEBase(open(file_path, 'rb').read(), 'base64')
    # att1["Content-Type"] = 'application/octet-stream'
    # # 这里的filename可以任意写,写什么名字,邮件中显示什么名字
    # att1["Content-Disposition"] = f'attachment; filename={file_name}'
    # message.attach(att1)




    if file_list:
        for index, file in enumerate(file_list):
            file_path = file.get('path')
            file_name = file.get('name')
            with open(file_path, 'rb') as f:
                    # 设置附件的MIME和文件名,这里是png类型:
                    # mime = MIMEBase('application','vnd.ms-excel') #, filename=file_name
                    mime = MIMEBase('application','octet-stream') #, filename=file_name
                    # 加上必要的头信息:
                    print('file_name', file_name)
                    mime.add_header('Content-Disposition', 'attachment', filename=( make_header([(file_name, 'UTF-8')]).encode('UTF-8')))
                    mime.add_header('Content-ID', f'<{index}>')
                    mime.add_header('X-Attachment-Id', f'{index}')
                    # 把附件的内容读进来:
                    mime.set_payload(f.read())
                    # 用Base64编码:
                    encoders.encode_base64(mime)
                    # 添加到MIMEMultipart:
                    message.attach(mime)



    subject = subject
    message['Subject'] = Header(subject)
    message['Date'] = formatdate(localtime=True)
    msgAlternative.attach(MIMEText(mail_msg, 'html', 'utf-8'))

    # 指定图片为当前目录
    # fp = open(img, 'rb')
    # msgImage = MIMEImage(fp.read())
    # fp.close()

    # 定义图片 ID,在 HTML 文本中引用
    # msgImage.add_header('Content-ID', '<image1>')
    # message.attach(msgImage)

    server = smtplib.SMTP('10.10.10.10:25')

    server.ehlo_or_helo_if_needed()
    server.ehlo()  # 向Gamil发送SMTP 'ehlo' 命令
    server.starttls()
    # server.login(sender, mail_pass)
    print(datetime.now())
    print("邮件发送成功---------->",name)
    # if file_path:
    #     os.remove(file_path)

   
    server.sendmail('rpa@rpa.com', to + cc + bcc , message.as_string())
    server.quit()

if __name__ == '__main__':
    pass

参考
https://blog.csdn.net/u013948083/article/details/95313594
https://segmentfault.com/q/1010000016296204/

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-04-04 12:42:53  更:2022-04-04 12:46:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年10日历 -2024/10/25 6:21:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码