Java发送(QQ)邮箱、验证码发送
前言
使用Java应用程序发送 E-mail 十分简单,但是首先需要在项目中导入 JavaMail API 和Java Activation Framework (JAF) 的jar包。
菜鸟教程提供的下载链接:
- JavaMail mail.jar 1.4.5
- JAF(版本 1.1.1) activation.jar
1、准备工作
1.1 导包
在基础Java工程中
首先在项目目录下创建libs文件夹后将下载好的jar包复制进去,最后鼠标右击选择添加为库完成jar包的导入操作。

如果是Maven工程,只需要导入相应的坐标即可。
<dependency><groupId>com.sun.mail</groupId><artifactId>javax.mail</artifactId><version>1.6.2</version>
</dependency>
<dependency><groupId>javax.activation</groupId><artifactId>activation</artifactId><version>1.1.1</version>
</dependency>
下面采用基础项目的方式展开。
1.2 开启IMAP/SMTP服务
以QQ邮箱为例

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

2、发送一篇简单的E-mail
一些常用邮件服务商的SMTP信息:
- QQ邮箱:SMTP服务器是smtp.qq.com,端口是465/587;
- 163邮箱:SMTP服务器是smtp.163.com,端口是465;
- Gmail邮箱:SMTP服务器是smtp.gmail.com,端口是465/587。
2.1 连接
通过JavaMail API连接到SMTP服务器上:
// 收件人电子邮箱
String to = "XXX@qq.com";// 发件人电子邮箱
String from = "XXX@qq.com";//生成的授权码
String password = "*******";// 指定发送邮件的主机为 smtp.qq.com
String host = "smtp.qq.com"; //QQ 邮件服务器// 获取系统属性
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(from, password); //发件人邮件用户名、授权码}});// 设置debug模式便于调试:
session.setDebug(true);
2.2 发送
发送邮件时,我们需要构造一个Message对象,然后调用Transport.send(Message)即可完成发送:
// 创建默认的 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("这是邮件主题!","UTF-8");// 设置消息体
message.setText("这是邮件正文","UTF-8");// 发送消息
Transport.send(message);//发送完成后控制台打印输出
System.out.println("Sent message successfully....");
2.3 完整写法
// 文件名 SendEmail.javaimport java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;public class SendEmail
{public static void main(String [] args){// 收件人电子邮箱String to = "XXX@qq.com";// 发件人电子邮箱String from = "XXX@qq.com";//生成的授权码String password = "*******";// 指定发送邮件的主机为 smtp.qq.comString host = "smtp.qq.com"; //QQ 邮件服务器// 获取系统属性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(from, password); //发件人邮件用户名、授权码}});// 设置debug模式便于调试:session.setDebug(true);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("这是邮件主题!","UTF-8");// 设置消息体message.setText("这是邮件正文","UTF-8");// 发送消息Transport.send(message);//发送完成后控制台打印输出System.out.println("Sent message successfully....");}catch (MessagingException mex) {mex.printStackTrace();}}
}
如果你想发送一封e-mail给多个收件人,那么使用下面的方法来指定多个收件人ID:
void addRecipients(Message.RecipientType type,Address[] addresses) throws MessagingException
下面是对于参数的描述:
- **type:**要被设置为 TO, CC 或者 BCC,这里 CC 代表抄送、BCC 代表秘密抄送。举例:Message.RecipientType.TO
- addresses: 这是 email ID 的数组。在指定电子邮件 ID 时,你将需要使用 InternetAddress() 方法。
2.4 效果

3、发送一封 HTML E-mail
发送HTML邮件和文本邮件是类似的,只需要把:
message.setText(body, "UTF-8");
改为:
message.setText(body, "UTF-8", "html");
一般这个都是以发验证码的为主,所以我仿照Apifox做了个发验证码的页面vericode.html,做的不是很标准。😢

3.1 HTML页面
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>博客 邮箱验证码</title><style>.main {margin: 10px auto;width: 520px;border-top: 4px solid #9373EE;padding: 24px 24px 40px;border-radius:0 0 8px 8px;box-shadow: 0px 0px 1px;}.title {margin: 80px auto 32px;font-size: 32px;font-weight: 600;line-height: 45px;letter-spacing: 0px;}.note {margin: 0 auto;font-size: 18px;line-height: 1.4;left: 0px;top: 77px;font-weight: 400;}.code {padding: 16px;text-align: center;background: rgba(147, 115, 238, 0.04);border-radius: 4px;font-weight: 600;font-size: 24px;line-height: 140%;color: #9373EE;margin: 24px 0;letter-spacing: 1px;}.claim ul {margin-top: 34px;margin-bottom: 40px;font-size: 13px;line-height: 1.6;color: #5c5c5c;padding: 25px 0;}.claim ul li {color: rgba(24, 24, 25, 0.42);line-height: 30px;}.footer {font-size: 13px;line-height: 1.6;color: #5c5c5c;padding: 25px 0}.title,.note,.claim,.footer {text-align: center;}</style>
</head>
<body>
<div class="main"><div class="title">博客 邮箱账号验证码</div><div class="note">你正在进行邮箱验证操作,验证码为:</div><div class="code" :data="123456">1EM456</div><div class="claim"><ul style="list-style: none;"><li style="list-style: none;">此验证码 15 分钟内有效</li><li style="list-style: none;">如非本人操作</li><li style="list-style: none;">转给他人将导致账号被盗和个人信息泄漏,谨防诈骗</li></ul></div><div class="footer"><a href="https://blog.csdn.net/qq_62254095?spm=1018.2226.3001.5343" target="_blank" style="color: #9373EE; text-decoration: none;">个人博客</a> - 记录学习的每一分钟</div>
</div>
</body>
</html>
3.2 完整写法
// 文件名 SendHTMLEmail.javaimport java.util.*;
import javax.mail.*;
import javax.mail.internet.*;public class SendHTMLEmail
{public static String vericodeHtml = "<!DOCTYPE html>\n" +"<html lang=\"en\">\n" +"<head>\n" +" <meta charset=\"UTF-8\">\n" +" <title>博客 邮箱验证码</title>\n" +" <style>\n" +"\n" +" .main {\n" +" margin: 10px auto;\n" +" width: 520px;\n" +"\n" +" border-top: 4px solid #9373EE;\n" +" padding: 24px 24px 40px;\n" +" border-radius:0 0 8px 8px;\n" +" box-shadow: 0px 0px 1px;\n" +" }\n" +"\n" +" .title {\n" +" margin: 80px auto 32px;\n" +" font-size: 32px;\n" +" font-weight: 600;\n" +" line-height: 45px;\n" +" letter-spacing: 0px;\n" +"\n" +" }\n" +"\n" +" .note {\n" +" margin: 0 auto;\n" +" font-size: 18px;\n" +" line-height: 1.4;\n" +" left: 0px;\n" +" top: 77px;\n" +" font-weight: 400;\n" +" }\n" +"\n" +" .code {\n" +" padding: 16px;\n" +" text-align: center;\n" +" background: rgba(147, 115, 238, 0.04);\n" +" border-radius: 4px;\n" +" font-weight: 600;\n" +" font-size: 24px;\n" +" line-height: 140%;\n" +" color: #9373EE;\n" +" margin: 24px 0;\n" +" letter-spacing: 1px;\n" +" }\n" +"\n" +" .claim ul {\n" +" margin-top: 34px;\n" +" margin-bottom: 40px;\n" +" font-size: 13px;\n" +" line-height: 1.6;\n" +" color: #5c5c5c;\n" +" padding: 25px 0;\n" +"\n" +" }\n" +"\n" +" .claim ul li {\n" +" color: rgba(24, 24, 25, 0.42);\n" +" line-height: 30px;\n" +" }\n" +"\n" +" .footer {\n" +" font-size: 13px;\n" +" line-height: 1.6;\n" +" color: #5c5c5c;\n" +" padding: 25px 0\n" +" }\n" +" .title,.note,.claim,.footer {\n" +" text-align: center;\n" +" }\n" +" </style>\n" +"</head>\n" +"<body>\n" +"<div class=\"main\">\n" +" <div class=\"title\">博客 邮箱账号验证码</div>\n" +" <div class=\"note\">你正在进行邮箱验证操作,验证码为:</div>\n" +" <div class=\"code\" :data=\"123456\">1EM456</div>\n" +"\n" +" <div class=\"claim\">\n" +" <ul style=\"list-style: none;\">\n" +" <li style=\"list-style: none;\">此验证码 15 分钟内有效</li>\n" +" <li style=\"list-style: none;\">如非本人操作</li>\n" +" <li style=\"list-style: none;\">转给他人将导致账号被盗和个人信息泄漏,谨防诈骗</li>\n" +" </ul>\n" +" </div>\n" +"\n" +" <div class=\"footer\">\n" +" <a href=\"https://blog.csdn.net/qq_62254095?spm=1018.2226.3001.5343\" target=\"_blank\" style=\"color: #9373EE; text-decoration: none;\">个人博客</a> - 记录学习的每一分钟\n" +" </div>\n" +"</div>\n" +"</body>\n" +"</html>";public static void main(String [] args){// 收件人电子邮箱String to = "XXX@qq.com";// 发件人电子邮箱String from = "XXX@qq.com";// 生成的授权码String password = "XXXX";// 指定发送邮件的主机为 smtp.qq.comString host = "smtp.qq.com"; //QQ 邮件服务器// 获取系统属性Properties properties = System.getProperties();// 设置邮件服务器properties.setProperty("mail.smtp.host", host);properties.put("mail.smtp.auth", "true");// 获取默认的 Session 对象。// 获取默认session对象Session session = Session.getDefaultInstance(properties,new Authenticator(){public PasswordAuthentication getPasswordAuthentication(){return new PasswordAuthentication(from, password); //发件人邮件用户名、授权码}});// 设置debug模式便于调试:session.setDebug(true);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("HTML邮箱验证码2","UTF-8");// 发送 HTML 消息, 可以插入html标签String generatedCode = "B12ACD"; // 假设后台生成的验证码String emailBody = vericodeHtml.replace(":data=\"123456\"", ":data=\"" + generatedCode + "\"").replace("1EM456", generatedCode); //将发送页面的验证码改为后台生成的验证码message.setText(emailBody, "UTF-8", "html");// 发送消息Transport.send(message);System.out.println("Sent message successfully....");}catch (MessagingException mex) {mex.printStackTrace();}}
}
**建议:**可以生成一个类专门用来存放String类型的HTML模板,需要用时再导入,这样比较优雅( ̄︶ ̄)↗
3.3 效果图

4、发送带有附件的 E-mail
要在电子邮件中携带附件,我们就不能直接调用message.setText()方法,而是要构造一个Multipart对象:
Multipart multipart = new MimeMultipart();
// 添加text:
BodyPart textpart = new MimeBodyPart();
textpart.setContent(body, "text/html;charset=utf-8");
multipart.addBodyPart(textpart);
// 添加image:
BodyPart imagepart = new MimeBodyPart();
imagepart.setFileName(fileName);
imagepart.setDataHandler(new DataHandler(new ByteArrayDataSource(input, "application/octet-stream")));
multipart.addBodyPart(imagepart);
// 设置邮件内容为multipart:
message.setContent(multipart);
一个Multipart对象可以添加若干个BodyPart,其中第一个BodyPart是文本,即邮件正文,后面的BodyPart是附件。BodyPart依靠setContent()决定添加的内容。
-
如果添加文本,、
用
setContent("...","text/plain;charset=utf-8")添加纯文本,或者用
setContent("...","text/html;charset=utf-8")添加HTML文本。 -
如果添加附件,
需要设置文件名(不一定和真实文件名一致),并且添加一个
DataHandler(),传入文件的MIME类型。二进制文件可以用application/octet-stream,Word文档则是application/msword。
最后,通过setContent()把Multipart添加到Message中,即可发送。
4.1 完整写法
// 文件名 SendFileEmail.java
import java.io.File;
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;public class SendFileEmail {public static void main(String[] args) {// 收件人电子邮箱String to = "XXX@qq.com";// 发件人电子邮箱String from = "XXX@qq.com";String password = "*****";// 指定发送邮件的主机为 smtp.qq.comString host = "smtp.qq.com"; //QQ 邮件服务器// 获取系统属性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(from, password); //发件人邮件用户名、授权码}});session.setDebug(true);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("附件发送");// 创建消息部分MimeBodyPart messageBodyPart = new MimeBodyPart();messageBodyPart.setContent("<h2>Hello</h2>这是一封带有附件的<a>Javamail</a>邮箱", "text/html;charset=utf-8");// 创建附件部分MimeBodyPart attachmentPart = new MimeBodyPart();// 使用绝对路径查找文件,直接从项目名开始String filePath = "java-email/src/kun.jpg";File file = new File(filePath);FileDataSource fds = new FileDataSource(file);attachmentPart.setDataHandler(new DataHandler(fds));//attachmentPart.setDataHandler(new DataHandler(new ByteArrayDataSource(input, "application/octet-stream")));attachmentPart.setFileName(file.getName());// 创建多部分消息Multipart multipart = new MimeMultipart();multipart.addBodyPart(messageBodyPart);multipart.addBodyPart(attachmentPart);// 设置邮件内容为multipart:message.setContent(multipart);// 发送消息Transport.send(message);System.out.println("Sent message successfully....");} catch (MessagingException mex) {mex.printStackTrace();}}
}
4.2 效果图

4.3 目录结构

注意:
Maven项目也跟上面相差不大,也可以自己写个工具类简化开发,或者找其他人写好的
发送附件时使用绝对路径,是因为我在使用相对路径是有些错误,找不到文件,不清楚为什么
有知道的大神可以评论给出答案🙂,也欢迎各位找错补充👍
相关文章:
Java发送(QQ)邮箱、验证码发送
前言 使用Java应用程序发送 E-mail 十分简单,但是首先需要在项目中导入 JavaMail API 和Java Activation Framework (JAF) 的jar包。 菜鸟教程提供的下载链接: JavaMail mail.jar 1.4.5JAF(版本 1.1.1) activation.jar 1、准备…...
PostgresSQL----基于Kubernetes部署PostgresSQL
【PostgresSQL----基于Kubernetes部署PostgresSQL】 文章目录 一、创建SC、PV和PVC存储对象1.1 准备一个nfs服务器1.2 编写SC、PV、PVC等存储资源文件1.3 编写部署PostgresSQL数据库的资源声明文件 二、部署PostgresSQL2.1 部署 PV、PVC等存储对象2.2 部署PostgresSQL数据库2.3…...
7 个适合初学者的项目,可帮助您开始使用 ChatGPT
推荐:使用 NSDT场景编辑器快速搭建3D应用场景 从自动化日常任务到预测复杂模式,人工智能正在重塑行业并重新定义可能性。 当我们站在这场人工智能革命中时,我们必须了解它的潜力并将其整合到我们的日常工作流程中。 然而。。。我知道开始使…...
JDBC操作SQLite的工具类
直接调用无需拼装sql 注入依赖 <dependency><groupId>org.xerial</groupId><artifactId>sqlite-jdbc</artifactId><version>3.43.0.0</version></dependency>工具类 import org.sqlite.SQLiteConnection;/*** Author cpf* Dat…...
SEO百度优化基础知识全解析(了解百度SEO标签作用)
百度SEO优化的作用介绍: 百度SEO优化是指通过对网站的内部结构、外部链接、内容质量、用户体验等方面进行优化,提升网站在百度搜索结果中的排名,从而提高网站的曝光率和流量。通过百度SEO优化,可以让更多的潜在用户找到你的网站&…...
用python实现基本数据结构【03/4】
说明 如果需要用到这些知识却没有掌握,则会让人感到沮丧,也可能导致面试被拒。无论是花几天时间“突击”,还是利用零碎的时间持续学习,在数据结构上下点功夫都是值得的。那么Python 中有哪些数据结构呢?列表、字典、集…...
软件测试面试题汇总
测试技术面试题 软件测试面试时一份好简历的重要性 1、什么是兼容性测试?兼容性测试侧重哪些方面? 5 2、我现在有个程序,发现在Windows上运行得很慢,怎么判别是程序存在问题还是软硬件系统存在问题? 5 3、测试的策略…...
AP5101C 高压线性恒流IC 宽电压6-100V LED汽车大灯照明 台灯LED矿灯 指示灯电源驱动
产品描述 AP5101C 是一款高压线性 LED 恒流芯片 , 外围简单 、 内置功率管 , 适用于6- 100V 输入的高精度降压 LED 恒流驱动芯片。电流2.0A。AP5101C 可实现内置MOS 做 2.0A,外置 MOS 可做 3.0A 的。AP5101C 内置温度保护功能 ,温度保护点为…...
【大数问题】字符串相减(大数相减)<模拟>
类似 【力扣】415. 字符串相加(大数相加),实现大数相减。 题解 模拟相减的过程,先一直使大数减小数,记录借位,最后再判断是否加负号。(中间需要删除前导0,例如10001-1000000001&am…...
easycode生成代码模板配置
实体: ##引入宏定义 $!define##使用宏定义设置回调(保存位置与文件后缀)$!autoImport import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.NoArgsConstructor; i…...
【数据结构】堆排序和Top-k问题
【数据结构】堆 堆排序 如果只是将待排数组建立一个大堆或者小堆是无法得到一个升序或者降序的数组,因为对与一个堆,我们没法知道同一层的大小关系。 但是,如果建立了一个大堆,那么堆顶元素一定是这个数组中最大的,…...
经典的生产者和消费者模型问题
典型的生产者-消费者问题,可以使用 Java 中的 java.util.concurrent 包提供的 BlockingQueue 来实现。BlockingQueue 是一个线程安全的队列,它可以处理这种生产者-消费者的场景。以下是一个示例代码: import java.util.concurrent.ArrayBlockingQueue; import java.util.co…...
Java基础:代理
这里写目录标题 什么是代理1.静态代理(委托类、代理类):使用步骤:示例优缺点 2.动态代理(委托类、中介类)2.1 JDK动态代理使用:中介类:示例1:示例2: 2.2 CGLi…...
每日一学——防火墙2
防火墙是一种网络安全设备,用于保护计算机网络免受未经授权的访问、攻击和恶意行为的影响。以下是一些防火墙的基本概念: 防火墙规则:防火墙会根据预先设置的规则来决定允许或拒绝特定的网络流量。这些规则可以指定源 IP 地址、目标 IP 地址、…...
Web学习笔记-React(组合Components)
笔记内容转载自 AcWing 的 Web 应用课讲义,课程链接:AcWing Web 应用课。 CONTENTS 1. 创建父组件2. 从上往下传递数据3. 传递子节点4. 从下往上调用函数5. 兄弟组件间传递消息6. 无状态函数组件7. 组件的生命周期 本节内容是组件与组件之间的组合&#…...
【strstr函数的介绍和模拟实现——超详细版】
strstr函数的介绍和模拟实现 strstr函数的介绍 资源来源于cplusplus网站 strstr函数声明: char *strstr( const char *str1, const char *str2 ); 它的作用其实就是: 在字符串str1中查找是否含有字符串str2,如果存在,返回str2在…...
【Terraform】Terraform自动创建云服务器脚本
Terraform 是由 HashiCorp 创建的开源“基础架构即代码”工具 (IaC) 使用HCL(配置语言)描述云平台基础设施(这里教你使用低级基础设施:交换机、云服务器、VPC、带宽) Terraform提供者…...
TCP机制之确认应答及超时重传
TCP因为其可靠传输的特性被广泛使用,这篇博客将详细介绍一下TCP协议是如何保证它的可靠性的呢?这得主要依赖于其确认应答及超时重传机制,同时三次握手四次挥手也起到了少部分不作用,但是主要还是由确认应答和超时重传来决定的;注意:这里的可靠传输并不是说100%能把数据发送给接…...
Openharmony3.2 源码编译(ubuntu 22.04) 过程记录
OS: ubuntu 22.04 x64 1. 下载源码 1.1 安装码云repo工具 sudo apt install python3-pip git-lfsmkdir ~/bin curl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 -o ~/bin/repo chmod ax ~/bin/repo pip3 install -i https://repo.huaweicloud.com/repository/p…...
PostgreSQL 数据库使用 psql 导入 SQL
最近我们有一个 SQL 需要导入到 PostgreSQL ,但数据格式使用的是用: -- -- TOC entry 7877 (class 0 OID 21961) -- Dependencies: 904 -- Data for Name: upload_references; Type: TABLE DATA; Schema: public; Owner: - --COPY public.upload_refere…...
互联网隐私保卫战:多维度防跟踪策略解析
浏览器:隐私防护的第一道防线 在互联网世界,浏览器是我们上网的入口,然而大多数浏览器允许侵入性的 cookie 和跟踪行为,还可能与第三方合作利用用户信息投放个性化广告。而安全浏览器通常会默认阻止广告、指纹识别和跟踪器&#x…...
Jupyter Notebook虚拟环境消失?3步搞定ipykernel安装与配置(附清华镜像源)
Jupyter Notebook虚拟环境消失?3步搞定ipykernel安装与配置(附清华镜像源) 当你满怀期待地打开Jupyter Notebook准备开始一天的Python开发,却发现辛苦创建的虚拟环境竟然不在可选列表中——这种场景对许多开发者来说并不陌生。虚…...
BERT算法学习1-嵌入层结构
BERT 将输入序列表示为位置嵌入(position embedding)、句子嵌入(segment embedding)和词嵌入(token embedding)的叠加。1.嵌入层1.1Token Embeddingimport torch import torch.nn as nn from transformers …...
Qwen3-0.6B-FP8开源大模型:FP8量化后模型精度损失实测与补偿策略
Qwen3-0.6B-FP8开源大模型:FP8量化后模型精度损失实测与补偿策略 1. 引言:当大模型遇上“瘦身术” 最近,一个叫Qwen3-0.6B-FP8的模型在开发者圈子里火了起来。它只有6亿参数,显存占用不到1.5GB,却能流畅地进行对话、…...
攻防世界 crypto题GFSJ0527-【easy_RSA】
1.工具:thonny2.解题:打开附件,看到如下在一次RSA密钥对生成中,假设p473398607161,q4511491,e17 求解出d*RSA加密算法:①算法原理:RSA是一种非对称加密算法;②CTF中的常见…...
最近在研究基于扰动观测器的直流电机调速系统,发现这玩意儿挺有意思的。先不说那些复杂的理论,直接上点干货,看看怎么用代码和仿真模型来实现这个系统
基于扰动观测器的直流电机调速系统, 有计算公式,仿真模型,仿真结果,ad电路图,程序首先,我们得有个直流电机的模型。假设电机的状态方程是这样的: % 电机状态方程 A [0 1; -k/J -b/J]; B [0; 1…...
Hot100-验证二叉搜索树
错误代码:/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {…...
求职招聘小程序平台运营版源码系统-含全功能PHP后台+完整的搭建教程
求职者服务功能视频招聘专区:设有专门的视频招聘板块,求职者可在此浏览企业发布的招聘视频,直观了解企业的工作环境、企业文化等信息,同时也能上传自己的视频简历,增加求职亮点。精准职位搜索:支持求职者通…...
Windows查看快捷键占用情况
文章目录问题描述解决方案常用快捷键参考文献问题描述 IDE 使用快捷键没反应,却找不出来是哪个程序占用了快捷键(热键),通常是 QQ、网易云音乐等软件的问题。 解决方案 使用 OpenArk,根据文档描述,它可以…...
5分钟搞定!用千帆AppBuilder零代码搭建专属知识问答机器人(附ERNIE-Bot 4.0配置技巧)
零代码构建垂直领域智能助手:千帆AppBuilder实战指南 当一位旅行社老板需要在官网嵌入24小时在线的旅游顾问,或当法律咨询机构希望用AI处理80%的常见法律问题时,传统解决方案往往需要数月开发周期和六位数预算。而现在,借助千帆Ap…...
