python向多个用户发送文字、图片内容邮件和excel附件

news/2024/7/21 5:44:17 标签: python, excel, 服务器

话不多说,直接上代码,需要把发件里面的smtp_info替换为自己的信息,其中password是指邮箱在开通POP/SMTP功能后获取的授权码!

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


smtp_info = {
    'smtp_server': 'smtp.qq.com',  # 替换为对应的邮件服务器,这是qq的,还有smtp.163.com等
    'port': 465,
    'sender_email': 'lytcreate@qq.com',  # 替换为发件邮箱账号
    'password': 'xxxxxxxxxxxxxxxx',  # 替换为你自己的授权码
    'receivers': ['lytcreate@163.com', 'lytcreat@163.com']  # 替换为接收人邮箱
}

def send_main(smtp_info, subject, content, img_path, excel_path):
    # 设置SMTP服务器地址和端口
    smtp_server = smtp_info['smtp_server']
    port = smtp_info['port']  # 587:使用TLS加密, 465:SSL
    # 设置发件人和收件人信息
    sender_email = smtp_info['sender_email']  # 替换为你的QQ邮箱地址
    password = smtp_info['password']  # 替换为你的QQ邮箱授权码
    receivers = smtp_info['receivers']  # 替换为接收者的邮箱地址列表

    # 创建邮件对象
    message = MIMEMultipart()
    message['From'] = sender_email
    message['To'] = ', '.join(receivers)
    message['Subject'] = subject

    mail_body = f"""  
    <html>  
    <body>  
    <div>{content}</div>
    <img src="cid:image1" alt="Image" />  
    </body>  
    </html>  
    """
    message.attach(MIMEText(mail_body, 'html'))

    # 添加图片到邮件正文
    with open(img_path, 'rb') as f:  # 替换为你的图片路径
        img_data = f.read()
        img = MIMEImage(img_data, name=img_path.split('/')[-1])
        img.add_header('Content-ID', '<image1>')  # 设置Content-ID以便在HTML中引用
        message.attach(img)

        # 添加Excel文件作为附件
    with open(excel_path, 'rb') as f:  # 替换为你的Excel文件路径
        attachment = MIMEBase('application', 'vnd.openxmlformats-officedocument.spreadsheetml.sheet')
        attachment.set_payload(f.read())
        encoders.encode_base64(attachment)
        attachment.add_header('Content-Disposition', 'attachment', filename=excel_path.split('/')[-1])  # 附件在邮件中的名称
        message.attach(attachment)

        # 发送邮件
    try:
        if port == 587:
            server = smtplib.SMTP(smtp_server, port)
            server.starttls()  # 端口为587时启动TLS模式
        else:
            server = smtplib.SMTP_SSL(smtp_server, port)
        server.login(sender_email, password)  # 登录到你的邮箱
        text = message.as_string()
        server.sendmail(sender_email, receivers, text)  # 发送邮件给多个接收者
        print('Email sent successfully!', subject)

    except Exception as e:
        print(f'Failed to send email: {e}', subject)


if __name__ == '__main__':
    subject = 'Python自动化测试报告'  # 邮件主题
    content = '这是一些测试内容'  # 邮件文字内容
    img_path = '123.jpg'      # 邮件正文图片
    excel_path = '123.xlsx'   # 邮件附件excel
    send_main(smtp_info, subject, content, img_path, excel_path)

发送成功效果图:


http://www.niftyadmin.cn/n/5422273.html

相关文章

【SpringBoot3】快速启动框架 快速入门 配置文件

文章目录 SpringBoot3介绍一、快速入门二、入门总结1. 为什么依赖不需要写版本&#xff1f;2. 启动器(Starter)是什么3. SpringBootApplication注解包括的效果&#xff1f; 三、SpringBoot3配置文件3.1 统一配置管理概述3.2 属性配置文件使用3.3 YAML配置文件使用3.4 批量配置文…

ffmpeg 从avio_write 到 udp_write

ffmpeg 从avio_write 到 udp_write --------------------------------------------- author: hjjdebug date: 2024年 03月 11日 星期一 14:16:44 CST description: ffmpeg 从avio_write 到 udp_write --------------------------------------------- 文章目录: 1. main 调用a…

单片机灭火避障小车设计

目录 目录 II 摘要 III 1 智能小车概述 5 1.1 国内外研究动态 5 1.2 课题的目的和意义 5 2 系统设计概述 6 2.1 系统设计要求 6 2 总体方案设计 7 2.1 硬件设计 7 2.1.1 车体设计 7 2.1.2 主控制器模块 8 2.1.3 电源模块 8 2.1.4 电机驱动模块 9 2.2 火源检测模块 10 2.3 避障…

JavaScript 设计模式之访问者模式

访问者模式 将一些必要的方法统一封装在一个对象中管理起来 假使我们有以下对象&#xff0c;提供了 splice、push、pop 三个方法&#xff0c;都基于 Array 来实现 const Visitor (() > {return {splice() {let args Array.prototype.splice.call(arguments, 1);return …

Python机器学习预测+回归全家桶,新增TCN,BiTCN,TCN-GRU,BiTCN-BiGRU等组合模型预测...

截止到本期&#xff0c;一共发了4篇关于机器学习预测全家桶Python代码的文章。参考往期文章如下&#xff1a; 1.机器学习预测全家桶-Python&#xff0c;一次性搞定多/单特征输入&#xff0c;多/单步预测&#xff01;最强模板&#xff01; 2.机器学习预测全家桶-Python&#xff…

Flink创建TableEnvironment

在官网上&#xff0c;Flink创建TableEnvironment有两种方式&#xff1a;1.通过静态方法 TableEnvironment.create() 创建&#xff1b;2.从现有的 StreamExecutionEnvironment 创建一个 StreamTableEnvironment 与 DataStream API 互操作 import org.apache.flink.table.api.En…

Android开发 Activity启动模式、ViewModel与LiveData,及Kotlin Coroutines

目录 Activity启动模式 onNewIntent解释 Activity启动模式的考虑时机 Service启动模式 ContentProvider的作用 Broadcast的注册方式 AsyncTask的作用 ViewModel LiveData Kotlin Coroutines 结合使用 Activity启动模式 Android中Activity的启动模式有四种&#xff0…

驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接问题解决

om.microsoft.sqlserver.jdbc.SQLServerException:驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client preferences [TLS13, TLS12]”你的项目要连接sqlserver数据库&#xf…