利用阿里云企业邮箱服务实现Python群发邮件
目录
一、阿里云企业邮箱群发邮件全流程实现
1. 准备工作与环境配置
2. 收件人列表管理
3. 邮件内容构建
4. 附件添加实现
5. 邮件发送核心逻辑
二、开发过程中遇到的问题与解决方案
1. 附件发送失败问题
2. 中文文件名乱码问题
3. 企业邮箱认证失败
三、完整工作流程总结
四、注意事项
五、最终代码展示
在现代办公场景中,批量处理邮件已成为许多企业的常规需求。Python凭借其丰富的库生态和简洁的语法,成为实现办公自动化的首选工具。日常办公中,很多企业都是通过内部邮箱进行通知,因此Python批量邮件群发功能十分重要。本文将详细介绍如何利用Python结合阿里云企业邮箱服务,实现带附件的批量邮件发送功能,并分享在实际开发过程中遇到的问题及解决方案。
一、阿里云企业邮箱群发邮件全流程实现
1. 准备工作与环境配置
首先需要确保已开通阿里云企业邮箱服务并获取正确的SMTP配置信息:
# 阿里云企业邮箱配置
SMTP_HOST = "smtp.qiye.aliyun.com"
SMTP_PORT = 465 # SSL加密端口
USERNAME = "yourname@yourcompany.com"
PASSWORD = "yourpassword" # 注意保护敏感信息
DISPLAY_NAME = "公司邮件系统" # 发件人显示名称
2. 收件人列表管理
使用pandas库从Excel表格中智能识别邮箱列,自动处理数据格式,此处我们默认把所有邮箱放到email.xlsx这个Excel文件中,表头用"email"或"邮箱"或"mail":
def get_recipients(excel_path):"""从Excel获取收件人列表(自动识别邮箱列)"""try:df = pd.read_excel(excel_path, engine='openpyxl')# 智能识别邮箱列(支持中英文列名)email_col = next((col for col in df.columnsif any(kw in col.lower() for kw in ['mail', '邮箱', 'email'])),None)# 数据清洗处理recipients = (df[email_col].astype(str).str.strip().str.lower().dropna().unique().tolist())return recipientsexcept Exception as e:print(f"❌ 读取收件人列表失败: {e}")return []
3. 邮件内容构建
创建多部分邮件对象,支持纯文本内容和附件:
def build_email_message(receiver):"""构建带附件的邮件消息体"""msg = MIMEMultipart('alternative')# 设置邮件头(符合RFC标准)msg['From'] = formataddr([DISPLAY_NAME, USERNAME])msg['Reply-to'] = USERNAMEmsg['TO'] = receivermsg['Message-id'] = email.utils.make_msgid()msg['Date'] = email.utils.formatdate()msg['Subject'] = Header(EMAIL_SUBJECT_TEXT, 'utf-8')# 添加纯文本正文textplain = MIMEText(EMAIL_CONTENT_TEXT, _subtype='plain', _charset='UTF-8')msg.attach(textplain)return msg
4. 附件添加实现
关键点在于正确设置附件的Content-Type和Content-Disposition头信息:
def add_attachments(msg, attachment_paths):"""添加附件到邮件消息体"""for attachment_path in attachment_paths:try:with open(attachment_path, "rb") as f:filename = os.path.basename(attachment_path)att = MIMEText(f.read(), 'base64', 'utf-8')att["Content-Type"] = 'application/octet-stream'att.add_header("Content-Disposition", "attachment", filename=("gbk", "", filename) # 解决中文文件名编码问题)msg.attach(att)except Exception as e:print(f"✗ 添加附件失败: {attachment_path} | 错误: {str(e)}")
5. 邮件发送核心逻辑
支持SSL和非SSL两种连接方式,增强兼容性:
def send_email(receiver, msg):"""通过阿里云企业邮箱发送邮件"""try:# 尝试SSL连接try:client = smtplib.SMTP_SSL(SMTP_HOST, SMTP_PORT)except:# 回退到普通连接client = smtplib.SMTP(SMTP_HOST, 25, timeout=5)client.login(USERNAME, PASSWORD)client.sendmail(USERNAME, [receiver], msg.as_string())client.quit()return Trueexcept Exception as e:print(f"✗ 发送错误: {receiver} | 错误: {str(e)}")return False
二、开发过程中遇到的问题与解决方案
1. 附件发送失败问题
最初使用DeepSeek生成的代码发送附件时,虽然邮件能正常发出,但收件方无法看到附件。经过排查发现:
问题原因:附件内容类型(Content-Type)设置不正确,且未正确处理文件名编码。
解决方案:参照阿里云官方Demo,明确设置:
att["Content-Type"] = 'application/octet-stream'
att.add_header("Content-Disposition", "attachment", filename=("gbk", "", filename))
而且文件不是以二进制方式打开,而是以"base64"方式读取。所以修改上传附件功能核心代码:
with open(attachment_path, "rb") as f:filename = os.path.basename(attachment_path)att = MIMEText(f.read(), 'base64', 'utf-8')att["Content-Type"] = 'application/octet-stream'att.add_header("Content-Disposition", "attachment", filename=filename)msg.attach(att)
2. 中文文件名乱码问题
问题表现:附件名中的中文显示为乱码
解决方案:使用MIME编码处理文件名:
from email.header import Header
filename = Header(os.path.basename(attachment_path), 'utf-8').encode()
3. 企业邮箱认证失败
问题表现:频繁出现认证失败
解决方案:
确认使用的是SMTP专用密码(非邮箱登录密码)
尝试切换SSL和非SSL端口
检查阿里云控制台是否开启了SMTP服务
三、完整工作流程总结
- 准备阶段:配置SMTP参数,准备邮件内容和附件
- 数据读取:从Excel智能识别并提取收件人邮箱,并存为列表
- 邮件构建:创建MIMEMultipart对象;添加文本内容;添加附件(处理编码问题,注意阅读方式)
- 发送测试:先向自己发送测试邮件
- 批量发送:遍历收件人列表发送邮件
- 结果统计:记录成功/失败数量
四、注意事项
发送频率控制:
阿里云企业邮箱有发送频率限制,建议在循环中添加延时:
time.sleep(5) # 5秒间隔
错误重试机制:对发送失败的邮件实现自动重试:
max_retries = 2
for attempt in range(max_retries):if send_email_with_attachment(to_email):break
日志记录:建议将发送结果记录到日志文件,便于后续跟踪:
with open("send_log.txt", "a") as log:log.write(f"{time.ctime()},{to_email},{'成功' if result else '失败'}\n")
通过本文介绍的方法,企业可以高效地利用Python和阿里云企业邮箱服务实现批量邮件发送,大幅提升办公效率。
在群发邮件时,一定要正确处理邮件格式、附件编码以及错误处理机制,这些细节决定了程序的稳定性和可靠性。
五、最终代码展示
使用本代码时,所有邮件地址放到email.xlsx里,新建附件文件夹,所有附件都放在其中。
代码如下:
# -*- coding:utf-8 -*-
import smtplib
import email.utils # 修改这里,直接导入email.utils
import pandas as pd
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.utils import formataddr
from email.header import Header
import email.utils
import traceback, os, time
from glob import glob# 阿里云企业邮箱配置
SMTP_HOST = "smtp.qiye.aliyun.com"
SMTP_PORT = 465
USERNAME = "Your EMAIL"
PASSWORD = "YOUR PASSWORD"
DISPLAY_NAME = "公司邮件系统"# 邮件内容配置(重命名变量以避免冲突)
EMAIL_SUBJECT_TEXT = "重要通知:系统升级维护"
EMAIL_CONTENT_TEXT = """
尊敬的同事:根据公司IT规划,我们将于2023年12月15日(周五)20:00至24:00进行系统升级维护。
升级期间所有业务系统将暂停访问,请提前做好工作安排。如有疑问请联系IT支持部门:
电话:400-123-4567
邮箱:support@yourcompany.comIT管理中心
"""# 修改附件路径为绝对路径(示例)
ATTACHMENTS = [os.path.abspath(file) for file in glob(os.path.join("附件", "*")) if os.path.isfile(file)]def get_recipients(excel_path):"""从Excel获取收件人列表(自动识别邮箱列)"""try:if not os.path.isfile(excel_path):raise FileNotFoundError(f"文件不存在: {excel_path}")df = pd.read_excel(excel_path, engine='openpyxl')email_col = next((col for col in df.columnsif any(kw in col.lower() for kw in ['mail', '邮箱', 'email'])),None)if not email_col:available_columns = ", ".join(df.columns)raise ValueError(f"未找到邮箱列,可用列有: {available_columns}")recipients = (df[email_col].astype(str).str.strip().str.lower().dropna().unique().tolist())print(f"从Excel读取到 {len(recipients)} 个有效邮箱地址")return recipientsexcept Exception as e:print(f"❌ 读取收件人列表失败: {e}")return []def send_email_with_attachment(receiver):"""发送带附件的邮件(阿里云企业邮箱专用)"""try:# 创建多部分邮件对象msg = MIMEMultipart('alternative')# 设置邮件头(符合阿里云demo规范)msg['From'] = formataddr([DISPLAY_NAME, USERNAME])msg['Reply-to'] = USERNAMEmsg['TO'] = receivermsg['Message-id'] = email.utils.make_msgid() # 现在可以正确调用了msg['Date'] = email.utils.formatdate() # 现在可以正确调用了msg['Subject'] = EMAIL_SUBJECT_TEXT# 添加邮件正文textplain = MIMEText(EMAIL_CONTENT_TEXT, _subtype='plain', _charset='UTF-8')msg.attach(textplain)# 添加附件(按照阿里云demo方式)for attachment_path in ATTACHMENTS:try:if not os.path.isfile(attachment_path):print(f"⚠ 附件不存在: {attachment_path}")continuewith open(attachment_path, "rb") as f:filename = os.path.basename(attachment_path)att = MIMEText(f.read(), 'base64', 'utf-8')att["Content-Type"] = 'application/octet-stream'att.add_header("Content-Disposition", "attachment", filename=filename)msg.attach(att)print(f"✓ 已添加附件: {filename}")except Exception as e:print(f"✗ 添加附件失败: {attachment_path} | 错误: {str(e)}")traceback.print_exc()# 建立连接并发送(按照阿里云demo方式)try:client = smtplib.SMTP_SSL(SMTP_HOST, SMTP_PORT)print('smtp_ssl----连接服务器成功,现在开始检查账号密码')except Exception as e1:client = smtplib.SMTP(SMTP_HOST, 25, timeout=5)print('smtp----连接服务器成功,现在开始检查账号密码')except Exception as e2:print('抱歉,连接服务超时')return Falsetry:client.login(USERNAME, PASSWORD)print('账密验证成功')except:print('抱歉,账密验证失败')return Falseclient.sendmail(USERNAME, [receiver], msg.as_string())client.quit()print(f"✓ 已发送至: {receiver}")return Trueexcept Exception as e:print(f"✗ 发送错误: {receiver} | 错误: {str(e)}")traceback.print_exc()return Falseif __name__ == "__main__":print("\n=== 阿里云企业邮箱批量发送系统 ===")print(f"发件人: {DISPLAY_NAME} <{USERNAME}>")# 步骤1:获取收件人recipients = get_recipients("email.xlsx")if not recipients:print("❌ 程序终止:没有有效的收件人地址")else:# 步骤2:测试发送(给自己发一封)print("\n正在发送测试邮件...")if not send_email_with_attachment(USERNAME):print("❌ 测试邮件发送失败,请检查配置")else:# 步骤3:批量发送print("\n开始批量发送...")success_count = 0for to_email in recipients:if to_email != USERNAME.lower(): # 避免重复发送if send_email_with_attachment(to_email):success_count += 1# 发送结果统计print(f"\n发送完成: 成功 {success_count}/{len(recipients)}")if success_count < len(recipients):print("⚠ 注意:部分邮件发送失败,请查看上方日志")print("\n=== 程序执行结束 ===")
代码运行展示:
参考内容:
如何使用Python3.6及以上版本投递SMTP邮件_阿里邮箱(Alibaba Mail)-阿里云帮助中心
https://zhuanlan.zhihu.com/p/1894738611020214432
相关文章:
利用阿里云企业邮箱服务实现Python群发邮件
目录 一、阿里云企业邮箱群发邮件全流程实现 1. 准备工作与环境配置 2. 收件人列表管理 3. 邮件内容构建 4. 附件添加实现 5. 邮件发送核心逻辑 二、开发过程中遇到的问题与解决方案 1. 附件发送失败问题 2. 中文文件名乱码问题 3. 企业邮箱认证失败 三、完整工作流…...
中文编码,GB系列,UTF
图片来源:https://zhuanlan.zhihu.com/p/701690894 文章目录 ASCIIGB系列编码UTF编码 ASCII American Standard Code for Information Interchange 一个字节,但其实只用了一半: 128个字符 GB系列编码 “国标” 和ASCII是兼容的。 GB2312…...
车载以太网-TLS
文章目录 车载以太网与TLS的技术背景核心定位车载以太网TLS的技术架构车载TLS的核心安全机制TLS报文结构详解TLS工作机制密钥交换与计算流程标题完整握手流程(1-RTT)数据传输加密流程车载TLS的独特优化策略车载TLS的安全威胁相关标准车载以太网TLS(Transport Layer Security…...
【大英赛】大英赛准备笔记
听力 总结 提醒专注 一题一个听力时,听是重点 抓紧时间往后审题 比较容易的部分:secA & secD中的dictation,在大致审当前的基础上,分别利用这个时间提前看后面的secB√& summery secA 听之前应当大致审选项&#x…...
有序数组的平方
暴力排序 每个数平方以后排个序 class Solution { public:vector<int> sortedSquares(vector<int>& nums) {int slow0,fast0;int nnums.size();while(fast<n){nums[slow]nums[fast]*nums[fast];fast;slow;}sort(nums.begin(),nums.end());return nums;} }…...
Python基于Django的房屋信息可视化及价格预测系统(附源码,文档说明)
博主介绍:✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇dz…...
【5G-A学习】ISAC通信感知一体化学习小记
通信感知一体化(Integrated Sensing and Communication, ISAC)是一种将无线通信与环境感知功能深度融合的技术,通过共享硬件、频谱和信号处理流程,实现通信与感知的协同增效。其核心原理及无人机与飞鸟的识别方式如下:…...
深入解析@Validated注解:Spring 验证机制的核心工具
一、注解出处与核心定位 1. 注解来源 • 所属框架:Validated 是 Spring Framework 提供的注解(org.springframework.validation.annotation 包下)。 • 核心定位: 作为 Spring 对 JSR-380(Bean Validation 2.0&#…...
学生考勤管理系统(jsp+ssh+mysql5.x)含文档
学生考勤管理系统(jspsshmysql5.x)含万字详细文档 学生考勤管理系统是一个用于管理学生出勤和请假的系统,系统登录页面提供账号和密码输入框,用户可以选择角色进行登录。系统主菜单包括班级管理、用户管理、课程表管理和考勤情况…...
【响应式编程】Reactor 常用操作符与使用指南
文章目录 一、创建操作符1. just —— 创建包含指定元素的流2. fromIterable —— 从集合创建 Flux3. empty —— 创建空的 Flux 或 Mono4. fromArray —— 从数组创建 Flux5. fromStream —— 从 Java 8 Stream 创建 Flux6. create —— 使用 FluxSink 手动发射元素7. generat…...
为什么我们需要if __name__ == __main__:
[目录] 0.前言 1.什么是 __name__? 2.if __name__ __main__: 的作用 3.为何Windows更需if __name__ ?前言 if __name__ __main__: 是 Python 中一个非常重要的惯用法,尤其在使用 multiprocessing 模块或编写可导入的模块时。它的作用是区分…...
Week 1: Time Complexity, Rectangle Geometry
问题集 Square PastureBucket BrigadeBlocked BillboardBlocked Billboard IIWord ProcessorDo You Know Your ABCs?The Cow-SignalD3C - White Sheet 视频解析 Square Pasture Bucket Brigade Blocked Billboard Blocked Billboard II Word Processor Do You Know Your AB…...
论文学习:《通过基于元学习的图变换探索冷启动场景下的药物-靶标相互作用预测》
原文标题:Exploring drug-target interaction prediction on cold-start scenarios via meta-learning-based graph transformer 原文链接:https://www.sciencedirect.com/science/article/pii/S1046202324002470 药物-靶点相互作用(DTI&…...
STM32 HAL库 OLED驱动实现
一、概述 1.1 OLED 显示屏简介 OLED(Organic Light - Emitting Diode)即有机发光二极管,与传统的 LCD 显示屏相比,OLED 具有自发光、视角广、响应速度快、对比度高、功耗低等优点。在嵌入式系统中,OLED 显示屏常被用…...
UE5蓝图之间的通信------接口
一、创建蓝图接口 二、双击创建的蓝图接口,添加函数,并重命名新函数。 三、在一个蓝图(如玩家角色蓝图)中实现接口,如下图: 步骤一:点击类设置 步骤二:在细节面板已经实现的接口中…...
封装Tcp Socket
封装Tcp Socket 0. 前言1. Socket.hpp2. 简单的使用介绍 0. 前言 本文中用到的Log.hpp在笔者的历史文章中都有涉及,这里就不再粘贴源码了,学习地址如下:https://blog.csdn.net/weixin_73870552/article/details/145434855?spm1001.2014.3001…...
深入解析 Android 图形系统:Canvas、Skia、OpenGL 与 SurfaceFlinger 的协作
在 Android 应用开发中,流畅的 UI 渲染是用户体验的核心。但你是否好奇,一个简单的 View 是如何从代码中的 onDraw() 方法一步步变成屏幕上的像素的?本文将从底层图形系统的视角,解析 Android 中 Canvas、Skia、OpenGL ES 和 Surf…...
LeetCode每日一题4.13
1922. 统计好数字的数目 问题 问题分析 题目要求我们找到长度为 n 且满足特定条件(偶数下标处为偶数,奇数下标处为质数)的数字字符串的总数,并对 (10^9 7) 取余。 思路 1.枚举 生成所有可能的数字字符串:对于长度…...
Java学习——day29(并发控制高级工具与设计模式)
文章目录 1. 并发控制高级工具简介1.1 CountDownLatch1.2 CyclicBarrier1.3 Semaphore1.4 并发设计模式 2. 扩展生产者—消费者示例2.1 示例代码 3. 代码详解3.1 主类 ExtendedProducerConsumerDemo3.2 Buffer 类3.3 Producer 类3.4 Consumer 类 4. 编译与运行结果4.1 编译4.2 …...
使用FormData格式上传图片
为什么要使用FormData格式上传图片 1. 为什么使用 FormData? FormData 是一种专门用于构建表单数据的对象,它能够以 multipart/form-data 格式发送数据,这是文件上传的标准格式。以下是使用 FormData 的主要原因: 简单易用 直…...
Tkinter表格与列表框应用
在图形用户界面(GUI)开发中,表格和列表框是常用的控件,用于显示和管理大量的数据。Tkinter提供了Listbox控件来显示简单的列表数据,而对于更复杂的表格数据,可以使用Treeview控件(属于ttk模块)来实现。这一章将介绍如何使用Listbox和Treeview来显示和操作数据,帮助您处…...
【Excel】数据透视表月度数据排序不正确
【问题】 插入数据透视表后,月度列显示的日期,是按照文本格式排序的,显然与实际月份排序并不相符。 【目的】 按照从1月份到12月份进行自然月度排序。 【方法】 步骤一: 在任意一处,输入“1月”-“12月”&#…...
HCIP第十天
OSPF的数据包 OSPF是跨层封装协议,直接封装在网络层之上 --- 需要IP协议使用一个协议号来标定 OSPF --- 89 OSPF的头部 版本 --- OSPF的版本 --- 2 类型 --- OSPF数据包的类型 --- hello -- 1 DBD -- 2 LSR -- 3 LSU -- 4 LSACK -- 5 路由器ID --- RID --- 携带的是发出O…...
Vue2,Vue3知识大全
Vue 1.了解vue,快速上手 vue是一个用于构建用户的界面的渐进式框架. vue的两种使用方法: vue核心包开发 场景:局部模块改造 vue核心包&vue插件 工程化开发 场景:整站开发 1.创建一个vue实例: 2.插值表达式 1.插值表达式是一种Vue的模版语法 作用:利用表达式进行插值…...
java面向对象02:回顾方法
回顾方法及加深 定义方法 修饰符 返回类型 break:跳出switch和return的区别 方法名 参数列表 package com.oop.demo01;//Demo01类 public class Demo01 {//main方法public static void main(String[] args) {}/*修饰符 返回值类型 方法名(...){//方法体return…...
【Ubuntu】【树莓派】Linux系统的远程终端登录、远程图形桌面访问、 X图形窗口访问和文件传输操作
目录 一、Ubuntu远程终端并实现文件上传下载 1.1Ubuntu桥接模式设置和新用户的创建 1.2Ubuntu的远程登录并上传和下载文件 1.3在Xming中进行Ubuntu的图形访问 二、树莓派远程登录并实现文件上传下载 2.1树莓派在putty上的远程登录 2.2使用ftp远程登录并实现文件上传下载…...
Linux Kernel 2
地址空间(Address Space) 一、物理地址空间(Physical Address Space) 物理地址空间 是指 RAM 和设备内存 在系统内存总线上所呈现的地址布局。 举例:在典型的 32 32 32 位 Intel 架构中, RAM(…...
二.springBoot项目集成ElasticSearch及使用
二.springBoot项目集成ElasticSearch及使用 1.依赖引入2.ElasticSearch常见用法 1.依赖引入 <!--elasticsearch搜索引擎--> <!--高版本7.0后TransportClient已被淘汰,用rest-high-level-client代替--> <dependency><groupId>org.elasticse…...
从三次方程到复平面:复数概念的奇妙演进(一)
注:本文为 “复数 | 历史 / 演进” 相关文章合辑。 因 csdn 篇幅限制分篇连载,此为第一篇。 生料,不同的文章不同的点。 机翻,未校。 Reflections on the History of Complex Numbers 复数的历史回顾 The first occurrence o…...
Day52 | 6. Z 字形变换、8. 字符串转换整数 (atoi)、22. 括号生成、38. 外观数列
6. Z 字形变换 题目链接:6. Z 字形变换 - 力扣(LeetCode) 题目难度:中等 代码: class Solution {public String convert(String s, int numRows) {if(numRows<2) return s;List<StringBuilder> rowsnew A…...
每日OJ_牛客_ruby和薯条_排序+二分/滑动窗口_C++_Java
目录 ruby和薯条_排序二分/滑动窗口 题目解析 C代码 Java代码 ruby和薯条_排序二分/滑动窗口 ruby和薯条 描述: ruby很喜欢吃薯条。 有一天,她拿出了n根薯条。第i根薯条的长度为ai。 ruby认为,若两根薯条的长度之差在l和r之间ÿ…...
快速幂运算
快速幂运算 一、快速幂运算快速幂运算(Exponentiation by Squaring)基本思想算法实现(②③为非递归)① 递归运算② 普通 除模运算(不带 **模数** 与 带 **模数**)③ 按位与运算 使用示例示例代码 复杂度分析…...
vue @import引入CSS scoped无效 造成全局样式污染
引入css文件导致全局样式污染 1.写在单组件的style里面css样式,如果标签内不加scoped可能会影响其他组件的样式 <style lang"scss" scoped> </style> 2.通过import引入的外部css文件,这种引入方式是全局的,也会影响其…...
基于Flask-Login简单登录和权限控制实践
1. 关于Flask-Login Flask-Login 是一个为python Flask Web框架设计的扩展,用于管理用户会话(用户登录状态)。它提供了简单的接口来处理用户登录、注销、记住用户等功能,同时确保用户会话的安全性。以下是 Flask-Login 的一些关键特性和功能: 1.1. 主要功能 用户会话管理…...
文件流---------获取文件的内容到控制台
总流程:先创建一个文本文件------->里面写入一些内容(纯字母和字母加文字)-----------> 然后通过输入流获取文件里面的内容,两种方式。 1.第一种,获取单个的字符 ,先创建文件 ,java.txt…...
idea 2024 build菜单不见了
Q如题 idea 2024 新版UI添加build和recompile菜单 A如图,右键顶部栏之后,点击Add to Main Toolbar菜单,在里面就能找到Build菜单,添加接口。 Recompile菜单的话在Customize Toolbar中搜索添加才行。...
深入理解计算机操作系统(持续更新中...)
文章目录 一、计算机系统漫游1.1信息就是位上下文 一、计算机系统漫游 1.1信息就是位上下文 源程序实际上就是一个由值0和1组成的位(又称为比特),八个位被组织成一组,称为字节。每个字节表示程序中的某些文本字符 大部分现代计…...
[dp8_子数组] 乘积为正数的最长子数组长度 | 等差数列划分 | 最长湍流子数组
目录 1.乘积为正数的最长子数组长度 2.等差数列划分 3.最长湍流子数组 写代码做到,只用维护好自己的一小步 1.乘积为正数的最长子数组长度 链接:1567. 乘积为正数的最长子数组长度 给你一个整数数组 nums ,请你求出乘积为正数的最长子数…...
量子机器学习(Quantum Machine Learning, QML)在优化测试组合
量子机器学习(Quantum Machine Learning, QML)在优化测试组合选择中展现出显著潜力,通过量子计算的并行性和量子态叠加特性,可高效解决传统方法难以处理的组合爆炸问题。以下是其技术实现路径、优势及落地案例: 一、QML优化测试组合的核心原理 1. 量子并行性加速搜索 经典…...
Go语言Slice切片底层
Go语言(Golang)中切片(slice)的相关知识、包括切片与数组的关系、底层结构、扩容机制、以及切片在函数传递、截取、增删元素、拷贝等操作中的特性。并给出了相关代码示例和一道面试题。关键要点包括: 数组特性…...
导入 Excel 批量替换文件夹名称
文件夹重命名的需求是多种多样的,前面我们介绍过按照规则修改文件夹名称的方法。但是在某些场景下,这个方法可能是不适用的,比如我们修改文件夹的规则是多种多样的,是无规律的。那我们应该怎么做呢?今天我们就给大家介…...
数据库或表数据迁移(使用Navicat迁移MySQL数据库表数据)
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 数据库或表数据迁移(使用Navicat…...
Matlab Add Legend To Graph-图例添加到图
Add Legeng To Graph: Matlab的legend()函数-图例添加到图 将图例添加到图 ,图例是标记绘制在图上的数据序列的有用方法。 下列示例说明如何创建图例并进行一些常见修改,例如更改位置、设置字体大小以及添加标题。您还可以创建具有多列的图…...
【Linux】what is pam?PAM模块学习笔记
文章目录 1. pam模块简介2. pam验证的工作流程3. pam模块配置文件3.1 配置文件的格式3.1.1 验证类别type3.1.2 验证的控制标识 control flag3.1.3 pam模块 4. login的PAM验证机制流程5. 补充:其他pam相关文件6. 参考内容 1. pam模块简介 PAM: Pluggable Authentica…...
5.1 GitHub订阅监控系统实战:FastAPI+SQLAlchemy高效架构设计与核心源码揭秘
GitHub Sentinel Agent 分析报告功能设计与实现 关键词:订阅管理 API 设计、GitHub API 集成、SQLAlchemy ORM、JWT 认证、单元测试框架 1. 订阅管理功能架构设计 订阅管理模块采用分层架构设计,通过 FastAPI 构建 RESTful 接口,结合 SQLAlchemy ORM 实现数据持久化: #me…...
【BEPU V1物理】BEPUphysics v1 入门指南 汉化笔记#1
BEPUphysics v1 入门指南 前言下载获取库工程1.创建物理模拟环境2.添加物理实体3.与物理系统交互4.发射物体5.构建环境6.事件处理7. 进阶学习 前言 本文档记录完成 BEPUphysics 物理引擎的基础设置。 文档链接:https://github.com/bepu/bepuphysics1/blob/master/Documentatio…...
方法加事务在多线程中注意事项
方法加事务在多线程中注意事项 redission分布式锁释放异常问题 https://www.jianshu.com/p/055ae798547a https://blog.csdn.net/cheng__yu/article/details/122625649 虽然文章 https://blog.csdn.net/cheng__yu/article/details/122625649 和 redission锁是没关系的&#…...
开源 2D 横版跳跃游戏 SuperTux
官网 https://www.supertux.org/ 正文 在游戏的世界里,开源游戏以其独特的魅力吸引着众多玩家和开发者。今天要介绍的 SuperTux,便是一款备受瞩目的开源 2D 横版跳跃游戏,风格类似经典的超级马里奥系列。 2024 年,SuperTux 开发团…...
基于HASM模型的高精度建模matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 本课题主要使用HASM进行高精度建模,主要对HASM模型进行介绍以及在实际中如何进行简化实现的。 2.测试软件版本以及运行结果展示 MATLAB2022A版本运行…...
C++多线程编程时的伪共享问题及其定位和解决
一、引言 在多线程编程和共享内存系统中,为了提高程序性能,常常需要对共享数据进行处理。然而,在并发环境下,一种名为“伪共享(False Sharing)”的问题可能会悄然出现,它虽然不像传统的多线程同…...