【JavaWeb】JavaWeb从入门到实战(16)
前言:
本文内容:邮件发送原理及实现、网站注册发送邮件实现、之后学习方向
推荐免费JavaWeb入门到实战视频:【狂神说Java】JavaWeb入门到实战_哔哩哔哩_bilibili
JavaWeb笔记代码下载地址:
蓝奏云:下载地址 密码:joker
百度云:下载地址 提取码:uhm2
邮件发送原理及实现
发送邮件简单理解
Java中实现邮件发送准备
使用Java发送E-mail,需要准备JavaMail API
和 Java Activation Framework
下载需要的jar包:
- mail.jar
- activation.jar
Java处理邮件的四个核心类
QQ邮箱授权码获取(设置–>账户)
邮件发送实现
-
导包
-
实现简单(纯文本)邮件发送
MailDemo01.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69package com.jokerdig.mail;
import com.sun.mail.util.MailSSLSocketFactory;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;
/**
* @author Joker大雄
* @data 2022/4/22 - 11:35
**/
public class MailDemo01 {
// 发送简单邮件
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 mssl = new MailSSLSocketFactory();
mssl.setTrustAllHosts(true);
prop.put("mail.smtp.ssl.enable","true");
prop.put("mail.smtp.ssl.socketFactory",mssl);
// 使用 JavaMail 发送邮件5个步骤
// 1.创建定义整个应用程序所需的环境信息 Session对象 创建监听
Session session = Session.getDefaultInstance(prop, new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
// 发件人邮件用户名 、 授权码
return new PasswordAuthentication("xxxx@qq.com","授权码");
}
});
// 开启Session的debug模式 方便查看email运行状态
session.setDebug(true);
// 2.通过session得到transport对象
Transport ts = session.getTransport();
// 3.使用邮箱用户名和授权码连接邮件服务器
ts.connect("smtp.qq.com","xxxxx@qq.com","授权码");
// 4.创建邮件
// 注意需要传递session
MimeMessage message = new MimeMessage(session);
// 指明发件人
message.setFrom(new InternetAddress("xxxxxx@qq.com"));
// 指明收件人 Message.RecipientType.TO 防止邮件被拦截到垃圾箱
message.setRecipient(Message.RecipientType.TO,new InternetAddress("xxxxxx@163.com"));
// 邮件的标题
message.setSubject("Java发送了一封邮件");
// 邮件的文本内容 和编码
message.setContent("使用Java实现一封邮件发送 --来自:<a href='https://jokerdig.com'>Hey,Joker</a>","text/html;charset=UTF-8");
// 5.发送邮件
ts.sendMessage(message,message.getAllRecipients());
System.out.println("发送结束");
// 6.关闭连接
ts.close();
}
} -
邮件发送成功
网站注册发送邮件实现
带附件的邮件发送
-
MIME(多用途互联网邮件扩展类型)
-
MimeBodyPart类
javax.mail.internet.MimeBodyPart
类,是一个MIME消息,它和MImeMessage
类一样从Part接口继承过来 -
MimeMultipart类
javax.mail.internet.MimeMultipart
是抽象类Multipart
的子类,用来组合多个MIME消息
嵌套关系
创建包含内嵌图片的邮件
-
实现带图邮件发送
MailDemo02.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92package com.jokerdig.mail;
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;
/**
* @author Joker大雄
* @data 2022/4/22 - 12:29
**/
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 mssl = new MailSSLSocketFactory();
mssl.setTrustAllHosts(true);
prop.put("mail.smtp.ssl.enable","true");
prop.put("mail.smtp.ssl.socketFactory",mssl);
// 使用 JavaMail 发送邮件5个步骤
// 1.创建定义整个应用程序所需的环境信息 Session对象 创建监听
Session session = Session.getDefaultInstance(prop, new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
// 发件人邮件用户名 、 授权码
return new PasswordAuthentication("xxxxx@qq.com","授权码");
}
});
// 开启Session的debug模式 方便查看email运行状态
session.setDebug(true);
// 2.通过session得到transport对象
Transport ts = session.getTransport();
// 3.使用邮箱用户名和授权码连接邮件服务器
ts.connect("smtp.qq.com","xxxxx@qq.com","授权码");
// 4.创建邮件
// 注意需要传递session
MimeMessage message = new MimeMessage(session);
// 指明发件人
message.setFrom(new InternetAddress("xxxxx@qq.com"));
// 指明收件人 Message.RecipientType.TO 防止邮件被拦截到垃圾箱
message.setRecipient(Message.RecipientType.TO,new InternetAddress("xxxxx@163.com"));
// 邮件的标题
message.setSubject("Java发送了一封带图片的邮件");
// 准备图片素材
MimeBodyPart image = new MimeBodyPart();
// 处理图片 DataHandler
DataHandler dh = new DataHandler(new FileDataSource("D:\\Project\\project3\\JavaWeb\\功能拓展\\mail\\src\\resource\\va-11.png"));
image.setDataHandler(dh);
image.setContentID("va.png");
// 邮件的文本内容 和编码
MimeBodyPart text = new MimeBodyPart();
text.setContent("使用Java实现一封带图片邮件的发送<img src='cid:va.png'/> --来自:<a href='https://jokerdig.com'>Hey,Joker</a>","text/html;charset=UTF-8");
// 描述数据关系 连接图片和文字
MimeMultipart mime = new MimeMultipart();
mime.addBodyPart(text);
mime.addBodyPart(image);
mime.setSubType("related");
// 设置消息 保存
message.setContent(mime);
message.saveChanges();
// 5.发送邮件
ts.sendMessage(message,message.getAllRecipients());
System.out.println("发送结束");
// 6.关闭连接
ts.close();
}
} -
发送成功
Java实现网站邮箱注册
-
引入jar包
pom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19<!-- servlet-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
<!-- mail-->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
<!-- activation -->
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency> -
项目构建完毕
-
编写相关代码
RegisterServlet.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39package com.jokerdig.servlet;
import com.jokerdig.pojo.User;
import com.jokerdig.util.SendMail;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @author Joker大雄
* @data 2022/4/22 - 13:47
**/
public class RegisterServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 接收用户请求,封装为对象
String username = req.getParameter("username");
String password = req.getParameter("password");
String email = req.getParameter("email");
User user = new User(username,password,email);
// 用户注册 使用多线程优化用户等待时间
SendMail send = new SendMail(user);
// 启动线程
send.start();
// 开始注册
req.setAttribute("msg","注册成功,我们已向您的邮箱发送了一封带有注册信息的电子邮件,请查收!");
req.getRequestDispatcher("info.jsp").forward(req,resp);
}
}SendMail.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94package com.jokerdig.util;
import com.jokerdig.pojo.User;
import com.sun.mail.util.MailSSLSocketFactory;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.security.GeneralSecurityException;
import java.util.Properties;
/**
* @author Joker大雄
* @data 2022/4/22 - 14:09
**/
public class SendMail extends Thread{
// 发送的邮箱
private String from = "jokerdaxiong@qq.com";
// 接收者邮箱
private String username = "jokerdaxiong@qq.com";
// 授权码
private String password = "授权码";
// 发送邮件服务器
private String host = "smtp.qq.com";
private User user;
public SendMail(User user) {
this.user = user;
}
public void run() {
try {
// 设置服务器 发送协议 用户名密码
Properties prop = new Properties();
prop.setProperty("mail.host",host);// 设置qq邮箱服务器
prop.setProperty("mail.transport.protocol","smtp");// 邮箱发送协议
prop.setProperty("mail.smtp.auth","true");// 验证用户名密码
// QQ邮箱 需要设置SSL加密
MailSSLSocketFactory mssl = new MailSSLSocketFactory();
mssl.setTrustAllHosts(true);
prop.put("mail.smtp.ssl.enable","true");
prop.put("mail.smtp.ssl.socketFactory",mssl);
// 使用 JavaMail 发送邮件5个步骤
// 1.创建定义整个应用程序所需的环境信息 Session对象 创建监听
Session session = Session.getDefaultInstance(prop, new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
// 发件人邮件用户名 、 授权码
return new PasswordAuthentication(from,password);
}
});
// 开启Session的debug模式 方便查看email运行状态
session.setDebug(true);
// 2.通过session得到transport对象
Transport ts = session.getTransport();
// 3.使用邮箱用户名和授权码连接邮件服务器
ts.connect(host,username,password);
// 4.创建邮件
// 注意需要传递session
MimeMessage message = new MimeMessage(session);
// 指明发件人
message.setFrom(new InternetAddress(from));
// 指明收件人 Message.RecipientType.TO 防止邮件被拦截到垃圾箱
message.setRecipient(Message.RecipientType.TO,new InternetAddress(user.getEmail()));
// 邮件的标题
message.setSubject("Hey,Joker用户注册");
// 邮件的文本内容 和编码
String info = "恭喜注册成功,您的账号:<b>"+user.getUsername()+"</b> 密码:<b>"+user.getPassword()+"</b>,请妥善保管。 --来自:<a href='https://jokerdig.com'>Hey,Joker</a>";
message.setContent(info,"text/html;charset=UTF-8");
// 5.发送邮件
ts.sendMessage(message,message.getAllRecipients());
System.out.println("发送结束");
// 6.关闭连接
ts.close();
} catch (GeneralSecurityException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
}
}User.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47package com.jokerdig.pojo;
import java.io.Serializable;
/**
* @author Joker大雄
* @data 2022/4/22 - 14:00
**/
// 序列化
public class User implements Serializable {
private String username;
private String password;
private String email;
public User() {
}
public User(String username, String password, String email) {
this.username = username;
this.password = password;
this.email = email;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}index.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>注册</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/registerServlet.do" method="post">
账号:<input type="text" name="username"><br/>
密码:<input type="password" name="password"><br/>
邮箱:<input type="text" name="email"><br/>
<input type="submit" value="注册">
</form>
</body>
</html>info.jsp
1
2
3
4
5
6
7
8
9
10
11<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>注册成功</title>
</head>
<body>
<h1>Hey,Joker温馨提示:</h1>
${msg}<br>
<a href="index.jsp">返回注册页</a>
</body>
</html>web.xml
1
2
3
4
5
6
7
8
9<!-- RegisterServlet-->
<servlet>
<servlet-name>RegisterServlet</servlet-name>
<servlet-class>com.jokerdig.servlet.RegisterServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RegisterServlet</servlet-name>
<url-pattern>/registerServlet.do</url-pattern>
</servlet-mapping> -
实现邮件注册
之后的学习方向
SSM框架部分
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Hey,Joker!
评论
ValineTwikoo