JavaWeb-JavaMail邮件开发
Email的历史比Web还要久远,直到现在,Email也是互联网上应用非常广泛的服务。
几乎所有的编程语言都支持发送和接收电子邮件,但是,先等等,在我们开始编写代码之前,有必要搞清楚电子邮件是如何在互联网上运作的。
我们来看看传统邮件是如何运作的。假设你现在在北京,要给一个香港的朋友发一封信,怎么做呢?
首先你得写好信,装进信封,写上地址,贴上邮票,然后就近找个邮局,把信仍进去。
信件会从就近的小邮局转运到大邮局,再从大邮局往别的城市发,比如先发到天津,再走海运到达香港,也可能走京九线到香港,但是你不用关心具体路线,你只需要知道一件事,就是信件走得很慢,至少要几天时间。
信件到达香港的某个邮局,也不会直接送到朋友的家里,因为邮局的叔叔是很聪明的,他怕你的朋友不在家,一趟一趟地白跑,所以,信件会投递到你的朋友的邮箱里,邮箱可能在公寓的一层,或者家门口,直到你的朋友回家的时候检查邮箱,发现信件后,就可以取到邮件了。
电子邮件的流程基本上也是按上面的方式运作的,只不过速度不是按天算,而是按秒算。
现在我们回到电子邮件,假设我们自己的电子邮件地址是me@163.com,对方的电子邮件地址是friend@sina.com(注意地址都是虚构的哈),现在我们用Outlook或者Foxmail之类的软件写好邮件,填上对方的Email地址,点“发送”,电子邮件就发出去了。这些电子邮件软件被称为MUA:Mail User Agent——邮件用户代理。
Email从MUA发出去,不是直接到达对方电脑,而是发到MTA:Mail Transfer Agent——邮件传输代理,就是那些Email服务提供商,比如网易、新浪等等。由于我们自己的电子邮件是163.com,所以,Email首先被投递到网易提供的MTA,再由网易的MTA发到对方服务商,也就是新浪的MTA。这个过程中间可能还会经过别的MTA,但是我们不关心具体路线,我们只关心速度。
Email到达新浪的MTA后,由于对方使用的是@sina.com的邮箱,因此,新浪的MTA会把Email投递到邮件的最终目的地MDA:Mail Delivery Agent——邮件投递代理。Email到达MDA后,就静静地躺在新浪的某个服务器上,存放在某个文件或特殊的数据库里,我们将这个长期保存邮件的地方称之为电子邮箱。
同普通邮件类似,Email不会直接到达对方的电脑,因为对方电脑不一定开机,开机也不一定联网。对方要取到邮件,必须通过MUA从MDA上把邮件取到自己的电脑上。
所以,一封电子邮件的旅程就是:
发件人 -> MUA -> MTA -> MTA -> 若干个MTA -> MDA <- MUA <- 收件人
有了上述基本概念,要编写程序来发送和接收邮件,本质上就是:
- 编写MUA把邮件发到MTA;
- 编写MUA从MDA上收邮件。
发邮件时,MUA和MTA使用的协议就是SMTP:Simple Mail Transfer Protocol,后面的MTA到另一个MTA也是用SMTP协议。
收邮件时,MUA和MDA使用的协议有两种:POP:Post Office Protocol,目前版本是3,俗称POP3;IMAP:Internet Message Access Protocol,目前版本是4,优点是不但能取邮件,还可以直接操作MDA上存储的邮件,比如从收件箱移到垃圾箱,等等。
邮件客户端软件在发邮件时,会让你先配置SMTP服务器,也就是你要发到哪个MTA上。假设你正在使用163的邮箱,你就不能直接发到新浪的MTA上,因为它只服务新浪的用户,所以,你得填163提供的SMTP服务器地址:smtp.163.com,为了证明你是163的用户,SMTP服务器还要求你填写邮箱地址和邮箱口令,这样,MUA才能正常地把Email通过SMTP协议发送到MTA。
类似的,从MDA收邮件时,MDA服务器也要求验证你的邮箱口令,确保不会有人冒充你收取你的邮件,所以,Outlook之类的邮件客户端会要求你填写POP3或IMAP服务器地址、邮箱地址和口令,这样,MUA才能顺利地通过POP或IMAP协议从MDA取到邮件。
在收发邮件前,请先准备好至少两个电子邮件,如xxx@163.com,xxx@sina.com,xxx@qq.com等,注意两个邮箱不要用同一家邮件服务商。
1. 邮件协议
1.1 收发邮件
发邮件大家都会吧!发邮件是从客户端把邮件发送到邮件服务器,收邮件是把邮件服务器的邮件下载到客户端。
我们在163、126、QQ、sohu、sina等网站注册的Email账户,其实就是在邮件服务器中注册的。这些网站都有自己的邮件服务器。
1.2 邮件协议概述
与HTTP协议相同,收发邮件也是需要有传输协议的。
- SMTP:(Simple Mail Transfer Protocol,简单邮件传输协议)发邮件协议;
- POP3:(Post Office Protocol Version 3,邮局协议第3版)收邮件协议;
- IMAP:(Internet Message Access Protocol,因特网消息访问协议)收发邮件协议,我们的课程不涉及该协议。
1.3 理解邮件收发过程
其实你可以把邮件服务器理解为邮局!如果你需要给朋友寄一封信,那么你需要把信放到邮筒中,这样你的信会“自动”到达邮局,邮局会把信邮到另一个省市的邮局中。然后这封信会被送到收信人的邮箱中。最终收信人需要自己经常查看邮箱是否有新的信件。
其实每个邮件服务器都由SMTP服务器和POP3服务器构成,其中SMTP服务器负责发邮件的请求,而POP3负责收邮件的请求。
当然,有时我们也会使用163的账号,向126的账号发送邮件。这时邮件是发送到126的邮件服务器,而对于163的邮件服务器是不会存储这封邮件的。
1.4 邮件服务器名称
smtp服务器的端口号为25,服务器名称为smtp.xxx.xxx。
pop3服务器的端口号为110,服务器名称为pop3.xxx.xxx。
例如:
- 163:smtp.163.com和pop3.163.com;
- 126:smtp.126.com和pop3.126.com;
- qq:smtp.qq.com和pop3.qq.com;
- sohu:smtp.sohu.com和pop3.sohu.com;
- sina:smtp.sina.com和pop3.sina.com。
2. Telnet收发邮件
Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个telnet会话,必须输入用户名和密码来登录服务器。Telnet是常用的远程控制Web服务器的方法
2.1 BASE64加密
BASE64是一种加密算法,这种加密方式是可逆的!它的作用是使加密后的文本无法用肉眼识别。Java提供了sun.misc.BASE64Encoder这个类,用来对做Base64的加密和解密,但我们知道,使用sun包下的东西会有警告!甚至在eclipse中根本使用不了这个类(需要设置),所以我们还是听sun公司的话,不要去使用它内部使用的类,我们去使用apache commons组件中的codec包下的Base64这个类来完成BASE64加密和解密。
package cn.itcast;
import org.apache.commons.codec.binary.Base64;public class Base64Utils {public static String encode(String s) {return encode(s, "utf-8");}public static String decode(String s) {return decode(s, "utf-8");}public static String encode(String s, String charset) {try {byte[] bytes = s.getBytes(charset);bytes = Base64.encodeBase64(bytes);return new String(bytes, charset);} catch (Exception e) {throw new RuntimeException(e);}}public static String decode(String s, String charset) {try {byte[] bytes = s.getBytes(charset);bytes = Base64.decodeBase64(bytes);return new String(bytes, charset);} catch (Exception e) {throw new RuntimeException(e);}}
}
2.2 telnet发邮件
Xshell是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色帮助用户在复杂的网络环境中享受他们的工作
Xshell可以在Windows界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的。
连接163的smtp服务器
连接成功后需要如下步骤才能发送邮件:
(1)、与服务器打招呼:ehlo你的名字
(2)、发出登录请求:auth login
(3)、输入加密后的邮箱名:(itcast_cxf@163.com)aXRjYXN0X2N4ZkAxNjMuY29t
(4)、输入加密后的邮箱密码:(itcast)aXRjYXN0
(5)、输入谁来发送邮件,即from:mail from:itcast_cxf@163.com
(6)、输入把邮件发给谁,即to:rcpt to:itcast_cxf@126.com
(7)、发送填写数据请求:data
(8)、开始输入数据,数据包含:from、to、subject,以及邮件内容,如果输入结束后,以一个“.”为一行,表示输入结束:
from:<zhangBoZhi@163.com>
to:<itcast_cxf@sina.com>
subject: 我爱上你了我已经深深的爱上你了,我是张柏芝。
.
注意,在标题和邮件正文之间要有一个空行!当要退出时,一定要以一个“.”为单行,表示输入结束。
(9)、最后一步:quit
3. telnet收邮件
3.1 telnet收邮件的步骤
pop3无需使用Base64加密
收邮件连接的服务器是pop3.xxx.com,pop3协议的默认端口号是110。请注意!这与发邮件完全不同。如果你在163有邮箱账户,那么你想使用telnet收邮件,需要连接的服务器是pop3.163.com
连接pop3服务器:telnet pop3.163.com 110
命令 | 功能描述 |
---|---|
user命令 | user 用户名,例如:user itcast_cxf@163.com |
pass命令 | pass 密码,例如:pass itcast |
stat命令 | stat命令用来查看邮箱中邮件的个数,所有邮件所占的空间 |
list命令 | list命令用来查看所有邮件,或指定邮件的状态,例如:list 1是查看第一封邮件的大小, list是查看邮件列表,即列出所有邮件的编号,及大小 |
retr命令 | 查看指定邮件的内容,例如:retr 1#是查看第一封邮件的内容 |
dele命令 | 标记某邮件为删除,但不是马上删除,而是在退出时才会真正删除 |
quit命令 | 退出!如果在退出之前已经使用dele命令标记了某些邮件,那么会在退出是删除它们 |
4. JavaMail
4.1 JavaMail概述
Java Mail是由SUN公司提供的专门针对邮件的API,主要Jar包:mail.jar、activation.jar。
在使用MyEclipse创建web项目时,需要小心!如果只是在web项目中使用java mail是没有什么问题的,发布到Tomcat上运行一点问题都没有!
但是如果是在web项目中写测试那就出问题了。
在MyEclipse中,会自动给web项目导入javax.mail包中的类,但是不全(其实是只有接口,而没有接口的实现类),所以只靠MyEclipse中的类是不能运行java mail项目的,但是如果这时你再去自行导入mail.jar时,就会出现冲突。
处理方案:到下面路径中找到javaee.jar文件,把javax.mail删除!!!
D:\Program Files\MyEclipse\Common\plugins\com.genuitec.eclipse.j2eedt.core_10.0.0.me201110301321\data\libraryset\EE_5
4.2 JavaMail中主要类
java mail中主要类:javax.mail.Session、javax.mail.internet.MimeMessage、javax.mail.Transport。
Session:表示会话,即客户端与邮件服务器之间的会话!想获得会话需要给出账户和密码,当然还要给出服务器名称。在邮件服务中的Session对象,就相当于连接数据库时的Connection对象。
MimeMessage:表示邮件类,它是Message的子类。它包含邮件的主题(标题)、内容,收件人地址、发件人地址,还可以设置抄送和暗送,甚至还可以设置附件。
Transport:用来发送邮件。它是发送器!
4.3 JavaMail之Hello World
在使用telnet发邮件时,还需要自己来处理Base64编码的问题,但使用JavaMail就不必理会这些问题了,都由JavaMail来处理。
第一步:获得Session
Session session = Session.getInstance(Properties prop, Authenticator auth);
其中prop需要指定两个键值,一个是指定服务器主机名,另一个是指定是否需要认证!我们当然需要认证!
Properties prop = new Properties();
prop.setProperty(“mail.host”, “smtp.163.com”);//设置服务器主机名
prop.setProperty(“mail.smtp.auth”, “true”);//设置需要认证
其中Authenticator是一个接口表示认证器,即校验客户端的身份。我们需要自己来实现这个接口,实现这个接口需要使用账户和密码。
Authenticator auth = new Authenticator() {public PasswordAuthentication getPasswordAuthentication () {new PasswordAuthentication(“itcast_cxf”, “itcast”);//用户名和密码}
};
通过上面的准备,现在可以获取得Session对象了:
Session session = Session.getInstance(prop, auth);
第二步:创建MimeMessage对象
创建MimeMessage需要使用Session对象来创建:
MimeMessage msg = new MimeMessage(session);
然后需要设置发信人地址、收信人地址、主题,以及邮件正文。
msg.setFrom(new InternetAddress(“itcast_cxf@163.com”));//设置发信人
msg.addRecipients(RecipientType.TO, “itcast_cxf@qq.com,itcast_cxf@sina.com”);//设置多个收信人
msg.addRecipients(RecipientType.CC, “itcast_cxf@sohu.com,itcast_cxf@126.com”);//设置多个抄送
msg.addRecipients(RecipientType.BCC, ”itcast_cxf@hotmail.com”);//设置暗送
msg.setSubject(“这是一封测试邮件”);//设置主题(标题)
msg.setContent(“当然是hello world!”, “text/plain;charset=utf-8”);//设置正文
第三步:发送邮件
Transport.send(msg);//发送邮件
4.4 JavaMail发送带有附件的邮件
一封邮件可以包含正文、附件N个,所以正文与N个附件都是邮件的一个部份。
上面的hello world案例中,只是发送了带有正文的邮件!所以在调用setContent()方法时直接设置了正文,如果想发送带有附件邮件,那么需要设置邮件的内容为MimeMultiPart。
MimeMulitpart parts = new MimeMulitpart();//多部件对象,可以理解为是部件的集合
msg.setContent(parts);//设置邮件的内容为多部件内容。
然后我们需要把正文、N个附件创建为“主体部件”对象(MimeBodyPart),添加到MimeMuiltPart中即可。
MimeBodyPart part1 = new MimeBodyPart();//创建一个部件
part1.setCotnent(“这是正文部分”, “text/html;charset=utf-8”);//给部件设置内容
parts.addBodyPart(part1);//把部件添加到部件集中。
下面我们创建一个附件:
MimeBodyPart part2 = new MimeBodyPart();//创建一个部件
part2.attachFile(“F:\\a.jpg”);//设置附件
part2.setFileName(“hello.jpg”);//设置附件名称
parts.addBodyPart(part2);//把附件添加到部件集中
注意,如果在设置文件名称时,文件名称中包含了中文的话,那么需要使用MimeUitlity类来给中文编码:
part2.setFileName(MimeUitlity.encodeText(“美女.jpg”));
public class JavaMailDemo {public void sendMail() throws Exception {/** 1. 得到session*/Properties props = new Properties();props.setProperty("mail.host", "smtp.163.com");props.setProperty("mail.smtp.auth", "true");Authenticator auth = new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication("itcast_cxf", "itcast");}};Session session = Session.getInstance(props, auth);/** 2. 创建MimeMessage*/MimeMessage msg = new MimeMessage(session);msg.setFrom(new InternetAddress("itcast_cxf@163.com"));//设置发件人msg.setRecipients(RecipientType.TO, "itcast_cxf@126.com");//设置收件人msg.setRecipients(RecipientType.CC, "itcast_cxf@sohu.com");//设置抄送msg.setRecipients(RecipientType.BCC, "itcast_cxf@sina.com");//设置暗送msg.setSubject("这是来自ITCAST的测试邮件");msg.setContent("这就是一封垃圾邮件!", "text/html;charset=utf-8");/** 3. 发邮件*/Transport.send(msg);}/*** 带有附件的邮件!!!*/public void sendMail2() throws Exception {/** 1. 得到session*/Properties props = new Properties();props.setProperty("mail.host", "smtp.163.com");props.setProperty("mail.smtp.auth", "true");Authenticator auth = new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication("itcast_cxf", "itcast");}};Session session = Session.getInstance(props, auth);/** 2. 创建MimeMessage*/MimeMessage msg = new MimeMessage(session);msg.setFrom(new InternetAddress("itcast_cxf@163.com"));//设置发件人msg.setRecipients(RecipientType.TO, "itcast_cxf@126.com");//设置收件人msg.setSubject("这是来自ITCAST的测试邮件有附件");/////////////////////////////////////////////////////////** 当发送包含附件的邮件时,邮件体就为多部件形式!* 1. 创建一个多部件的部件内容!MimeMultipart* MimeMultipart就是一个集合,用来装载多个主体部件!* 2. 我们需要创建两个主体部件,一个是文本内容的,另一个是附件的。* 主体部件叫MimeBodyPart* 3. 把MimeMultipart设置给MimeMessage的内容!*/MimeMultipart list = new MimeMultipart();//创建多部分内容// 创建MimeBodyPartMimeBodyPart part1 = new MimeBodyPart();// 设置主体部件的内容part1.setContent("这是一封包含附件的垃圾邮件", "text/html;charset=utf-8");// 把主体部件添加到集合中list.addBodyPart(part1);// 创建MimeBodyPartMimeBodyPart part2 = new MimeBodyPart();part2.attachFile(new File("F:/f/白冰.jpg"));//设置附件的内容//设置显示的文件名称,其中encodeText用来处理中文乱码问题part2.setFileName(MimeUtility.encodeText("大美女.jpg"));list.addBodyPart(part2);msg.setContent(list);//把它设置给邮件作为邮件的内容。/////////////////////////////////////////////////////////** 3. 发邮件*/Transport.send(msg); }public void sendMail3() throws Exception {/** 1. 得到session*/Session session = MailUtils.createSession("smtp.163.com", "itcast_cxf", "itcast");/** 2. 创建邮件对象*/Mail mail = new Mail("itcast_cxf@163.com","itcast_cxf@126.com,itcast_cxf@sina.com","不是垃圾邮件能是什么呢?", "这里是正文");/** 创建两个附件对象*/AttachBean ab1 = new AttachBean(new File("F:/f/白冰.jpg"), "小美女.jpg");AttachBean ab2 = new AttachBean(new File("F:/f/big.jpg"), "我的羽绒服.jpg");// 添加到mail中mail.addAttach(ab1);mail.addAttach(ab2);/** 3. 发送*/MailUtils.send(session, mail);}
}
5. MailUtils
public class MailUtils {public static Session createSession(String host, final String username, final String password) {Properties prop = new Properties();prop.setProperty("mail.host", host);// 指定主机prop.setProperty("mail.smtp.auth", "true");// 指定验证为true// 创建验证器Authenticator auth = new Authenticator() {public PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(username, password);}};// 获取session对象return Session.getInstance(prop, auth);}/*** 发送指定的邮件* * @param mail*/public static void send(Session session, final Mail mail) throws MessagingException,IOException {MimeMessage msg = new MimeMessage(session);// 创建邮件对象msg.setFrom(new InternetAddress(mail.getFrom()));// 设置发件人msg.addRecipients(RecipientType.TO, mail.getToAddress());// 设置收件人// 设置抄送String cc = mail.getCcAddress();if (!cc.isEmpty()) {msg.addRecipients(RecipientType.CC, cc);}// 设置暗送String bcc = mail.getBccAddress();if (!bcc.isEmpty()) {msg.addRecipients(RecipientType.BCC, bcc);}msg.setSubject(mail.getSubject());// 设置主题MimeMultipart parts = new MimeMultipart();// 创建部件集对象MimeBodyPart part = new MimeBodyPart();// 创建一个部件part.setContent(mail.getContent(), "text/html;charset=utf-8");// 设置邮件文本内容parts.addBodyPart(part);// 把部件添加到部件集中///////////////////////////////////////////// 添加附件List<AttachBean> attachBeanList = mail.getAttachs();// 获取所有附件if (attachBeanList != null) {for (AttachBean attach : attachBeanList) {MimeBodyPart attachPart = new MimeBodyPart();// 创建一个部件attachPart.attachFile(attach.getFile());// 设置附件文件attachPart.setFileName(MimeUtility.encodeText(attach.getFileName()));// 设置附件文件名parts.addBodyPart(attachPart);}}msg.setContent(parts);// 给邮件设置内容Transport.send(msg);// 发邮件}
}
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- StringUtil工具类 之 字符串长度截取函数
/***<b>Summary:截取字符串为指定长度,如果字符串长度没有那么长,返回原字符串 </b>* subStringToLength()* @param str 原字符串* @param length 要截取的长度* @param fill 当长度超过以后的补位* @return*/public static String subStringToLength(String str…...
2024/4/17 18:02:16 - TCP三次握手原理,以及为什么不能改成两次握手
网上 关于 TCP三次握手 的文章有很多,但很多一些部分讲的含糊其辞,所以才重新造了这个轮子,一方面对那些含糊其辞的部分做了解释,另一方面也方便了以后的学习。1、上图的名词解释SYN:同步序号。它表示建立连接。TCP规定SYN=1时不能携带数据,但要消耗一个序号, 因此随机选…...
2024/4/23 17:03:29 - python代码,轻松完成贪吃蛇小游戏
大家小时候都玩过贪吃蛇吧?小编小时候可喜欢拿爸妈的手机玩了,厉害着呢!今天,小编就来用100行代码实现一个简易版的贪吃蛇。在网上,贪吃蛇教程蛮多的,但要安装蛮多库的,而且也不够清晰,今天的代码比较短,而且理解起来或者说你更改起来要简单一些。最终会实现效果如下:…...
2024/4/17 18:01:12 - 8848从顶峰走向衰微的历史见证
8848从顶峰走向衰微的历史见证 IT时代周刊 2005年6月23日 特约记者/程天宇 记者/贺 兰人不可能两次迈进同一条河流,而8848却似乎可以。近段时间,因为速达的“收购传闻”,8848再一次成为业界关注的焦点。因为如今的8848内部风雨飘摇,外部官司缠身,它有何被收购的价值?公司…...
2024/4/17 18:03:17 - 计算机网络——TCP三次握手详解为什么两次不行
文章目录1. TCP报文段结构2. 三次握手3. SYN洪泛攻击4. 为什么是“三次” TCP是面向连接的(connection-oriented),即收发双方在发送数据之前,必须首先建立一个连接,这样在连接断开之前,就一直使用这个连接传输数据。建立连接包括参数的设置、内存空间的分配,收发双方参数的…...
2024/4/22 21:19:04 - EL表达式函数-获取字符串长度、截取字符串
1.fn:contains 判断字符串是否包含另外一个字符串 <c:iftest="${fn:contains(name,searchString)}"> 2.fn:containsIgnoreCase 判断字符串是否包含另外一个字符串(大小写无关)<c:iftest="${fn:containsIgnoreCase(name,searchString)}"> …...
2024/5/7 2:17:08 - 内部邮件管理的数据库设计和dwz的批量处理
dwz框架学习笔记之(七) 好久没写博客了,最近安排做内部邮件管理模块,做之前要先设计好数据库,也网上找了163邮箱数据库设计,虽然要做的没有163邮箱的复杂,但是它的数据设计还是有借鉴作用。总共需要三张表:写信表,收件表和附件表。三者的关系是写信表与收件表1对n的关…...
2024/4/17 18:02:29 - C++贪吃蛇源代码
以前用C++面向对象的思想在控制台写了个贪吃蛇小游戏,游戏共设有两关,有兴趣的朋友可以下载下来玩玩。 资源下载链接: http://download.csdn.net/detail/qq_31766907/9353901 下载解压后自己新建个vs工程,并将文件拷到工程的根目录下,再将项目添加到工程上运行即可。...
2024/4/17 18:03:23 - 获取字符串长度的方法(go)(待完善)
go语言中len()函数可以获取 数组、数组切片,以及ASCII型字符串(如不含汉字)的长度。 1)ASCII 字符串长度使用 len() 函数。 2)Unicode 字符串长度使用 utf8.RuneCountInString() 函数3)使用 bytes.Count() 统计 4)使用 strings.Count() 统计 其中,strings.Count函数…...
2024/4/27 1:04:36 - tcp三次握手及其必要性
TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接,如下图所示。 主机A为客户机,主机B为服务器确认号:其数值等于发送方的发送序号 +1(即接收方期望接收的下一个序列号)。说明:(1)第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入…...
2024/4/17 18:03:04 - GTK - 实现学生管理系统的图形界面! 详细代码,请发邮件到651134397@qq.com
今天刚刚把GTK 的知识点看完,发现写GTK的笔记的人确实不多。所以准备写这个GTK 专栏来与大家交流, 共享GTK资源,加油准自己写出来加油啦! 今天就先写一点绪论详细的情况,我以后在来来慢慢得写到博客之上,请大家详细得关注一下。对了我写GTK学习笔记,是现分控件来写,其他…...
2024/4/17 18:03:22 - Delcam PowerInspect 5040 sp1/
Delcam PowerInspect 5040 sp1/Ember.XiDE.v2.5.0/EUKLID 2004.3 (3D-CADCAM)/icem cfd 中文培训资料全套/Impulse.CoDeveloper.Universal.v3.60.a.2/Meteonorm v5.1 Multilingual/Safe.FME.v2010.build.6143/Silvaco TCAD 2008.09 Linux/SynaptiCAD.Product.Suite.v14.07c.L…...
2024/5/6 19:09:03 - 基于smtp协议的邮件系统(自己写的)
最近几天做好了应用【贱泰迪】,其中有个意见反馈,发送邮件, 我知道可以调用系统发送邮件,但这种方法有个弊端,就是您的手机必须安装Mail的客户端, 因此我想不用系统发送邮件这种方式,能不能向任意邮箱发送邮件呢?给我自己丢下了一个命题。 于是我调查,发现SMTP发送ema…...
2024/4/26 15:16:35 - 动画:用动画给面试官解释 TCP 三次握手过程
作者 | 小鹿 来源 | 公众号:小鹿动画学编程写在前边 TCP 三次握手过程对于面试是必考的一个,所以不但要掌握 TCP 整个握手的过程,其中有些小细节也更受到面试官的青睐。 对于这部分掌握以及 TCP 的四次挥手,小鹿将会以动画的形式呈现给每个人,这样将复杂的知识简单化,理…...
2024/4/17 18:03:22 - 法布里斯·贝拉 (zz)
法布里斯贝拉[编辑]法布里斯贝拉 出生 1972Grenoble, France 知名於 QEMU, FFmpeg, Tiny C Compiler,Bellards formula 网站 bellard.org 法布里斯贝拉(Fabrice Bellard,法文發音: [faˈbʁis bɛˈlaʁ]) )是一位法國著名的计算机程序员,因FFmpeg、QEMU等项目而闻名业内。他…...
2024/4/20 1:09:35 - PHP中获取字符串长度的使用方法
函数有strlen()、mb_strlen()是通过计算字符串所占字节数来统计字符串长度,一个英文字符占1字节。 例如: $enStr = ‘happy’;echo strlen($enStr); // 输出:5...
2024/4/30 5:12:58 - 使用Spring Boot开发邮件系统
这篇文章是我在公众号“纯洁的微笑”中发现的,与我现在做的业务完美契合,所以保存下来慢慢学习。 文章链接地址:https://mp.weixin.qq.com/s/RHAmzoBwV4gypXT6Q4Tzhg前言互联网发展到现在,邮件服务已经成为互联网企业中必备功能之一,应用场景非常广泛,比较常见的有:用户…...
2024/4/17 18:04:47 - ProCAD.2D/3D.Designer.v2008.1 1CD(最大程度地提高管道设计效率)\
Lumerical FDTD Solutions 2.2最佳微尺度光學模擬軟體\ MPCCI3.0.5_带加密锁.运行稳定版\ SolidCAM2008_R12_SP1(简繁体)\ ssdd 2006_USB锁.运行稳定版\ SSDD2006及STAAD CHINA 2006中文版组合(新)\ 神机妙算工程资料管理软件2008完整版,各功能好用_USB加密锁\ 珠宝设计Jewe…...
2024/4/17 18:02:40 - java回顾之贪吃蛇代码review
JAVA可以算是我的程序之路的启蒙语言,虽然在学校课堂上真心没学过JAVA,之所以这么说其实课堂上学的除了我知道能叫得上名字的课名如C、C++之外,内容都已经还给老师了。要说为什么要选择JAVA,那就是因为我买不起苹果。。 。 。 其实还是安卓的开源吸引了我。到目前为止,目测…...
2024/4/25 22:04:08 - 基于web的java Mail的邮件发送系统的详解
本系统是基于web的,引用了第三方的API:mail.jar开发包。 一.目录结构的介绍 我们可以到Oracle官网下载mail.jar开发包,我下载的版本是1.4.5。下载成功后,会得到一个javamail1_4_5.zip的文件,然后解压。 首先是根目录下的mail.jar是它的核心包在lib子目录下有对应如下的jar…...
2024/4/17 18:03:35
最新文章
- Mac升级go版本某种错误情况处理
当看到 "go1.21 is keg-only, which means it was not symlinked into /opt/homebrew" 这样的信息时,意味着Homebrew没有自动为你创建指向新版本Go的符号链接(symlink),因为这是一个旧版本Go的替代版本。 Homebrew中的…...
2024/5/7 8:13:38 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/5/6 9:38:23 - 【超简单】基于PaddleSpeech搭建个人语音听写服务
一、【超简单】之基于PaddleSpeech搭建个人语音听写服务 1.需求分析 亲们,你们要写会议纪要嘛?亲们,你们要写会议纪要嘛?亲们,你们要写会议纪要嘛?当您面对成吨的会议录音,着急写会议纪要而不得不愚公移山、人海战术?听的头晕眼花,听的漏洞百出,听的怀疑人生,那么你…...
2024/5/6 17:35:42 - 自定义OPPO-r9s的kernel内核,并开启安卓支持docker
0. 版本说明 本文提供了OPPO手机r9s的内核编译方法,并开机支持docker。用的是开源lineage14.1的rom。 我这边基于开源lineage14.1,打了一个docker内核编译镜像(17380582683/r9s),大家可以在容器里,手动打出完整的rom包zip文件。…...
2024/5/2 2:39:28 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/7 5:50:09 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/5/4 23:54:56 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/5/4 23:54:56 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/6 9:21:00 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/5/4 23:54:56 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/5/4 23:55:05 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/5/4 23:54:56 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/5/4 23:55:16 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/5/4 23:54:56 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/5/6 1:40:42 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/5/4 23:54:56 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/5/4 23:55:17 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/5/4 23:55:06 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/5/4 23:54:56 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/4 23:55:06 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/5/5 8:13:33 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/5/4 23:55:16 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/5/4 23:54:58 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/6 21:42:42 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/5/4 23:54:56 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57