spring boot发送邮箱,java实现邮箱发送(邮件带附件)3中方式【保姆级教程一,代码直接用】

文章目录

      • Java发送邮箱的方式
        • 1. 基于 Javax.mail 实现
          • 关于附件上传的方法
        • 2. 基于 org.apache.commons.mail 实现
          • 常见报错
        • 3. 基于 spring-boot-starter-mail 实现(推荐)

实际开发时需要实现邮件发送,本文章实现如何从零实现邮件发送。也就是 Spring Boot 项目中如何实现邮箱发送。

Java发送邮箱的方式

1、前提:需要获取发件人邮箱的授权码,也就是打开POP3/IMAP/SMTP服务设置,拿到授权码。

2、获取到邮件服务器的 smtp 地址:

服务商smtp服务地址smtp服务端口pop3服务地址pop3服务端口
新浪: sina.comsmtp.sina.com.cn25pop3.sina.com.cn110
搜狐:sohu.comsmtp.sohu.com25pop3.sohu.com110
163:163.comsmtp.163.com25smtp.163.com110
QQ:qq.comsmtp.qq.com25 或 465 或 587smtp.qq.com110
foxmail:foxmail.comsmtp.foxmail.com25pop3.foxmail.com110
QQ企业邮箱:exmail.qq.comsmtp.exmail.qq.com995pop3.exmail.qq.com587/465
1. 基于 Javax.mail 实现

先引入依赖:

<dependency><groupId>javax.mail</groupId><artifactId>mail</artifactId><version>1.4.7</version>
</dependency>

大致的流程:

1、创建配置项变量 Properties 对象,用于声明 smtp 相关配置;

2、创建一个Session,重写一个Authenticator,用于声明发件人邮箱地址和授权码;

3、利用 session 创建一个 MimeMessage 对象,再利用 MimeMessage 创建一个 MimeMessageHelper 对象,该对象用于设置收件人、发件人、抄送、秘密抄送、主题、内容、附件、发送时间等属性;

4、利用 Transport.send 方法发送邮件。

代码示例:

@Slf4j
public class EmailJavax {// 也可以从配置文件中取值// smtp服务地址private static final String senderSmtpHost = "smtp.qq.com";// 邮箱端口号private static final String senderSmtpPort = "465";// 发信人邮箱private static final String senderEmail = "xxx@qq.com";// 发信人邮箱授权码private static final String senderPassword = "xxx";/*** 邮件发送** @param subject              邮件主题* @param content              邮件内容* @param contentIsHtml        内容是否为html格式* @param fromMailPersonalName 发件人昵称* @param toMail               收件人邮箱* @param ccMail               抄送人邮箱* @param bccMail              秘密抄送人邮箱* @param fileNames            文件名(本地路径)*/public static void sendEmail(String subject, String content, boolean contentIsHtml, String fromMailPersonalName, String toMail, String ccMail, String bccMail, List<String> fileNames) throws GeneralSecurityException, UnsupportedEncodingException, MessagingException {// 1.创建配置项变量,用于声明 smtp 相关配置Properties properties = System.getProperties();// smtp服务地址properties.put("mail.smtp.host", senderSmtpHost);// smtp服务端口properties.put("mail.smtp.port", senderSmtpPort);// 开启验证properties.put("mail.smtp.auth", "true");// 开启TLS加密properties.put("mail.smtp.starttls.enable", "true");// 是否启用socketFactory,默认为trueproperties.put("mail.smtp.socketFactory.fallback", "true");MailSSLSocketFactory sf = new MailSSLSocketFactory();sf.setTrustAllHosts(true);properties.put("mail.smtp.ssl.enable", "true");properties.put("mail.smtp.ssl.socketFactory", sf);// 2.重写Authenticator,用于声明发件人邮箱地址和授权码// 建立会话,将邮箱授权码给jvmSession session = Session.getDefaultInstance(properties, new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(senderEmail, senderPassword);}});// 设置为true可以在控制台打印发送过程,生产环境关闭session.setDebug(true);// 3.创建MimeMessage对象// 创建邮件对象MimeMessage message = new MimeMessage(session);// 创建MimeMessageHelper对象,通过MimeMessageHelper设置正文和附件,否则会导致两者显示不全MimeMessageHelper helper = new MimeMessageHelper(message, true, "utf-8");//设置发件人helper.setFrom(new InternetAddress(senderEmail, fromMailPersonalName));// 设置收件人,to为收件人,cc为抄送,bcc为密送if (StringUtils.isEmpty(toMail)) {log.error("邮件收件人为空");return;}helper.setTo(InternetAddress.parse(toMail, false));if (!StringUtils.isEmpty(ccMail)) {helper.setCc(InternetAddress.parse(ccMail, false));}if (!StringUtils.isEmpty(bccMail)) {helper.setBcc(InternetAddress.parse(bccMail, false));}// 设置邮件主题helper.setSubject(subject);//设置邮件正文内容helper.setText(content, contentIsHtml);//设置发送的日期helper.setSentDate(new Date());// 设置附件(注意这里的fileName必须是服务器本地文件名,不能是远程文件链接)if (!CollectionUtils.isEmpty(fileNames)) {for (String fileName : fileNames) {FileDataSource fileDataSource = new FileDataSource(fileName);helper.addAttachment(fileDataSource.getName(), fileDataSource);}}// 4.调用Transport的send方法去发送邮件Transport.send(message);}
}
// 测试:
public class Test(){public static void main(String[] args) throws MessagingException, GeneralSecurityException, UnsupportedEncodingException {// excel表格的存放位置:String fileName = "/xx/xx/xx/供应商接口参数.xlsx";String html = "<h1>统计数据如下所示:</h1>" +"<table border=\"1\">\n" +"  <tr>\n" +"    <th>月度销售额</th>\n" +"    <th>年度销售额</th>\n" +"  </tr>\n" +"  <tr>\n" +"    <td>10000</td>\n" +"    <td>2000000</td>\n" +"  </tr>\n" +"</table>";// 调方法:EmailJavax.sendEmail("统计数据", html, true, "发送人名字", "收件人邮箱", null, null, Collections.singletonList(fileName));}
}
关于附件上传的方法

附件上传有多种方式,除了上面用到的 FileDataSource 形式添加附件外,还有 文件、输入流的方式添加:

  • addAttachment(String attachmentFilename, DataSource dataSource)
  • addAttachment(String attachmentFilename, File file)
  • addAttachment(String attachmentFilename, InputStreamSource inputStreamSource)
  • addAttachment(String attachmentFilename, InputStreamSource inputStreamSource, String contentType)
2. 基于 org.apache.commons.mail 实现

commons 包中提供了 Email 抽象类,该类下实现了

  • HtmlEmail(用于HTML正文,附件邮件发送)
  • ImageHtmlEmail(用于HTML图片正文,附件邮件发送)
  • MultiPartEmail(用于附件邮件发送)
  • SimpleEmail(用于简单邮件发送)

其继承关系如图所示:

1、引入依赖:

<dependency><groupId>org.apache.commons</groupId><artifactId>commons-email</artifactId><version>1.5</version>
</dependency>

2、实现:

@Slf4j
public class EmailCommons {// 也可以从配置文件中取值// smtp服务地址private static final String senderSmtpHost = "smtp.qq.com";// 邮箱端口号private static final String senderSmtpPort = "465";// 发信人邮箱private static final String senderEmail = "xxx@qq.com";// 发信人邮箱授权码private static final String senderPassword = "xxx";/*** 邮件发送** @param subject              邮件主题* @param content              邮件内容* @param contentIsHtml        内容是否为html格式* @param fromMailPersonalName 发件人昵称* @param toMail               收件人邮箱* @param ccMail               抄送人邮箱* @param bccMail              秘密抄送人邮箱* @param fileList             附件            */public static void sendEmail(String subject, String content, boolean contentIsHtml, String fromMailPersonalName, String toMail, String ccMail, String bccMail, File[] fileList) throws GeneralSecurityException, UnsupportedEncodingException, MessagingException {// 1.创建HtmlEmail对象HtmlEmail email = new HtmlEmail();// smtp服务地址email.setHostName(senderSmtpHost);// smtp服务端口email.setSmtpPort("mail.smtp.port", senderSmtpPort);email.setCharset("utf-8");// 邮件验证email.setAuthentication(senderEmail,senderPassword);//设置发件人email.setFrom(senderEmail, fromMailPersonalName);// 设置收件人,to为收件人,cc为抄送,bcc为密送if (StringUtils.isEmpty(toMail)) {log.error("邮件收件人为空");return;}email.addTo(toMail);if (!StringUtils.isEmpty(ccMail)) {email.addCc(ccMail);}if (!StringUtils.isEmpty(bccMail)) {email.addBcc(bccMail);}// 设置邮件主题email.setSubject(subject);//设置邮件正文内容if(contentIsHtml){email.setHtmlMsg(content);}else{email.setMsg(content);}// 设置附件if(!ObjectUtils.isEmpty(fileList)){for (File file : fileList) {EmailAttachment emailAttachment = new EmailAttachment();emailAttachment.setName(MimeUtility.encodeText(file.getName()));emailAttachment.setPath(file.getPath());email.attach(emailAttachment);}}// 4.调用send方法去发送邮件email.send();}
}

3、测试:

public class Test(){public static void main(String[] args) throws MessagingException, GeneralSecurityException, UnsupportedEncodingException {// excel表格的存放位置:String fileName = "/xx/xx/xx/供应商接口参数.xlsx";File file = new File(fileName);String html = "<h1>统计数据如下所示:</h1>" +"<table border=\"1\">\n" +"  <tr>\n" +"    <th>月度销售额</th>\n" +"    <th>年度销售额</th>\n" +"  </tr>\n" +"  <tr>\n" +"    <td>10000</td>\n" +"    <td>2000000</td>\n" +"  </tr>\n" +"</table>";EmailCommons.sendEmail("统计数据", html, true, "发送人名字", "收件人邮箱", null, null,new File[]{file} );}
}
常见报错

1、535 Login Fail. Please enter your authorization code to login

原因:邮箱验证设置的账号密码错误

解决:注意参数值正确性:email.setAuthentication(发件人邮箱地址,邮箱授权码);

2、MessagingException: Got bad greeting from SMTP host: smtp.qq.com, port: 465, response: [EOF]

解决:commons.mail 发送邮件时,QQ 邮箱使用默认端口 25 即可

3. 基于 spring-boot-starter-mail 实现(推荐)

1、引入依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId>
</dependency>

2、使用配置文件:

spring:# 配置发送邮件的配置信息mail:# 配置smtp服务主机地址host: smtp.qq.com# 发送者邮箱username: XXX@qq.com# 配置密码,注意不是真正的密码,而是申请到的授权码password: jlpXXXXXdecj# 端口号:465或587port: 465# 默认的邮件编码为UTF-8default-encoding: UTF-8# 其他参数properties:mail:# 配置SSL 加密工厂smtp:ssl:# 本地测试,先放开sslenable: truerequired: true# 开启debug模式,这样邮件发送过程的日志会在控制台打印出来,方便排查错误debug: true

3、实现:

/*** 发送邮件类*/
public class SendEmailUtil {// 注入系统相关类@Autowiredprivate JavaMailSender javaMailSender;@Autowiredprivate MailProperties mailProperties;// 发送者邮箱
//    @Value("${spring.mail.username}")
//    private String sendMailer;/*** 邮件发送1** @param subject              邮件主题* @param content              邮件内容* @param contentIsHtml        内容是否为html格式* @param fromMailPersonalName 发件人昵称* @param toMail               收件人邮箱* @param ccMail               抄送人邮箱* @param bccMail              秘密抄送人邮箱* @param fileNames            文件名(本地文件名)*/public static void sendEmail(String subject, String content, boolean contentIsHtml, String fromMailPersonalName,String toMail, String ccMail, String bccMail, List<String> fileNames) throws MessagingException, UnsupportedEncodingException {// true 代表支持复杂的类型MimeMessage mimeMessage = javaMailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);/* 邮件发信人:两种写法:1. 定义成员变量获取application.yml的username属性@Value("${spring.mail.username}")private String sendMailer;helper.setFrom(sendMailer,发件人名称)2. 注入系统类的对象,然后调方法获取,获取的值也是application.yml文件中的值@Autowiredprivate MailProperties mailProperties;helper.setFrom(mailProperties.getUsername(),发件人名称);*/helper.setFrom(mailProperties.getUsername(), fromMailPersonalName);// 邮件收信人  1或多个helper.setTo(toMail);if (!ObjectUtils.isEmpty(ccMail)) {// 邮件抄送人helper.setCc(ccMail);}if (!ObjectUtils.isEmpty(bccMail)) {// 邮件私密抄送人helper.setBcc(bccMail);}// 邮件主题helper.setSubject(subject);// 邮件内容   contentIsHtml值为 true 代表支持htmlhelper.setText(content, contentIsHtml);// 设置附件(注意这里的fileName必须是服务器本地文件名,不能是远程文件链接)if (!CollectionUtils.isEmpty(fileNames)) {for (String fileName : fileNames) {// 添加邮件附件FileDataSource fileDataSource = new FileDataSource(fileName);helper.addAttachment(fileDataSource.getName(), fileDataSource);}}// 发送邮件javaMailSender.send(mimeMessage);}/*** 邮件发送2 -- 方法优化 -- 文件对象** @param subject              邮件主题* @param content              邮件内容* @param contentIsHtml        内容是否为html格式* @param fromMailPersonalName 发件人昵称* @param toMail               收件人邮箱* @param ccMail               抄送人邮箱* @param bccMail              秘密抄送人邮箱* @param files                文件对象*/public static void sendEmail(String subject, String content, boolean contentIsHtml, String fromMailPersonalName,String toMail, String ccMail, String bccMail, File[] files) throws MessagingException, UnsupportedEncodingException {MimeMessage message = javaMailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(message, true);helper.setFrom(mailProperties.getUsername(), fromMailPersonalName);helper.setTo(toMail);if (!ObjectUtils.isEmpty(ccMail)) {helper.setCc(ccMail);}if (!ObjectUtils.isEmpty(bccMail)) {helper.setBcc(bccMail);}helper.setSubject(subject);helper.setText(content, contentIsHtml);// 设置附件,不能是远程文件if (!ObjectUtils.isEmpty(files)) {for (File file : files) {helper.addAttachment(file.getName(), file);}}javaMailSender.send(message);}/*** 邮件发送3 -- 方法优化 -- 使用流** @param subject              邮件主题* @param content              邮件内容* @param contentIsHtml        内容是否为html格式* @param fromMailPersonalName 发件人昵称* @param toMail               收件人邮箱* @param ccMail               抄送人邮箱* @param bccMail              秘密抄送人邮箱* @param fileName             文件名称* @param fileInput            文件流*/public static void sendEmail(String subject, String content, boolean contentIsHtml, String fromMailPersonalName,String toMail, String ccMail, String bccMail, String fileName, InputStreamSource fileInput) throws MessagingException, UnsupportedEncodingException {MimeMessage message = javaMailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(message, true);helper.setFrom(mailProperties.getUsername(), fromMailPersonalName);helper.setTo(toMail);if (!ObjectUtils.isEmpty(ccMail)) {helper.setCc(ccMail);}if (!ObjectUtils.isEmpty(bccMail)) {helper.setBcc(bccMail);}helper.setSubject(subject);helper.setText(content, contentIsHtml);// 设置附件,不能是远程文件if (fileInput != null) {helper.addAttachment(fileName, fileInput);}javaMailSender.send(message);}
}

关于邮件发送的方法参数: 上面几个方法,最后接收附件的参数都不一样,说明可以灵活变化

  • sendEmail(xxx, List<String> fileNames):可以接收多个附件,其中传的时候,就是附件的绝对路径
  • sendEmail(xxx, File[] files):可以接收多个附件,传的时候,就是附件的文件对象
  • sendEmail(xxx, InputStreamSource fileInput):接收一个附件,传的时候,就是附件的流

5、测试:

/*** excel表格生成工具*/
public class ExcelUtil {/*** 生成excel文件** @param fileName excel文件路径* @param dataList 数据列表* @param clazz    导出对象类* @param <T>* @return*/public static <T> File generateExcel(String fileName, List<T> dataList, Class<T> clazz) {// 生成文件File file = new File(fileName);// 单sheet写入EasyExcel.write(file, clazz).sheet("XXX").doWrite(dataList);return file;}/*** 生成excel文件 -- 方法优化 -- 用流** @param dataList 数据列表* @param clazz 导出对象类* @param <T>* @return*/public static <T> ByteArrayOutputStream generateExcel(List<T> dataList, Class<T> clazz) {ByteArrayOutputStream out = new ByteArrayOutputStream();// 单excel写入EasyExcel.write(out, clazz).sheet("XXX").doWrite(dataList);return out;}}
public class Test(){public static void main(String[] args) throws MessagingException, GeneralSecurityException, UnsupportedEncodingException {String content = "客户统计数据如附件所示";// 测试邮件发送1// excel表格的存放位置:String fileName = "/xx/xx/xx/供应商接口参数.xlsx";String html = "<h1>统计数据如下所示:</h1>" +"<table border=\"1\">\n" +"  <tr>\n" +"    <th>月度销售额</th>\n" +"    <th>年度销售额</th>\n" +"  </tr>\n" +"  <tr>\n" +"    <td>10000</td>\n" +"    <td>2000000</td>\n" +"  </tr>\n" +"</table>";SendEmailUtil.sendEmail("统计数据", html, true, "发送人名字", "收件人邮箱", null, null, Arrays.asList(fileName));// 测试邮件发送2File excel = ExcelUtil.generateExcel("文件名", 表格映射的实体类对象, 表格映射的实体类.class);SendEmailUtil.sendEmail("统计数据", content, false, "发送人名字", "收件人邮箱", null, null, new File[]{excel});// 测试邮件发送3ByteArrayOutputStream bos = ExcelUtil.generateExcel(userInfos, UserInfo.class);SendEmailUtil.sendEmail("统计数据", content, false, "发送人名字", "收件人邮箱", null, null, fileName, new ByteArrayResource(bos.toByteArray()));}
}

注意: 实现 excel 生成,然后发送邮箱 的代码,可以查看这篇文章:生成 excel 并发送邮箱

至此!文章的内容结束!!记得关注收藏,有更多精彩内容!!!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络期末复习(知识点)

概念题 在实际复习之前&#xff0c;可以看一下这个视频将网络知识串一下&#xff0c;以便更好地复习&#xff1a;【你管这破玩意叫网络&#xff1f;】 网络规模的分类 PAN&#xff08;个人区域网络&#xff09;&#xff1a;用于个人设备间的连接&#xff0c;如手机与蓝牙耳机…

Autoencoder(李宏毅)机器学习 2023 Spring HW8 (Boss Baseline)

1. Autoencoder 简介 Autoencoder是一种用于学习数据高效压缩表示的人工神经网络。它由两个主要部分组成: Encoder 编码器将输入数据映射到一个更小的、低维空间中的压缩表示,这个空间通常称为latent space或bottleneck。 这一过程可以看作是数据压缩,去除冗余信息,仅保留…

LLaMA-Factory web微调大模型并导出大模型

LLaMA-Factory 开源大模型如LLaMA&#xff0c;Qwen&#xff0c;Baichuan等主要都是使用通用数据进行训练而来&#xff0c;其对于不同下游的使用场景和垂直领域的效果有待进一步提升&#xff0c;衍生出了微调训练相关的需求&#xff0c;包含预训练&#xff08;pt&#xff09;&am…

一个基于Spring Boot的智慧养老平台

以下是一个基于Spring Boot的智慧养老平台的案例代码。这个平台包括老人信息管理、健康监测、紧急呼叫、服务预约等功能。代码结构清晰&#xff0c;适合初学者学习和参考。 1. 项目结构 src/main/java/com/example/smartelderlycare├── controller│ ├── ElderlyCon…

cmake - build MS STL project

文章目录 cmake - build MS STL project概述笔记END cmake - build MS STL project 概述 MS在github上开源了VS IDE 用的STL实现。 想看看微软的测试用例中怎么用STL. 想先用CMake编译一个MS STL发布版出来。 笔记 CMake需要3.30以上, 拟采用 cmake-3.30.6-windows-x86_64.…

【算法与数据结构】—— 回文问题

回文问题 目录 1、简介2、经典的回文问题(1) 判断一个字符串是否为回文(2) 给定字符集求构建的最长回文长度(3) 求最长回文子串方法一&#xff1a;中心拓展方法二&#xff1a;Manacher 算法 (4) 求回文子串的数目方法一&#xff1a;中心拓展方法二&#xff1a;Manacher 算法 1、…

Linux第一个系统程序---进度条

进度条---命令行版本 回车换行 其实本质上回车和换行是不同概念&#xff0c;我们用一张图来简单的理解一下&#xff1a; 在计算机语言当中&#xff1a; 换行符&#xff1a;\n 回车符&#xff1a;\r \r\n&#xff1a;回车换行 这时候有人可能会有疑问&#xff1a;我在学习C…

西电-神经网络基础与应用-复习笔记

此为24年秋研究生课程复习笔记 导论 神经网络的研究方法分为 连接主义&#xff0c;生理学派&#xff0c;模拟神经计算。高度的并行、分布性&#xff0c;很强的鲁棒和容错性。便于实现人脑的感知功能(音频图像的识别和处理)。符号主义&#xff0c;心理学派&#xff0c;基于符号…

利用obs studio制作(人像+屏幕)录制影像

1.什么是obs? OBS&#xff08;Open Broadcaster Software&#xff09;是一款功能强大的开源软件&#xff0c;它使用户能够直接从电脑录制视频和直播内容到 Twitch&#xff0c;YouTube 和 Facebook Live 等平台。它在需要直播或录制屏幕活动的游戏玩家、YouTube 用户和专业人士…

maven多模块项目编译一直报Failure to find com.xxx.xxx:xxx-xxx-xxx:pom:1.0-SNAPSHOT in问题

工作中项目上因为多版本迭代&#xff0c;需要对不同迭代版本升级版本号&#xff0c;且因为项目工程本身是多模块结构&#xff0c;且依然多个其他模块工程。 在将工程中子模块的pom.xml中版本号使用变量引用父模块中定义的版本号时&#xff0c;一直报Failure to find com.xxx.x…

音视频入门基础:RTP专题(2)——使用FFmpeg命令生成RTP流

通过FFmpeg命令可以将一个媒体文件转推RTP&#xff1a; ffmpeg -re -stream_loop -1 -i input.mp4 -c:v copy -an -f rtp rtp://192.168.0.102:5400 但是通过ffplay尝试播放上述产生的RTP流时会报错&#xff1a;“Unable to receive RTP payload type 96 without an SDP file …

Nacos 3.0 Alpha 发布,在安全、泛用、云原生更进一步

自 2021 年发布以来&#xff0c;Nacos 2.0 在社区的支持下已走过近三年&#xff0c;期间取得了诸多成就。在高性能与易扩展性方面&#xff0c;Nacos 2.0 取得了显著进展&#xff0c;同时在易用性和安全性上也不断提升。想了解更多详细信息&#xff0c;欢迎阅读我们之前发布的回…

C语言gdb调试

目录 1.gdb介绍 2.设置断点 2.1.测试代码 2.2.设置函数断点 2.3.设置文件行号断点 2.4.设置条件断点 2.5.多线程调试 3.删除断点 3.1.删除指定断点 3.2.删除全部断点 4.查看变量信息 4.1.p命令 4.2.display命令 4.3.watch命令 5.coredump日志 6.总结 1.gdb介绍…

【xLua】xLua-master签名、加密Lua文件

GitHub - Tencent/xLua: xLua is a lua programming solution for C# ( Unity, .Net, Mono) , it supports android, ios, windows, linux, osx, etc. 如果你想在项目工程上操作&#xff0c;又发现项目工程并没导入Tools&#xff0c;可以从xLua-master工程拷贝到项目工程Assets…

9.4 visualStudio 2022 配置 cuda 和 torch (c++)

一、配置torch 1.Libtorch下载 该内容看了【Libtorch 一】libtorchwin10环境配置_vsixtorch-CSDN博客的博客&#xff0c;作为笔记用。我自己搭建后可以正常运行。 下载地址为windows系统下各种LibTorch下载地址_libtorch 百度云-CSDN博客 下载解压后的目录为&#xff1a; 2.vs…

Python基于YOLOv8和OpenCV实现车道线和车辆检测

使用YOLOv8&#xff08;You Only Look Once&#xff09;和OpenCV实现车道线和车辆检测&#xff0c;目标是创建一个可以检测道路上的车道并识别车辆的系统&#xff0c;并估计它们与摄像头的距离。该项目结合了计算机视觉技术和深度学习物体检测。 1、系统主要功能 车道检测&am…

相加交互效应函数发布—适用于逻辑回归、cox回归、glmm模型、gee模型

在统计分析中交互作用是指某因素的作用随其他因素水平变化而变化&#xff0c;两因素共同作用不等于两因素单独作用之和(相加交互作用)或之积(相乘交互作用)。相互作用的评估是尺度相关的&#xff1a;乘法或加法。乘法尺度上的相互作用意味着两次暴露的综合效应大于&#xff08;…

ECharts饼图下钻

背景 项目上需要对Echarts饼图进行功能定制&#xff0c;实现点击颜色块&#xff0c;下钻显示下一层级占比 说明 饼图实现点击下钻/面包屑返回的功能 实现 数据结构 [{name: a,value: 1,children: [...]},... ]点击下钻 // 为图表绑定点击事件&#xff08;需要在destroy…

MySQL-事务

事务特性 在关系型数据库管理系统中&#xff0c;事务必须满足 4 个特性&#xff0c;即所谓的 ACID。 原子性&#xff08;Atomicity&#xff09; 事务是一个原子操作单元&#xff0c;其对数据的修改&#xff0c;要么全都执行&#xff0c;要么全都不执行。 修改操作>修改B…

C# 元组

总目录 C# 语法总目录 C# 元组 C# 介绍元组1. 元组元素命名2. 元组的解构3. 元组的比较 总结参考链接 C# 介绍 C#主要应用于桌面应用程序开发、Web应用程序开发、移动应用程序开发、游戏开发、云和服务开发、数据库开发、科学计算、物联网&#xff08;IoT&#xff09;应用程序、…