插件-发送邮件通知

news2024/12/23 9:28:39

有时候通过python运行程序,在出现异常时,需要进行邮件通知,可能还需要截图。比如对浏览器进行控制时出现了异常,则需要进行截图分析。

email-validator               2.0.0.post2
import asyncio
import logging
import smtplib
import traceback
from email.header import Header
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage

# 配置日志记录器
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')


async def email_notification(header: str = "默认标题",
                             message: str = "默认消息",
                             image_paths: list | None = None,
                             receiver: str = 'xxxxxxxxx@qq.com'):
    """
    发送邮件通知,包含多张图片和文字说明
    """
    try:
        MAIL = {
            "from": 'yyyyyyyyyy@qq.com',
            "pwd": 'zzzzzzzzzzz',
            "smtp": 'smtp.qq.com',
            "port": 465  # 使用SSL端口为465,非SSL端口为25
        }

        msg = MIMEMultipart('related')
        msg['Subject'] = Header(header, 'utf-8')  # 标题
        msg['From'] = MAIL['from']  # 发件人
        msg['To'] = receiver  # 收件人

        # 创建邮件正文
        html_content = f'<p>{message}</p>'
        if image_paths:
            for i, image_path in enumerate(image_paths):
                html_content += f'<p><img src="cid:image{i + 1}"></p>'

        html_message = MIMEText(html_content, 'html', 'utf-8')  # 正文
        msg.attach(html_message)

        if image_paths:
            # 添加多张图片附件
            for i, image_path in enumerate(image_paths):
                with open(image_path, 'rb') as f:
                    img = MIMEImage(f.read())
                    img.add_header('Content-ID', f'<image{i + 1}>')
                    msg.attach(img)
        """
        # 非SSL,如果为SSL则看下面
        # server = smtplib.SMTP(MAIL['smtp'])
        # 使用SSL连接SMTP服务器
        """
        # 使用SSL连接SMTP服务器
        server = smtplib.SMTP_SSL(MAIL['smtp'], MAIL['port'])

        # 登陆邮箱发送邮件
        server.login(MAIL['from'], MAIL['pwd'])
        server.sendmail(MAIL['from'], [receiver], msg.as_string())
        logging.info('发送邮件成功')

    except Exception as e:
        logging.error(f"发送邮件失败: {e}")
        logging.error(traceback.format_exc())


if __name__ == '__main__':
    image_paths = [r"C:\Users\Lenovo\Pictures\ZydnEQlw7nU=FmgT=JPXqamTy6hcRZRVfQdhRl=2nfIGq1530172365562.gif", r"C:\Users\Lenovo\Pictures\微信截图_20240110085422_cleanup.png"]
    asyncio.run(email_notification(image_paths=image_paths))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2197471.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++基础面试题 | C++中野指针和悬挂指针的区别?

文章目录 回答重点&#xff1a;1. 野指针&#xff08;Wild Pointer&#xff09;&#xff1a;2. 悬挂指针&#xff08;Dangling Pointer&#xff09;&#xff1a; 拓展知识&#xff1a;如何避免这些问题野指针和悬挂指针 回答重点&#xff1a; 在C中&#xff0c;野指针是指未初…

职场上的人情世故,你知多少?这五点一定要了解

职场是一个由人组成的复杂社交网络&#xff0c;人情世故在其中起着至关重要的作用。良好的人际关系可以帮助我们更好地融入团队&#xff0c;提升工作效率&#xff0c;甚至影响职业发展。在职场中&#xff0c;我们需要了解一些关键要素&#xff0c;以更好地处理人际关系&#xf…

计算机网络:物理层 —— 信道复用技术

文章目录 信道信道复用技术信道复用技术的作用基本原理常用的信道复用技术频分复用 FDM时分复用 TDM波分复用 WDM码分复用 CDM码片向量基本原理 信道 信道是指信息传输的通道或介质。在通信中&#xff0c;信道扮演着传输信息的媒介的角色&#xff0c;将发送方发送的信号传递给…

输入三位数的整数,求最大的一位数字 python

题目&#xff1a; 输入三位数整数&#xff0c;求最大的一位数字 代码&#xff1a; aint(input("请输入三位正整数&#xff1a;")) xa%10 #个 ya//10%10 #十 za//100%10 #百 print("最大的一位数为", max(x,y,z))运行结果&#xff1a;

20.Nginx动静分离原理与案例实现

一.Nginx动静分离原理与案例实现 1.动静分离原理图 2.动静分离的问题 3. Nginx动静分离案例实践 3.1 nginx部署架构图 3.2 nginx部署案例实现 (1)配置tomcats.conf文件 api.z.mukewang.com反向代理tomcat api upstream tomcats {server

AI编程工具的机遇与风险

作者 吴国平 北京市隆安律师事务所 超过1万个程序员&#xff0c;77,000个项目使用了Copilot&#xff0c;55%的程序员选择Copilot。 程序员使用人工智能来协助编写代码时&#xff0c;最终作品的所有权就变成了一个灰色地带。传统的软件著作权法是在程序员是代码创作…

Linux高效查日志命令介绍

说明&#xff1a;之前介绍Linux补充命令时&#xff0c;有介绍使用tail、grep命令查日志&#xff1b; Linux命令补充 今天发现仅凭这两条命令不够&#xff0c;本文扩展介绍一下。 命令一&#xff1a;查看日志开头 head -n 行数 日志路径如下&#xff0c;可以查看程序启动是否…

Django一分钟:DRF生成OpenAPI接口文档

DRF项目中如果想要自动生成API文档我们可以借助drf-spectacular这个库&#xff0c;drf-spectacular非常强大&#xff0c;它可以自动从DRF中提取信息&#xff0c;自动生成API文档&#xff0c;配置简单开箱即用&#xff0c;并且它对很多常用的第三方如&#xff1a;SimpleJWT、dja…

专业高清录屏软件!Mirillis Action v4.40 解锁版下载,小白看了都会的安装方法

Mirillis Action!&#xff08;暗神屏幕录制软件&#xff09;专业高清屏幕录像软件&#xff0c;被誉为游戏视频三大神器之一。这款屏幕录制软件和游戏录制软件&#xff0c;拥有三大硬件加速技术&#xff0c;支持以超高清视频画质录制桌面和实况直播&#xff0c;超清视频画质&…

论文速读:基于渐进式转移的无监督域自适应舰船检测

这篇文章的标题是《Unsupervised Domain Adaptation Based on Progressive Transfer for Ship Detection: From Optical to SAR Images》基于渐进式转移的无监督域自适应舰船检测:从光学图像到SAR图像&#xff0c;作者是Yu Shi等人。文章发表在IEEE Transactions on Geoscience…

erlang学习:Linux命令学习9

sed命令介绍 sed全称是&#xff1a;Stream EDitor&#xff08;流编辑器&#xff09; Linux sed 命令是利用脚本来处理文本文件&#xff0c;sed 可依照脚本的指令来处理、编辑文本文件。Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等 sed 的运行…

Dev-C++ 安装与使用(dev c++官网)(已解决)

1.Dev-C的安装 ①打开Dev-C的官网(https://sourceforge.net/projects/orwelldevcpp/ )&#xff1b;点击Download(下载)&#xff0c;等待5秒后开始下载。 ②点开下载好的EXE文件&#xff0c;等待加载完成(如图)。 右键&#xff0c;以管理员身份 运行安装包。 选择English(英语),…

近年来自动驾驶行业就业与企业需求情况

自动驾驶行业在近年来持续发展&#xff0c;就业情况和企业需求呈现出多样化和复杂化的趋势。 以下是基于我搜索到的资料对自动驾驶行业最新就业情况和企业需求的详细分析&#xff1a; 自动驾驶行业对高端技术人才的需求非常旺盛&#xff0c;尤其是架构工程师、算法工程师等岗…

四、Python基础语法(数据类型转换)

数据类型转换就是将一种类型的数据转换为另外一种类型的数据&#xff0c;数据类型转换不会改变原数据&#xff0c;是产生一个新的数据。 变量 要转换为的类型(原数据) -> num int(28) 一.int()将其他类型转换为整型 1.整数类型的字符串转换为整型 num1 28 print(type…

判断推理(3)

A正好说反了 C没说唐朝是否使用陶片 题干说的是有时会造成伤害&#xff0c;但是没有说服用了维生素和矿物质一定会带来伤害&#xff0c;所以A选项不能进行削弱 D是对比实验:增加反向论据。通过对儿童的调查发现&#xff0c;不服用的儿童营养缺乏症的发病率高&#xff0c;通过对…

Windows无需管理员权限,命令轻松修改IP和DNS

哈喽大家好&#xff0c;欢迎来到虚拟化时代君&#xff08;XNHCYL&#xff09;。 “ 大家好&#xff0c;我是虚拟化时代君&#xff0c;一位潜心于互联网的技术宅男。这里每天为你分享各种你感兴趣的技术、教程、软件、资源、福利…&#xff08;每天更新不间断&#xff0c;福利…

QML: FolderListModel(访问本地系统文件)

目录 一.性质 1.导入模块 2.基本属性 3.数据模型接口 4.方法 二.使用 1.引入 2.调用 三.效果 四.代码 一.性质 FolderListModel是QT提供的一个可以访问本地系统文件夹内容的组件&#xff0c;它能够将获取到的信息提供给其他组件使用。 1.导入模块 在使用FolderLis…

java动态生成类javassist

简述 Javassist&#xff08;Java Programming Assistant&#xff09;是一个 操作Java 字节码的类库&#xff0c;主要用于在运行时或编译时修改 Java 类的字节码。 它提供了相对简单的 API&#xff0c;让开发者可以动态地创建、修改和加载 Java 类 , 从而实现诸如动态代理、AOP…

用友Yonbuilder 平台使用教程序

用友Yonbuilder 平台使用教程 目录概述需求&#xff1a; 设计思路实现思路分析 免费下载参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for change,c…