Browse Source

增加了文件上传的模块

seamew 3 years ago
parent
commit
b9645243e4

BIN
后端/JavaWeb/assets/image-20211129185902053.png


BIN
后端/JavaWeb/assets/image-20211129185904209.png


BIN
后端/JavaWeb/assets/image-20211130100009703.png


+ 102 - 1
后端/JavaWeb/文件上传和邮件发送.md

@@ -45,4 +45,105 @@ void delete();
 
 ## 4、ServletFileUpload 类
 
-ServletFileUpload负责处理上传的文件数据,并将表单中每个输入项封装成一个FileItem对象中 . 使用其parseRequest(HttpServletRequest) 方法可以将通过表单中每一个HTML标签提交的数据封装成一个FileItem对象,然后以List列表的形式返回,使用该方法处理上传文件简单易用
+ServletFileUpload负责处理上传的文件数据,并将表单中每个输入项封装成一个FileItem对象中 . 使用其parseRequest(HttpServletRequest) 方法可以将通过表单中每一个HTML标签提交的数据封装成一个FileItem对象,然后以List列表的形式返回,使用该方法处理上传文件简单易用
+
+# 邮件发送
+
+***
+
+## 1、 发送原理
+
+![image-20211129185904209](assets/image-20211129185904209.png)
+1. 张三通过smtp协议连接到Smtp服务器,然后发送一封邮件给网易的邮件服务器
+2. 网易分析发现需要去QQ的邮件服务器,通过Smtp协议将邮件转投给QQ的Smtp服务器
+3. QQ将接收到的邮件存储在456789@qq.com这个邮件账号的空间中
+4. 李四通过Pop3协议连接到Pop3服务器收取邮件
+5. 从456789@qq.com这个邮件账号的空间中取出邮件
+6. Pop3服务器将取出来的邮件送道李四手中
+
+## 2、 复杂文件内容的发送
+
+![image-20211130100009703](assets/image-20211130100009703.png)
+
+```java
+import com.sun.mail.util.MailSSLSocketFactory;
+
+import javax.activation.DataHandler;
+import javax.activation.FileDataSource;
+import javax.mail.*;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeBodyPart;
+import javax.mail.internet.MimeMessage;
+import javax.mail.internet.MimeMultipart;
+import java.util.Properties;
+
+public class MailDemo02 {
+    public static void main(String[] args) throws Exception {
+        Properties prop=new Properties();
+        prop.setProperty("mail.host","smtp.qq.com");// 设置QQ邮件服务器
+        prop.setProperty("mail.transport.protocol","smtp");// 邮件发送协议
+        prop.setProperty("mail.smtp.auth","true");// 需要验证用户密码
+        // QQ邮箱需要设置SSL加密
+        MailSSLSocketFactory sf=new MailSSLSocketFactory();
+        sf.setTrustAllHosts(true);
+        prop.put("mail.smtp.ssl.enable","true");
+        prop.put("mail.smtp.ssl.socketFactory",sf);
+
+        // 使用javaMail发送邮件的5个步骤
+        // 1.创建定义整个应用程序所需要的环境信息的session对象
+        Session session=Session.getDefaultInstance(prop, new Authenticator() {
+            @Override
+            protected PasswordAuthentication getPasswordAuthentication() {
+                return new PasswordAuthentication("11927XXX@qq.com","授权码");
+            }
+        });
+        // 开启session的debug模式,这样可以查看到程序发送Email的运行状态
+        session.setDebug(true);
+        // 2.通过session得到transport对象
+        Transport ts=session.getTransport();
+        // 3.使用邮箱的用户名和授权码连上邮件服务器
+        ts.connect("smtp.qq.com","11927XXX@qq.com","授权码");
+        // 4.创建邮件:写文件
+        // 注意需要传递session
+        MimeMessage message=new MimeMessage(session);
+        // 指明邮件的发件人
+        message.setFrom(new InternetAddress("11927XXX@qq.com"));
+        // 指明邮件的收件人
+        message.setRecipient(Message.RecipientType.TO,new InternetAddress("11927XXX@qq.com"));
+        // 邮件标题
+        message.setSubject("java发出");
+
+        // 邮件的文本内容
+        // =================================准备图片数据=======================================
+        MimeBodyPart image=new MimeBodyPart();
+        // 图片需要经过数据化的处理
+        DataHandler dh=new DataHandler(new FileDataSource("src/resources/1.jpg"));
+        // 在part中放入这个处理过图片的数据
+        image.setDataHandler(dh);
+        // 给这个part设置一个ID名字,sr
+        image.setContentID("1.jpg");
+
+        // 准备正文的数据
+        MimeBodyPart text=new MimeBodyPart();
+        text.setContent("这是一张正文<img src='cid:1.jpg'>","text/html;charset=UTF-8");
+
+        // 描述数据关系
+        MimeMultipart mm=new MimeMultipart();
+        mm.addBodyPart(text);
+        mm.addBodyPart(image);
+        mm.setSubType("related");
+
+        // 设置到消息中,保存修改
+        message.setContent(mm);
+        message.saveChanges();
+        // 5.发送邮件
+        ts.sendMessage(message,message.getAllRecipients());
+
+        // 6.关闭连接
+        ts.close();
+
+    }
+}
+
+```
+