Skip to content

Commit e7c3a1c

Browse files
committed
新增-慕课网《Java实现邮箱验证》学习源码
1 parent 078b9f3 commit e7c3a1c

File tree

14 files changed

+424
-2
lines changed

14 files changed

+424
-2
lines changed

16-my-javamail/README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
简介
2+
====
3+
4+
慕课网《Java实现邮箱验证》学习源码
5+

16-my-javamail/myregistweb/pom.xml

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4+
<modelVersion>4.0.0</modelVersion>
5+
6+
<groupId>com.myimooc</groupId>
7+
<artifactId>myregistweb</artifactId>
8+
<version>0.0.1-SNAPSHOT</version>
9+
<packaging>jar</packaging>
10+
11+
<name>myregistweb</name>
12+
<description>Demo project for Spring Boot</description>
13+
14+
<parent>
15+
<groupId>org.springframework.boot</groupId>
16+
<artifactId>spring-boot-starter-parent</artifactId>
17+
<version>1.5.3.RELEASE</version>
18+
<relativePath/> <!-- lookup parent from repository -->
19+
</parent>
20+
21+
<properties>
22+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
23+
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
24+
<java.version>1.8</java.version>
25+
</properties>
26+
27+
<dependencies>
28+
<dependency>
29+
<groupId>org.springframework.boot</groupId>
30+
<artifactId>spring-boot-starter</artifactId>
31+
</dependency>
32+
<dependency>
33+
<groupId>org.springframework.boot</groupId>
34+
<artifactId>spring-boot-starter-data-jpa</artifactId>
35+
</dependency>
36+
<dependency>
37+
<groupId>org.springframework.boot</groupId>
38+
<artifactId>spring-boot-starter-thymeleaf</artifactId>
39+
</dependency>
40+
<dependency>
41+
<groupId>org.springframework.boot</groupId>
42+
<artifactId>spring-boot-starter-mail</artifactId>
43+
</dependency>
44+
<dependency>
45+
<groupId>org.springframework.boot</groupId>
46+
<artifactId>spring-boot-starter-web</artifactId>
47+
</dependency>
48+
49+
<dependency>
50+
<groupId>mysql</groupId>
51+
<artifactId>mysql-connector-java</artifactId>
52+
<scope>runtime</scope>
53+
</dependency>
54+
<dependency>
55+
<groupId>org.springframework.boot</groupId>
56+
<artifactId>spring-boot-starter-test</artifactId>
57+
<scope>test</scope>
58+
</dependency>
59+
</dependencies>
60+
61+
<build>
62+
<plugins>
63+
<plugin>
64+
<groupId>org.springframework.boot</groupId>
65+
<artifactId>spring-boot-maven-plugin</artifactId>
66+
<version>1.5.3.RELEASE</version>
67+
</plugin>
68+
</plugins>
69+
</build>
70+
71+
72+
</project>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.myimooc.myregistweb;
2+
3+
import org.springframework.boot.SpringApplication;
4+
import org.springframework.boot.autoconfigure.SpringBootApplication;
5+
6+
@SpringBootApplication
7+
public class MyregistwebApplication {
8+
9+
public static void main(String[] args) {
10+
SpringApplication.run(MyregistwebApplication.class, args);
11+
}
12+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.myimooc.myregistweb.dao;
2+
3+
import org.springframework.data.jpa.repository.JpaRepository;
4+
5+
import com.myimooc.myregistweb.domain.User;
6+
7+
public interface UserRepository extends JpaRepository<User, Integer> {
8+
9+
User findByCode(String code);
10+
11+
}
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
package com.myimooc.myregistweb.domain;
2+
3+
import javax.persistence.Entity;
4+
import javax.persistence.GeneratedValue;
5+
import javax.persistence.Id;
6+
7+
@Entity
8+
public class User {
9+
10+
@Id
11+
@GeneratedValue
12+
private Integer uid;
13+
14+
private String username;
15+
16+
private String password;
17+
18+
private String nickname;
19+
20+
private String email;
21+
22+
private Integer state;
23+
24+
private String code;
25+
26+
public Integer getUid() {
27+
return uid;
28+
}
29+
30+
public void setUid(Integer uid) {
31+
this.uid = uid;
32+
}
33+
34+
public String getUsername() {
35+
return username;
36+
}
37+
38+
public void setUsername(String username) {
39+
this.username = username;
40+
}
41+
42+
public String getPassword() {
43+
return password;
44+
}
45+
46+
public void setPassword(String password) {
47+
this.password = password;
48+
}
49+
50+
public String getNickname() {
51+
return nickname;
52+
}
53+
54+
public void setNickname(String nickname) {
55+
this.nickname = nickname;
56+
}
57+
58+
public String getEmail() {
59+
return email;
60+
}
61+
62+
public void setEmail(String email) {
63+
this.email = email;
64+
}
65+
66+
public Integer getState() {
67+
return state;
68+
}
69+
70+
public void setState(Integer state) {
71+
this.state = state;
72+
}
73+
74+
public String getCode() {
75+
return code;
76+
}
77+
78+
public void setCode(String code) {
79+
this.code = code;
80+
}
81+
82+
83+
84+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package com.myimooc.myregistweb.service;
2+
3+
import org.springframework.beans.factory.annotation.Autowired;
4+
import org.springframework.stereotype.Service;
5+
6+
import com.myimooc.myregistweb.dao.UserRepository;
7+
import com.myimooc.myregistweb.domain.User;
8+
import com.myimooc.myregistweb.util.MailUtils;
9+
10+
@Service
11+
public class UserService {
12+
@Autowired
13+
private UserRepository userRepository;
14+
15+
/**
16+
* 用户注册的方法
17+
* @param user
18+
*/
19+
public void regist(User user){
20+
// 将数据存入到数据库
21+
userRepository.save(user);
22+
23+
// 发送一封激活邮件
24+
try {
25+
MailUtils.sendMail(user.getEmail(), user.getCode());
26+
} catch (Exception e) {
27+
// e.printStackTrace();
28+
System.out.println("邮件发送异常");
29+
}
30+
}
31+
32+
/**
33+
* 用户激活的方法
34+
* @param user
35+
*/
36+
public boolean registActive(String code){
37+
38+
User user = userRepository.findByCode(code);
39+
if( null == user){
40+
return false;
41+
}
42+
43+
user.setState(1);
44+
user.setCode("");
45+
46+
userRepository.save(user);
47+
48+
return true;
49+
}
50+
51+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package com.myimooc.myregistweb.util;
2+
3+
import java.util.Properties;
4+
5+
import javax.mail.Authenticator;
6+
import javax.mail.Message;
7+
import javax.mail.PasswordAuthentication;
8+
import javax.mail.Session;
9+
import javax.mail.Transport;
10+
import javax.mail.internet.InternetAddress;
11+
import javax.mail.internet.MimeMessage;
12+
import javax.mail.internet.MimeMessage.RecipientType;
13+
14+
/**
15+
* 邮件发送工具类
16+
* @create ZhangCheng by 2017-06-08
17+
*
18+
*/
19+
public class MailUtils {
20+
21+
/**
22+
* 发送邮件的方法
23+
* @param to 收件人邮箱地址
24+
* @param code 邮件的激活码
25+
*/
26+
public static void sendMail(String to,String code) throws Exception{
27+
// 1.创建连接对象,连接到邮箱服务器
28+
Properties props = new Properties();
29+
30+
Session session = Session.getInstance(props, new Authenticator() {
31+
32+
@Override
33+
protected PasswordAuthentication getPasswordAuthentication() {
34+
return new PasswordAuthentication("[email protected]", "123");
35+
}
36+
});
37+
38+
// 2.创建邮件对象
39+
Message message = new MimeMessage(session);
40+
// 设置发件人
41+
message.setFrom(new InternetAddress("[email protected]"));
42+
// 设置收件人
43+
message.setRecipient(RecipientType.TO, new InternetAddress(to));
44+
// 设置邮件主题
45+
message.setSubject("来自zccoder的账号激活邮件");
46+
// 设置邮件的正文
47+
message.setContent("<h1>来自zccoder的账号激活邮件,激活请点击一下链接:</h1><h3><a href='http://localhost:8080/regist/active?code="+code+"'>http://localhost:8080/regist/active?code="+code+"</h3>", "text/html;charset=UTF-8");
48+
49+
// 3.发送一封激活邮件
50+
Transport.send(message);
51+
}
52+
53+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.myimooc.myregistweb.util;
2+
3+
import java.util.UUID;
4+
5+
/**
6+
* 生成随机字符串工具类
7+
* @create ZhangCheng by 2017-06-08
8+
*
9+
*/
10+
public class UuidUtils {
11+
12+
public static String getUuid(){
13+
return UUID.randomUUID().toString().replace("-", "");
14+
}
15+
16+
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package com.myimooc.myregistweb.web.controller;
2+
3+
import org.springframework.beans.factory.annotation.Autowired;
4+
import org.springframework.stereotype.Controller;
5+
import org.springframework.web.bind.annotation.GetMapping;
6+
import org.springframework.web.bind.annotation.PostMapping;
7+
import org.springframework.web.bind.annotation.RequestParam;
8+
import org.springframework.web.bind.annotation.ResponseBody;
9+
import org.springframework.web.servlet.ModelAndView;
10+
11+
import com.myimooc.myregistweb.domain.User;
12+
import com.myimooc.myregistweb.service.UserService;
13+
import com.myimooc.myregistweb.util.UuidUtils;
14+
15+
@Controller
16+
public class RegistController {
17+
18+
@Autowired
19+
private UserService userService;
20+
21+
/**
22+
* 跳转到注册页面
23+
* @return
24+
*/
25+
@GetMapping("/regist")
26+
public ModelAndView toRegistPage(){
27+
return new ModelAndView("regist");
28+
}
29+
30+
/**
31+
* 处理用户注册请求
32+
* @return
33+
*/
34+
@PostMapping("/regist")
35+
public ModelAndView regist(User user){
36+
user.setState(0);// 0,未激活;1,已激活
37+
String code = UuidUtils.getUuid()+UuidUtils.getUuid();
38+
user.setCode(code);
39+
// 调用业务层处理数据
40+
userService.regist(user);
41+
// 页面跳转
42+
43+
return new ModelAndView("regist");
44+
}
45+
46+
/**
47+
* 处理用户激活请求
48+
* @return
49+
*/
50+
@GetMapping("/regist/active")
51+
@ResponseBody
52+
public Object registActive(@RequestParam("code") String code){
53+
54+
boolean result = userService.registActive(code);
55+
56+
return "激活状态:"+result;
57+
}
58+
59+
60+
}

16-my-javamail/myregistweb/src/main/resources/application.properties

Whitespace-only changes.

0 commit comments

Comments
 (0)