Smtplib之发邮件模块

news2025/7/26 20:12:15

目录

创建Smtp对象

Smtp类中的方法

MIME

MIMEBase

MIMEBase 

MIMEMultipart 

MIMEApplication 

MIMEAudio 

MIMEImage

MIMEText

实例

text+html格式

发送带图片附件的邮件

发送带附件的邮件

含多种格式


SMTP模块

SMTP 简单传输协议,它是一组用于由源地址 到 目的地址的 邮件传输规则;

python可以发送纯文本邮件(HTML邮件)、带附件的邮件、以及图片、音频的邮件等;

email模块:负责构建邮件;  smtplib模块:负责发送邮件


创建Smtp对象

import smtplib

smtpObj  = smtplib.SMTP( [host [, 25 [, local_hostname]]] )
# smtpObj = smtplib.SMTP_SSL( [host [, 994 [, local_hostname]]] )
 

参数说明:
host:  SMTP 服务器主机。 你可以指定主机的ip地址 或者 域名,如: runoob.com,这个是可选参数。

port:  如果你提供了host 参数, 你需要指定 SMTP 服务使用的端口号,一般情况下 SMTP 端口号为25。

local_hostname:  如果 SMTP 在你的本机上,你只需要指定服务器地址为 localhost 即可。 

###示例一: 

smtp = smtplib.SMTP()

smtp.connect( [host [ , port]] )        # 连接远程smtp方法,host为远程主机地址,port为smtp端口,默认25;

# 也可使用host:port形式来表示. 如:SMTP.connect("smtp.163.com","25")

smtp.starttls()                         # 开启安全传输模式

smtp.login("test@arcvideo.com","pwd")   # 邮箱账号登录校验

smtp.sendmail(FROM, [ TO ], BODY)       # 邮件发送

smtp.quit()                             # 断开smtp连接
 
###示例二:
smtp = smtplib.SMTP( [host [ , port]] )

smtp.login("test@arcvideo.com","pwd")   # 邮箱账号登录校验

smtp.set_debuglevel(1)                  # 打印出和SMTP服务器交互的所有信息。

smtp.sendmail(FROM, [TO], BODY)         # 邮件发送

smtp.quit()                             # 断开smtp连接

smtp中sendmail方法:

SMTP.sendmail( from_addr, to_addrs, msg [, mail_options, rcpt_options] )  

# from_addr: 发件人地址。to_addrs: 收件人地址(是字符串列表 形式)。msg: 发送消息的内容 【 msg.as_string()  】

eg: smtp.sendmail( sender, receivers , msg.as_string() ) 

注意:msg 是字符串,表示邮件。我们知道邮件一般由标题,发信人,收件人,邮件内容,附件等构成,发送邮件的时候,要注意msg 的格式。这个格式就是 smtp 协议中定义的格式。

Smtp类中的方法

MIME

通过邮件传输简单的文本已经无法满足我们的需求,比如我们时常会定制业务质量报表,在邮件主体中会包含 HTML、图像、声音以及附件格式等,MIME(Multipurpose Internet Mail 

Extensions,多用途互联网邮件扩展)作为一种新的扩展邮件格式很好地补充了这一点。

示例:

msg.add_header('Content-ID','imgid')                                           # 设置图片ID【图片在正文中可用】

msg.add_header('Content-Disposition','attachment',filename='test.xlsx')        # 为附件添加标题(没有这行,附件名称乱码)

msg.add_header('Content-Disposition','attachment',filename=('utf-8','','中文标题'))   # 添加非ASCII字符时需指定编码
【图片本来在正文中,但是若加了上边2行之一,则正文中的图片 会跑到附件中。因为上边2行是专门为"附件" 服务的】

eg:
msg_img.add_header('Content-ID', '<0>')

msg_img.add_header('Content-Disposition', 'attachment', filename="a4.jpg")           
email.header.Header ( s=None , charset=None ):创建一个可以包含不同字符集中的字符串,并符合MIME的标头。
可选参数: s是初始标题值默认为None, 可以使用append()方法追加到标题,charset指定字符集
from email.header import Header
msg['From'] = Header( "测试邮件来自" , 'utf-8' )

附加工具:email.utils
  email.utils.localtime(dt=None):返回当前时间,dt参数为datetime实例
  email.utils.formataddr(pair,charset='utf-8'):pair是一个元祖或列表,返回分割的标题与地址 如邮箱收件人昵称和邮箱账号


示例:
from email.utils import formataddr
msg['From'] = formataddr( ['zhangsan' , 'wyh1942049307@163.com' ] )    
msg['To']   = formataddr( ['Anybody' , '92066@163.com'] )

MIMEBase

Message

+- MIMEBase

   +- MIMEMultipart

   +- MIMENonMultipart

      +- MIMEMessage

      +- MIMEText

      +- MIMEImage

如果只有一个html超文本正文 或者 plain普通文本正文的话,一般msg的类型可以是MIMEText;

如果是多个的话,就都添加到MIMEMultipart,msg类型就变为MIMEMultipart。

msg.attach ( MIMEText对象 或 MIMEImage对象 ):

将MIMEText对象或MIMEImage对象添加到MIMEMultipart对象中。

MIMEMultipart对象代表邮件本身,MIMEText对象或MIMEImage对象代表邮件正文。

以上的构造的文本,超文本,附件,图片都可以添加到MIMEMultipart('mixed')中

MIMEBase 

这是所有MIME特定类的基类

email.mime.base.MIMEBase (_maintype,_subtype,*,policy = compat32,** _ params) :

     _maintpe是Content-Type主要类型(text  or image)

     _subtype是Content-Type次要类型(plain or gif)

     _params是一个键值字典参数直接传递给Message.add_header

示例:
filename1 = '图片.pdf'
attachfile_base = MIMEBase('application', 'octet-stream')      # 创建基础对象指定类型
attachfile_base.set_payload (open(filename,'rb').read() )      # 设置我有效负载
 
# 设置文件名可用中文【若没有下边add_header(), 则附件中图片不能正常显示】
attachfile_base.add_header('Content-Disposition', 'attachment', filename=('utf-8', '', filename1))   #为附件添加一个标题
attachfile_base.add_header('Content-Disposition', 'attachment', filename=filename1 .encode('UTF-8'))
 
encoders.encode_base64(attachfile_base)
msg.attach(attachfile_base)                                     # 附加对象加入到msg

MIMEMultipart 

带多个部分邮件(与附件相关)

作用是生成包含多个部分邮件体的MIME对象

email.mime.multipart.MIMEMultipart( _subtype='mixed', boundary= None, _subparts = None, *, policy = compat32, ** _ params ):


_subtype 指定要添加到"Content-type:multipart/subtype" 报头的可选的三种子类型,分别为         mixed、related、alternative,默认值为 mixed。

       mixed  构建带附件的邮件;(向上兼容,如果一个邮件有纯文本正文,超文本正文,内嵌资源,附件,则选择mixed类型)           

       related 构建内嵌资源的邮件体;(内嵌图片、声音等资源)

       alternative 则实现构建纯文本(text/plain) 与 超文本(text/html) 共存的邮件体;

_subparts是有效负载的一系类初始部分,可以使用attach()方法将子部件附加到消息中。

示例:
from email.mime.multipart import MIMEMultipart

msg1 = MIMEMultipart('mixed') 等效于msg = MIMEMultipart( )  # 创建带附件的实例

msg2 = MIMEMultipart('related')       # 创建内嵌资源的实例(如:

在正文html中 内嵌图片)

msg3 = MIMEMultipart('alternative')   # 创建纯文本与超文本实例



# 创建一个带附件的实例

msg = MIMEMultipart()     # 等价于 msg = MIMEMultipart('mixed') 默认值为mixted ,创建带附件的实例

msg['Subject'] = subject  # MIMEMultitext() 与 MIMEMultipart() 时,均可以这样

msg['From'] = sender

msg['To'] = receivers

MIMEApplication 

消息对象应用

被用来表示主要类型的MIME消息对象应用

email.mime.application.MIMEApplication( _data, _subtype='octet-stream', _encoder=email.encoders.encode_base64, *, policy=compat32, **_params ):

        _data是一个包含原始字节数据的字符串;

        _subtype指定MIME子类型默认为八位字节流;

        _encoder是一个可调用函数,它执行传输数据的实际编码,使用set_payload()将有效载荷改为编码形式,默认编码位base64,可使用email.encoders模块查看内置编码表。

示例:
filename = 'abc.pdf'

with open(filename,'rb') as f:

    attachfile = MIMEApplication( f.read() )

attachfile.add_header('Content-Disposition', 'attachment', filename=filename)

msg.attach(attachfile)  # 附加对象加入到msg

MIMEAudio 

创建包含音频数据的邮件体

email.mime.audio.MIMEAudio ( _audiodata [, _subtype [, _encoder]] ):

      _audiodata 包含原始二进制音频数据的字节字符串;

      _subtype音频类型;

      _encoder编码。

示例:
from email.mime.audio import MIMEAudio

msgaudio = MIMEAudio( open('yishengsuoai.mp3','rb').read() , 'plain' )             


# 文本音频对象,plain是默认。
msgaudio.add_header('Content-Disposition','attachment',filename='text.mp3') #扩展标题类型,文件名

msg.attach(msgaudio)  

MIMEImage

MIMENonMultipart中的一个子类,创建包含图片数据的邮件体

email.mime.image.MIMEImage ( _imagedata [ , _subtype [ , _encoder [ , **_params]]] ):

       _imagedata 是包含原始图片数据的字节字符串;

       _sutype    指定图像子类型;

     _encoder   指定一个函数内部编码默认为:email.encoders.encode_base64默认为base64编码;

示例:
from email.mime.image import MIMEImage 

with open('test.png','rb') as fp:
    msgImage = MIMEImage( fp.read() ) 

msgImage.add_header('Content-ID','imgid')  # 为图片对象拓展标题字段和值

msg.attach(msgImage)                       # 将图像负载添加到msg负载

MIMEText

文本  html格式邮件

MIMENonMultipart中的一个子类,创建包含文本数据的邮件体

email.mime.text.MIMEText ( _text [ , _subtype [ , _charset]] ):

      _text 要发送的文本字符串内容;

     _subtype 指定文本类型,支持 plain(默认值为txt格式) 或 html类型的字符串。发送HTML格式的时候,修改为html,但同时要求msg的内容也是html的格式;【注意:html格式的,就是放在MIMEText中的

_charset设置字符集,参数接收一个charset实例;

示例:
from email.mime.text import MIMEText

# 创建文本内容的邮件体
msg = MIMEText( "python test email" , 'plain' , 'utf-8' )

# 创建HTML格式的邮件体
msg = MIMEText( "<p>python test email</p><p><a href="http://www.demo.com">链接</a></p>" , 'html' , 'utf-8' )

 
# 构造TEXT格式的消息
msg = MIMEText ("hello.text","plain","utf-8")

msg["Subject"] = "xxxxx"  # 主题

msg["From"] = "xxxx"      # 发送者

msg["To"] = "xxxx"        # 接收者
msg["Cc"] = "xxxx"        # 抄送
 
#注意:发送以上构造的邮件内容要使用as_string将构造的邮件内容转换为string形式。
msg.sendmail( "发件人","收件人" , msg.as_string )

实例

text+html格式

import smtplib
from email.mime.text import MIMEText
from email.header import Header

sender = 'xxx@163.com'

passwd = 'abcdefg'                                   

receivers = '123456789@qq.com'  

subject = 'python发邮Html格式测试'  

content = "<html><h1>人生苦短,何必执着</h1></html>"

msg = MIMEText(content, 'html', 'utf-8')

msg['Subject'] = Header(subject , 'utf-8') # msg['Subject'] = subject

msg['From'] = Header('hello', 'utf-8')     # msg['From'] = sender , 发件人为:hello

#msg['From'] = '詹姆斯'                     # 可以固定写死(也可以为空)

msg['To'] = Header('emmmm', 'utf-8')       # msg['To'] = receivers , 收件人为:emmmm   

#msg['To'] = '湖人队'

try:

    smtp = smtplib.SMTP('smtp.163.com', 25)

    smtp.login(sender, passwd)

    smtp.sendmail(sender, receivers, msg.as_string())

    print('发送成功')

except:                                    # 或 except Exeception as e:

    print('发送失败')

发送带图片附件的邮件

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

sender = 'xxx@163.com'

passwd = 'abcdefg'

receivers = '123456789@qq.com'

subject = 'python发邮带img的邮件测试'

# 创建一个带附件的实例
msg = MIMEMultipart() # 等价于 msg = MIMEMultipart('mixed') 默认值为mixted ,创建带附件的实例

msg['Subject'] = subject

msg['From'] = sender

msg['To'] = receivers

# 创建正文
msg.attach( MIMEText('使用python smtplib模块和email模块自动发送邮件测试', 'plain', 'utf-8') )

# 创建图片附件
import os

img_file = open("/Users/benmu/Desktop/库里.jpg", 'rb').read()

#img_file = open(os.getcwd()+"/a4.jpg",'rb').read() # 获取项目中的 a4.jpg图片
msg_img = MIMEImage(img_file)

#没有下边2行,接收邮件端,的附件图片不能正常显示
msg_img.add_header('Content-Disposition', 'attachment', filename="a4.jpg")   #为附件添加标题(没有这行,附件名称乱码)

msg_img.add_header('Content-ID', '<0>')

msg.attach(msg_img)    # 附加对象加入到msg

try:
    s = smtplib.SMTP('smtp.163.com', 25)
 
    s.set_debuglevel(1)  # 输出发送邮件详细过程
 
    s.login(sender, passwd)
  
    s.sendmail(sender, receivers, msg.as_string())
  
    print('发送成功')

except:

print('发送失败')

发送带附件的邮件

模版(xlsx、csv、jpg、mp3)

下方替换的模版【各个部分一组合,就是发送多个附件】

###xlsx类型的附件【筛选、固定宽度、冻结首行;多sheet页这些; 原样发过去,格式、数据都不变】[也可发送zip文件]

xlsx = MIMEApplication( open('/Users/benmu/Desktop/挂数200条.xlsx', 'rb' ).read() )      # 改为挂数200条.csv也可以

xlsx.add_header('Content-Disposition', 'attachment', filename='挂数200条.xlsx')         # 为附件添加标题

xlsx["Content-Type"] = 'application/octet-stream'

mes.attach(xlsx)

或

# 读取xls文件作为附件,open()要带参数'rb',使文件变成二进制格式,从而使'base64'编码产生作用,否则附件打开乱码
att = MIMEText( open("/Users/benmu/Desktop/挂数200条.xlsx", 'rb' ).read(), 'base64', 'GB2312' )

att.add_header('Content-Disposition','attachment',filename='挂数200条.xls')

att['Content-Type'] = 'application/vnd.ms-excel'

mes.attach(att)


### jpg类型的附件
jpgpart = MIMEApplication( open('/Users/benmu/Desktop/库里.jpg', 'rb').read() )

jpgpart.add_header('Content-Disposition', 'attachment', filename='库里.jpg')

mes.attach( jpgpart )

或

fp = open('/Users/benmu/Desktop/库里.jpg', 'rb')

msgImage = MIMEImage(fp.read())

fp.close()

msgImage.add_header('Content-Disposition', 'attachment', filename='库里.jpg')

mes.attach(msgImage)


### mp3类型的附件
mp3part = MIMEApplication(open('/Users/benmu/Desktop/大数据时代下数据可视化技术.m4a', 'rb').read())

mp3part.add_header('Content-Disposition', 'attachment', filename='大数据时代下数据可视化技术.m4a')

mes.attach(mp3part)

####带“多个”附件####

# 构造附件1,传送当前目录下的 test.txt 文件
att_annex1 = MIMEText(open('/Users/benmu/Desktop/test.txt', 'rb').read(), 'base64', 'utf-8')

att_annex1["Content-Type"] = 'application/octet-stream'

att_annex1["Content-Disposition"] = 'attachment; filename="test.txt"'

mes.attach(att_annex1)

# 构造附件2,传送当前目录下的 test2.txt 文件
att_annex2 = MIMEText(open('/Users/benmu/Desktop/runoob.txt', 'rb').read(), 'base64', 'utf-8')

att_annex2["Content-Type"] = 'application/octet-stream'

att_annex2["Content-Disposition"] = 'attachment; filename="runoob.txt"'

mes.attach(att_annex2)

含多种格式

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

# 遍历桌面文件夹 中 文件
files ='/Users/benmu/Desktop/my_test'  # 附件中内容都在桌面的my_test文件夹中

filenames = [os.path.join(files, f) for f in os.listdir(files) ]  #os.listdir()返回指定文件夹下的"所有文件和文件夹",保存到列表中

sender = 'xxx@163.com'

receivers = ['123456789@qq.com']

passwd = 'abcdefg'

subject = 'Python SMTP 邮件测试'

content = MIMEText('测试发送数据:')

mes = MIMEMultipart( )  # 创建带附件的实例

mes.attach(content)     # 正文内容

mes['From'] = Header("詹姆斯", 'utf-8')  # MIMEMultitext() 与 MIMEMultipart() 时,均可以这样

mes['To'] = Header("湖人队", 'utf-8')

mes['Subject'] = Header(subject, 'utf-8')


for file in filenames:

       a = file.rfind('/')

       file_name = file[a+1:]       # 截取后获得文件名

       if file_name !='.DS_Store':  # 过滤掉以.DS_Store结尾的文件【不知哪来的】

           #print(file_name)        # 打印文件夹中 文件名【可去掉】

           part = MIMEBase('application', 'octet-stream') # 必须是使用MIMEBase

           part.set_payload(open(file, 'rb').read())

           encoders.encode_base64(part)

           part.add_header('Content-Disposition', 'attachment', filename='%s' % file_name) 

           mes.attach(part)


try:

    smtp = smtplib.SMTP('smtp.163.com',25)

    smtp.login(sender, passwd)

    smtp.sendmail(sender, receivers, mes.as_string())

    print("邮件发送成功")

except Exception as e:   # 或 except smtplib.SMTPException as e:

    print( '失败原因:' , str(e) )

finally:

    smtp.quit()

结果:

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

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

相关文章

JAVA商城源码-多用户商城系统源码-B2B2C商城系统

项目介绍 三勾多商户小程序商城基于springbootelement-uiuniapp打造的面向开发的小程序商城&#xff0c;方便二次开发或直接使用&#xff0c;可发布到多端&#xff0c;包括微信小程序、微信公众号、QQ小程序、支付宝小程序、字节跳动小程序、百度小程序、android端、ios端。 采…

leaflet 导出图片,打印图片(A4横版或竖版)

第093个 点击查看专栏目录 本示例的目的是介绍如何在vue+leaflet中打印图片导出图片。一个简单的leaflet插件示例,添加了一个图标来打印或导出地图。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共85行)安装插…

自然语言处理(NLP)之word2vec的实现(PTB语料库)<找语义相近的词>

在2013年Google开源了一款用于词向量计算的工具&#xff1a;word2vec&#xff0c;它本身不是一种深度学习之类的模型&#xff0c;是一种用于计算词嵌入的体系结构。实际上大家平时说的这个指代的就是前面介绍过的跳字(元)模型与连续词袋模型CBow&#xff1a;自然语言处理(NLP)之…

OpenCV-Python学习(21)—— OpenCV 图像几何变换之图像翻转(cv.flip、np.flip)

1. 学习目标 学习 OpenCV 图像的翻转函数 cv.flip&#xff1b;学习 NumPy 矩阵的反转函数 np.flip&#xff1b;自己实现矩阵反转的函数。 2. OpenCV 翻转 翻转也称镜像&#xff0c;是指将图像沿轴线进行轴对称变换。水平镜像是将图像沿垂直中轴线进行左右翻转&#xff0c;垂直…

写出高质量的前端代码之降低耦合提升正交性

耦合与正交性 什么是耦合 在百度百科中&#xff0c;对耦合的解释 耦合是指两个或两个以上的体系或两种运动形式间通过相互作用而彼此影响以至联合起来的现象。 我曾经买过一个遥控飞机玩具&#xff0c;当我推前进杆的时候&#xff0c;飞机除了前进&#xff0c;还会往左或者往…

字符串匹配--strstr函数的模拟实现思路和代码

一&#xff0c;strstr函数 原型&#xff1a; const char * strstr ( const char * str1, const char * str2 );char * strstr ( char * str1, const char * str2 ); strstr是一个字符串匹配函数&#xff0c;在str1中去寻找str2&#xff0c;如果找到&#xff0c;返回str2在…

科研快讯 | 14篇论文被信号处理领域顶级国际会议ICASSP录用

ICASSP 2023 近日&#xff0c;2023年IEEE声学、语音与信号处理国际会议&#xff08;2023 IEEE International Conference on Acoustics, Speech, and Signal Processing&#xff0c;ICASSP 2023&#xff09;发布录用通知&#xff0c;清华大学人机语音交互实验室&#xff08;TH…

【LSTM】2 多因素单步骤预测

基于时间序列的预测&#xff0c;一定要明白它的原理&#xff0c;不是工作原理&#xff0c;而是工程落地原因。 基于时间序列&#xff0c;以已知回归未知----这两句话是分量很重的。 多因素单步单输出组合 时间序列&#xff1a;t1 是 特征 1,2,3 预测t2 的回归值41 多因素单步多…

当科普展会和VR全景碰撞,会擦出什么样的火花?

你知道科普的重要性吗&#xff1f;一些大城市学生从小到大经历过很多科普展会&#xff0c;帮助青少年从小就树立正确的科学价值观和人生观&#xff0c;那么当科普展会和VR全景碰撞会擦出什么样的火花呢&#xff1f; 在这个信息时代&#xff0c;什么信息都可以在网上搜到&#x…

Java岗面试题--Java并发 计算机网络(日积月累,每日三题)

目录1. 面试题一&#xff1a;在 Java 程序中怎么保证多线程的运行安全&#xff1f;1.1 追问一&#xff1a;Java 线程同步的几种方法&#xff1f;2. 面试题二&#xff1a;JMM3. 面试题三&#xff1a;计算机网络的各层协议及作用&#xff1f;1. 面试题一&#xff1a;在 Java 程序…

大数据导论与Linux基础

目录标题什么是数据数据分析方向数据分析步骤分布式与集群操作系统虚拟机ssh协议Linux常用操作什么是数据 数据&#xff1a;指对官方事件进行记录并可以鉴别的符号 数据如何产生&#xff1a;对客观事物的计量和记录产生数据 数据分析方向 数据分析在企业日常分析中三大方向&…

taobao.top.oaid.client.decrypt( 端侧OAID解密 )

&#xffe5;开放平台免费API不需用户授权 解码OAID(Open Addressee ID)&#xff0c;返回收件人信息。该接口用于客户端直接查看订单隐私数据&#xff0c;解密数据不经过ISV服务器&#xff0c;且包含风控等安全检测。 公共参数 请求地址: HTTP地址&#xff1a;http://gw.api.ta…

async和await用法理解和快速上手 , 同步任务和异步任务顺序安排和轻松理解 , js代码执行顺序表面知道

学习关键语句 : async , await 用法 await 怎么使用 同步任务和异步任务 微任务和宏任务 js中代码执行顺序 写在前面 虽然说 async 和 await 是 Promise 的语法糖 , 但是用惯了Promise 的人(我) , 还真不能超快速使用上这个语法糖 , 所以赶紧写一篇文章出来让各位了解了解这个…

【金三银四系列】Spring面试题-下(2023版)

Spring面试专题 1.介绍下Spring的初始化过程 Spring的初始化过程中会走refresh方法&#xff0c;这是个模板模式的实现&#xff0c;包含有如下的14个方法 每个方法的相关作用 把每个方法的作用按照这个图介绍下就可以了 2.配置文件的加载解析 Spring初始化的时候在obtainFresh…

内存管理框架---页(一)

文章目录物理内存的模型非一致内存访问--NUMA一致内存访问模型--UMA内存管理架构页页框管理页描述符页描述符字段flags字段详解gfp_mask 标志获得页alloc_pages__get_free_pages获得填充为0的页释放页kmallocvmalloc参考资料你用心写的每一篇文章&#xff0c;可能会带别人和自己…

【华为OD机试模拟题】用 C++ 实现 - 选座位(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 分积木(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 吃火锅(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - RSA 加密算法(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 构成的正方形数量(2023.Q1) 【华为OD机试模拟…

特征向量中心度(eigenvector centrality)算法原理与源码解析

前言 随着图谱应用的普及&#xff0c;图深度学习技术也逐渐被越来越多的数据挖掘团队所青睐。传统机器学习主要是对独立同分布个体的统计学习&#xff0c;而图深度学习则是在此基础上扩展到了非欧式空间的图数据之上&#xff0c;通过借鉴NLP和CV方向的模型思想&#xff0c;衍生…

供应商关系有哪些类型?如何优化管理?

供应商关系有两种主要类型。识别你与供应商的关系类型将有助于你有效地管理期望和调整目标。 1、垂直供应商关系 在垂直供应商关系中&#xff0c;供应链以卖方和买方之间的传统方式联系起来。各方都把重点放在确保个人和供应链目标的实现上。垂直供应商关系的例子包括分销商…

JVM面试总结

文章目录栈帧中存放的信息&#xff1a;对象的创建过程对象的内存布局&#xff1f;对象的访问定位方式&#xff1f;如何判断对象已死&#xff1f;可以作为GC Root的点&#xff1a;谈一下引用对象再被回收时如何逃脱&#xff1f;回收方法区如何判断常量是否废弃&#xff1f;垃圾回…

IMX Yocto SDK 拉取报错误fatal: Could not read from remote repository

IMX 平台Yocto SDK拉取步骤拉取步骤可以在NXP官方yocto指导文档里查看&#xff0c;这里再贴一次&#xff0c;然后针对的讲可能遇到的问题。1&#xff0c;首先下载repo。repo是谷歌开发的一款python小程序。是基于GIT工作的&#xff0c;可以批量拉取&#xff0c;合并多个代码仓库…