当前位置: 首页 > news >正文

一篇文章带你了解Java发送邮件:使用JavaMail API发送电子邮件的注意事项、发送附件等

Java发送邮件:使用JavaMail API发送电子邮件

作者:Stevedash

发表于:2023年8月13日 15点48分

来源:Java 发送邮件 | 菜鸟教程 (runoob.com)

电子邮件在现代通信中扮演着至关重要的角色,而在Java编程中,我们可以利用JavaMail API来方便地实现发送电子邮件的功能。本篇博客将向您介绍如何使用JavaMail API来发送电子邮件,以及一些关键概念和实用示例。


JavaMail API基本概念:

​ JavaMail API是Java平台上用于发送和接收电子邮件的强大库。它提供了一组类和方法,可以用于创建、发送和处理电子邮件。使用JavaMail API,您可以轻松地在Java应用程序中集成电子邮件功能,从而实现诸如发送提醒、通知和报告等任务。


Java 发送邮件

​ 使用Java应用程序发送 E-mail 十分简单,但是首先你应该在你的机器上安装 JavaMail API 和Java Activation Framework (JAF) 。

你也可以使用菜鸟教程提供的下载链接:

  • JavaMail mail.jar 1.4.5
  • JAF(版本 1.1.1) activation.jar

下载这俩个Jar文件。您需要把 mail.jaractivation.jar 文件添加到您的 项目中的lib中,然后添加进项目Project Structure➡Libraies➡“+”选择上面俩个架包

在这里插入图片描述

类型服务器名称服务器地址(163为例)SSL协议端口非SSL协议端口号TSL协议端口
收件服务器POPpop.163.com995110
收件服务器IMAPimap.163.com993143
发件服务器SMTPsmtp.163.com465/99425587

腾讯企业邮箱服务器地址:smtp.exmail.qq.com

腾讯邮箱服务器地址:smtp.qq.com

常见问题以及解决办法如下:

1、如果出现454 Command not permitted when TLS active 错误,请检查你的邮件端口配置的是不是25端口,如果是,请改成465端口,并且需要设置 mail.smtp.starttls.enable=false,即可解决问题。

2、部分邮件提供商smtp登录密码不是账号密码,而是授权码,务必注意。使用SSL、TLS这个一定要注意。

3、550 用户被锁定:普通 163 邮箱是无法通过 smtp.163.com 发送邮件的,只有 163 VIP 邮箱才行,然后设置 mail.smtp.host=smtp.vip.163.com

4、550 **Invalid User:**from 必须写成带 @ 的邮件格式,且 username 要用 @ 前面的

5、553 authentication is required:需要设置 mail.smtp.auth=true

步骤概述

以下是使用JavaMail API发送电子邮件的基本步骤:

  1. 设置邮件服务器属性:指定SMTP服务器的主机名、端口、身份验证等属性。
  2. 创建会话对象:使用邮件服务器属性创建一个会话对象,同时提供身份验证信息。
  3. 创建邮件消息:创建一个邮件消息对象,设置发件人、收件人、主题、内容等信息。
  4. 发送邮件:使用会话对象的Transport类发送邮件消息。

需要用户名密码验证邮件发送实例:

本实例以 QQ 邮件服务器为例,你需要在登录QQ邮箱后台在"设置"=》账号中开启POP3/SMTP服务 ,如下图所示:

img

QQ 邮箱通过生成授权码来设置密码:

img

示例代码

①下面是一个简单的Java程序,演示了如何使用JavaMail API发送一封电子邮件:
// 导入必要的类
import javax.mail.*;
import javax.mail.internet.*;
import java.util.Properties;public class EmailSender {public static void main(String[] args) {// 设置邮件服务器属性Properties properties = new Properties();properties.put("mail.smtp.host", "smtp.qq.com"); // 设置邮件服务器主机名properties.put("mail.smtp.port", "587"); // 设置邮件服务器端口号properties.put("mail.smtp.auth", "true"); // 启用身份验证properties.put("mail.smtp.starttls.enable", "true"); // 启用 TLS//properties.put("mail.smtp.socketFactory.port", "465"); // 设置 SSL 端口//properties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); // 设置 SSL Socket Factory//properties.put("mail.smtp.socketFactory.fallback", "false"); // 禁用 SSL 回退// 创建会话对象Session session = Session.getInstance(properties, new Authenticator() {protected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication("your_email@example.com", "your_password");// 在这里填写发送邮件的邮箱地址和密码/授权码}});try {// 创建邮件消息Message message = new MimeMessage(session);message.setFrom(new InternetAddress("your_email@example.com")); // 设置发件人邮箱message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("recipient@example.com")); // 设置收件人邮箱message.setSubject("JavaMail API测试"); // 设置邮件主题message.setText("这是一封来自JavaMail API的测试邮件。"); // 设置邮件内容// 发送邮件Transport.send(message);System.out.println("邮件发送成功!"); // 打印成功信息} catch (MessagingException e) {e.printStackTrace(); // 打印异常堆栈信息}}
}

下面是对于参数的描述:

  • type:要被设置为 TO, CC 或者 BCC,这里 CC 代表抄送、BCC 代表秘密抄送。举例:
  • addresses: 这是 email ID 的数组。在指定电子邮件 ID 时,你将需要使用 InternetAddress() 方法。

Message.RecipientType 枚举类型中,以下几个常量表示不同的收件人类型:

  • TO: 主要收件人,这些人将直接收到邮件的副本。
  • CC: 抄送(Carbon Copy),这些人将收到邮件的副本,但这并不是邮件的主要接收者。
  • BCC: 密送(Blind Carbon Copy),这些人也将收到邮件的副本,但其他收件人无法看到他们的地址。
②在使用 JavaMail API 创建邮件消息时,您可以通过指定这些收件人类型来将不同的收件人添加到邮件消息中。

例如,message.setRecipients(Message.RecipientType.TO, recipientAddresses) 将主要收件人添加到邮件消息中。同样,您可以使用相应的常量来添加抄送和密送收件人。

import javax.mail.*;
import javax.mail.internet.*;
import java.util.Properties;public class RecipientTypesExample {public static void main(String[] args) {// 设置邮件服务器属性Properties properties = new Properties();properties.put("mail.smtp.host", "smtp.example.com");properties.put("mail.smtp.port", "465");properties.put("mail.smtp.auth", "true");properties.put("mail.smtp.socketFactory.port", "465");properties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");properties.put("mail.smtp.socketFactory.fallback", "false");// 创建会话对象Session session = Session.getInstance(properties, new Authenticator() {protected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication("your_email@example.com", "your_password");}});try {// 创建邮件消息Message message = new MimeMessage(session);message.setFrom(new InternetAddress("your_email@example.com"));// 添加主要收件人(TO)Address[] toRecipients = {new InternetAddress("recipient1@example.com")};message.setRecipients(Message.RecipientType.TO, toRecipients);// 添加抄送(CC)Address[] ccRecipients = {new InternetAddress("cc_recipient@example.com")};message.setRecipients(Message.RecipientType.CC, ccRecipients);// 添加密送(BCC)Address[] bccRecipients = {new InternetAddress("bcc_recipient@example.com")};message.setRecipients(Message.RecipientType.BCC, bccRecipients);message.setSubject("测试邮件收件人类型");message.setText("这是一封测试邮件,演示不同的收件人类型。");// 发送邮件Transport.send(message);System.out.println("邮件发送成功!");} catch (MessagingException e) {e.printStackTrace();}}
}
③发送一封emil给多个收件人,那么使用下面的方法来指定多个收件人ID:
void addRecipients(Message.RecipientType type,Address[] addresses) throws MessagingException

下面的是具体的代码:

import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;public class SecureEmailSender {public static void main(String[] args) {// 设置邮件服务器属性Properties properties = new Properties();properties.put("mail.smtp.host", "smtp.example.com"); // 设置邮件服务器主机名properties.put("mail.smtp.port", "465"); // 设置邮件服务器端口号properties.put("mail.smtp.auth", "true"); // 启用身份验证properties.put("mail.smtp.socketFactory.port", "465"); // 设置 SSL 端口properties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); // 设置 SSL Socket Factoryproperties.put("mail.smtp.socketFactory.fallback", "false"); // 禁用 SSL 回退// 创建会话对象Session session = Session.getInstance(properties, new Authenticator() {protected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication("your_email@example.com", "your_password");// 在这里填写发送邮件的邮箱地址和密码}});try {// 创建邮件消息Message message = new MimeMessage(session);message.setFrom(new InternetAddress("your_email@example.com")); // 设置发件人邮箱// 设置多个收件人邮箱String[] recipients = {"recipient1@example.com", "recipient2@example.com"};Address[] recipientAddresses = new Address[recipients.length];for (int i = 0; i < recipients.length; i++) {recipientAddresses[i] = new InternetAddress(recipients[i]);}message.setRecipients(Message.RecipientType.TO, recipientAddresses);message.setSubject("JavaMail API测试 - SSL加密"); // 设置邮件主题message.setText("这是一封经过SSL加密的测试邮件,发送给多个收件人。"); // 设置邮件内容// 发送邮件Transport.send(message);System.out.println("邮件发送成功!");} catch (MessagingException e) {e.printStackTrace();}}
}
④发送一封HTML E-mail如下:
package main.mail邮件Api;// 文件名 SendHTMLEmail.javaimport java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;public class SendHTMLEmail
{public static void main(String [] args){// 收件人电子邮箱String to = "Stevedash@qq.com";// 发件人电子邮箱String from = "Stevedash@qq.com";// 指定发送邮件的主机为 localhostString host = "smtp.qq.com";// 获取系统属性Properties properties = System.getProperties();// 设置邮件服务器properties.setProperty("mail.smtp.host", host);properties.put("mail.smtp.auth", "true");// 获取默认session对象Session session = Session.getDefaultInstance(properties,new Authenticator(){public PasswordAuthentication getPasswordAuthentication(){return new PasswordAuthentication("Stevedash@qq.com", "dsadasdasdasda"); //发件人邮件用户名、授权码}});try{// 创建默认的 MimeMessage 对象。MimeMessage message = new MimeMessage(session);// Set From: 头部头字段message.setFrom(new InternetAddress(from));// Set To: 头部头字段message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));// Set Subject: 头字段/标题头message.setSubject("This is the Subject Line!");// 发送 HTML 消息, 可以插入html标签,就是展示出来是页面中的同一个效果message.setContent("<h1>This is actual message</h1>","text/html" );// 发送消息Transport.send(message);System.out.println("Sent message successfully....带网页标签效果的");}catch (MessagingException mex) {mex.printStackTrace();}}
}

如下图:

在这里插入图片描述

⑤发送带附件的邮件:
package main.mail邮件Api;// 文件名 SendFileEmail.javaimport java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;public class SendFileEmail
{public static void main(String [] args){// 收件人电子邮箱String to = "1207036895@qq.com";// 发件人电子邮箱String from = "1207036895@qq.com";// 指定发送邮件的主机为 localhostString host = "smtp.qq.com";// 获取系统属性Properties properties = System.getProperties();// 设置邮件服务器properties.setProperty("mail.smtp.host", host);properties.put("mail.smtp.auth", "true");// 获取默认session对象Session session = Session.getDefaultInstance(properties,new Authenticator(){public PasswordAuthentication getPasswordAuthentication(){return new PasswordAuthentication("1207036895@qq.com", "zzzzzzzzzzzzzzzzzzz"); //发件人邮件用户名、授权码}});try{// 创建默认的 MimeMessage 对象。MimeMessage message = new MimeMessage(session);// Set From: 头部头字段message.setFrom(new InternetAddress(from));// Set To: 头部头字段message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));// Set Subject: 头字段message.setSubject("This is the Subject Line!");// 创建消息部分BodyPart messageBodyPart = new MimeBodyPart();// 消息messageBodyPart.setText("This is message body");// 创建多重消息Multipart multipart = new MimeMultipart();// 设置文本消息部分multipart.addBodyPart(messageBodyPart);// 附件部分messageBodyPart = new MimeBodyPart();String filename = "D:/桌面/新建文本文档.txt";DataSource source = new FileDataSource(filename);messageBodyPart.setDataHandler(new DataHandler(source));messageBodyPart.setFileName(filename);multipart.addBodyPart(messageBodyPart);// 发送完整消息message.setContent(multipart );//   发送消息Transport.send(message);System.out.println("Sent message successfully....");}catch (MessagingException mex) {mex.printStackTrace();}}
}

可以发现有文件名出现乱码,

下面修改后的代码,解决了编码的问题

package main.mail邮件Api;import java.io.UnsupportedEncodingException;
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;public class SendFileEmail1 {public static void main(String[] args) {String to = "1207036895@qq.com";String from = "1207036895@qq.com";String host = "smtp.qq.com";Properties properties = System.getProperties();properties.setProperty("mail.smtp.host", host);properties.put("mail.smtp.auth", "true");Session session = Session.getDefaultInstance(properties, new Authenticator() {public PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication("1207036895@qq.com", "zzzzzzzzzzzzzzzzzzz");}});try {MimeMessage message = new MimeMessage(session);message.setFrom(new InternetAddress(from));message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));message.setSubject("这是邮件主题"); // 设置邮件主题,这里使用中文MimeBodyPart textPart = new MimeBodyPart();textPart.setText("这是邮件正文内容"); // 设置邮件正文内容,这里使用中文MimeBodyPart attachmentPart = new MimeBodyPart();String filename = "D:/桌面/新建文本文档.txt";DataSource source = new FileDataSource(filename);attachmentPart.setDataHandler(new DataHandler(source));attachmentPart.setFileName(MimeUtility.encodeText(source.getName())); // 设置附件文件名,对文件名进行编码Multipart multipart = new MimeMultipart();multipart.addBodyPart(textPart);multipart.addBodyPart(attachmentPart);message.setContent(multipart);Transport.send(message);System.out.println("邮件发送成功!");} catch (MessagingException | UnsupportedEncodingException mex) {mex.printStackTrace();}}
}

输出结果如下:

在这里插入图片描述

注意事项和进阶功能

  • 要保护邮箱安全,建议将密码和敏感信息存储在安全的方式中,如配置文件或环境变量。
  • JavaMail API还支持更多高级功能,如附件、HTML内容、抄送、密送等。您可以根据需要进行扩展。
  • 为了避免被邮件服务器标记为垃圾邮件,确保邮件内容和行为遵循电子邮件的最佳实践。

总结

​ JavaMail API为Java程序员提供了发送电子邮件的便捷途径。通过设置邮件服务器属性、创建会话对象以及构建邮件消息,我们可以轻松地在Java应用程序中实现电子邮件发送功能。在实际项目中您可以根据不同场景的不同需求,采用如附件、HTML内容和抄送等应对。

作者:Stevedash

发表于:2023年8月13日 15点48分

来源:Java 发送邮件 | 菜鸟教程 (runoob.com)

注:本文内容基于个人学习理解,如有错误或疏漏,欢迎指正。感谢阅读!如果觉得有帮助,请点赞和分享。

相关文章:

一篇文章带你了解Java发送邮件:使用JavaMail API发送电子邮件的注意事项、发送附件等

Java发送邮件&#xff1a;使用JavaMail API发送电子邮件 作者&#xff1a;Stevedash 发表于&#xff1a;2023年8月13日 15点48分 来源&#xff1a;Java 发送邮件 | 菜鸟教程 (runoob.com) 电子邮件在现代通信中扮演着至关重要的角色&#xff0c;而在Java编程中&#xff0c;…...

kubernetes的日志

1、日志在哪里 kubelet组件&#xff0c;systemd方式部署&#xff0c;journalctl -u kubelet 查看 其他组件&#xff0c;pod方式部署&#xff0c;kubectl logs 查看 容器运行时将日志写入 /var/log/pods 系统日志&#xff0c;/var/log/message 2、查看服务日志 #首先检查服…...

设计HTML5文本

网页文本内容丰富、形式多样&#xff0c;通过不同的版式显示在页面中&#xff0c;为用户提供最直接、最丰富的信息。HTML5新增了很多文本标签&#xff0c;它们都有特殊的语义&#xff0c;正确使用这些标签&#xff0c;可以让网页文本更严谨、更符合语义。 1、通用文本 1.1、标…...

msvcr120.dll丢失怎样修复?总结三个dll修复方法

当我遇到msvcr120.dll丢失的问题时&#xff0c;我感到有些困惑和焦虑。因为这个问题会导致我无法运行依赖这个文件的应用程序。msvcr120.dll是运行时库文件的一部分&#xff0c;为应用程序提供了必要的运行时支持。它的丢失会导致应用程序无法正常运行&#xff0c;这让我意识到…...

选择题方法论——颉斌斌

文章目录 一、仔细阅读文章结构Ⅰ 时间对比Ⅱ 抛砖引玉Ⅲ 开门见山Ⅳ 一分为二Ⅴ 两者关系Ⅵ 研究性文章 1 如何精准定位1.1 定位明显的题1.2 定位不明显的题1.3 定位找不到出题句的题 2 对比选项两点2.1 接收信息2.2 对比信息 3 选择题答案特点4 评估选项5 选择题的固有缺陷5.…...

23.8.8 杭电暑期多校7部分题解

1008 - H.HEX-A-GONE Trails 题目大意 有两个玩家和一棵树&#xff0c;初始状态玩家一和玩家二分别在两个点 x , y x,\space y x, y&#xff0c;每次操作可以走一个与当前点有连边并且双方都没走到过的点&#xff0c;问最后是谁赢 解题思路 因为不能走走过的点&#xff0c…...

《24海南大学835软件工程考研经验贴》

1.经验之谈 首先&#xff0c;我是一个二战的考生&#xff0c;一战给我带来的经验有几点。第一&#xff0c;数学、专业课这两门越早复习越好&#xff0c;越拖到后面你就会发现来不及了&#xff0c;这学不完&#xff0c;那学不完的。第二、我认为是比较关键的一点&#xff0c;一定…...

【yolo系列:运行报错AttributeError: module ‘torch.nn‘ has no attribute ‘Mish‘】

最近运行yolov7报错AttributeError: module ‘torch.nn‘ has no attribute ‘Mish‘ 网上搜罗了一系列的报错方法但是都不怎么好解决&#xff0c;那么在这里给出具体解决方法&#xff0c;以及一些别人的参考文章。 这里先解释自己的&#xff0c;然后再给出别人的相对应的报错…...

Leetcode 剑指 Offer II 039. 直方图最大矩形面积

题目难度: 困难 原题链接 今天继续更新 Leetcode 的剑指 Offer&#xff08;专项突击版&#xff09;系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 给定非负整数数组 heights &#xff0c;数组中的数字用来表示柱状…...

SpringBoot案例-部门管理-修改

目录 前言 查看页面原型&#xff0c;明确需求 页面原型 需求 阅读接口文件 思路分析 功能接口开发 控制层&#xff08;Controller类&#xff09; 业务层&#xff08;Service类&#xff09; 业务类 业务实现类 持久层&#xff08;Mapper类&#xff09; 接口测试 前…...

element-ui表格数据为空,图片占位提示

当表格的绑定数据为空时常需要显示暂无数据等字样&#xff0c;这时候就用到了empty-text <el-table:data"tableData"stripeborderempty-text"暂无数据"> 但&#xff0c;当数据为空&#xff0c;想用图片展示呢&#xff0c;如下图 方法一&#xff1a…...

C++ STL vector 模拟实现

✅<1>主页&#xff1a;我的代码爱吃辣 &#x1f4c3;<2>知识讲解&#xff1a;C之STL &#x1f525;<3>创作者&#xff1a;我的代码爱吃辣 ☂️<4>开发环境&#xff1a;Visual Studio 2022 &#x1f4ac;<5>前言&#xff1a;上次我们已经数字会用…...

51单片机学习--红外遥控(外部中断)

需要利用下面这个红外接收头&#xff0c;OUT口会发出红外信号对应的高低电平&#xff0c;由于发送的速度很快&#xff0c;所以需要把OUT引脚接在外部中断引脚上&#xff0c;当OUT一旦产生下降沿&#xff0c;马上进中断&#xff0c;这样响应会更及时。 外部中断引脚位于P3_2和P…...

后端开发10.规格模块

概述 简介 效果图...

腾讯出了一个新聊天软件M8

众所周知&#xff0c;如今国内互联网&#xff0c;微信和QQ无疑是社交领域的霸主。 下载:https://www.123pan.com/s/BP5A-RW4xh.html 不过&#xff0c;它们也有各自局限性&#xff0c;比如难以结识新朋友、功能过于复杂等。 这让用户产生厌倦&#xff0c;再加上近几年AI、元宇…...

C++ QT(一)

目录 初识QtQt 是什么Qt 能做什么Qt/C与QML 如何选择Qt 版本Windows 下安装QtLinux 下安装Qt安装Qt配置Qt Creator 输入中文配置Ubuntu 中文环境配置中文输入法 Qt Creator 简单使用Qt Creator 界面组成Qt Creator 设置 第一个Qt 程序新建一个项目项目文件介绍项目文件*.pro样式…...

微信小程序时钟

微信小程序自定义时钟&#xff0c;模拟翻牌时钟。1、页面布局 <view class"date-time-box"><view class"date-box">{{nowDate}}</view><view class"time-box"><view><image class"pic01 {{move[0]?move…...

HttpRunner自动化工具之设置代理和请求证书验证

httprunner设置代理&#xff1a; httprunner 库本身没有提供设置代理的接口&#xff0c;但是底层使用了urllib.requests 等库&#xff0c;可以设置HTTP_PROXY 和HTTPS_PROXY 环境变量&#xff0c;常用的网络库会自动识别这些环境变量。 日常调试使用代理&#xff08;如charles…...

opsForHash() 与 opsForValue 请问有什么区别?

&#x1f449;&#xff1a;&#x1f517;官方API参考手册 如图&#xff0c;opsForHash()返回HashOperations<K,HK,HV>但是 opsForValue()返回ValueOperations<K,V>… 区别就是opsForHash的返回值泛型中有K,HK,HV,其中K是Redis指定的某个数据库里面某一个关键字(由…...

具有吸引子的非线性系统(MatlabSimulink实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

基于单片机的宠物屋智能系统设计与实现(论文+源码)

本设计基于单片机的宠物屋智能系统核心是实现对宠物生活环境及状态的智能管理。系统以单片机为中枢&#xff0c;连接红外测温传感器&#xff0c;可实时精准捕捉宠物体温变化&#xff0c;以便及时发现健康异常&#xff1b;水位检测传感器时刻监测饮用水余量&#xff0c;防止宠物…...

【深尚想】TPS54618CQRTERQ1汽车级同步降压转换器电源芯片全面解析

1. 元器件定义与技术特点 TPS54618CQRTERQ1 是德州仪器&#xff08;TI&#xff09;推出的一款 汽车级同步降压转换器&#xff08;DC-DC开关稳压器&#xff09;&#xff0c;属于高性能电源管理芯片。核心特性包括&#xff1a; 输入电压范围&#xff1a;2.95V–6V&#xff0c;输…...

深度解析云存储:概念、架构与应用实践

在数据爆炸式增长的时代&#xff0c;传统本地存储因容量限制、管理复杂等问题&#xff0c;已难以满足企业和个人的需求。云存储凭借灵活扩展、便捷访问等特性&#xff0c;成为数据存储领域的主流解决方案。从个人照片备份到企业核心数据管理&#xff0c;云存储正重塑数据存储与…...