资讯专栏INFORMATION COLUMN

慕课网_《Java实现邮箱验证》学习总结

marser / 852人阅读

摘要:时间年月日星期三说明本文部分内容均来自慕课网。用户过生日,系统发送生日祝福邮件。将最新活动和优惠以邮件的形式告知会员。通常把处理用户请求邮件发送请求的邮件服务器称为服务器。提供了加密的协议被称为。

时间:2017年06月07日星期三
说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com
教学示例源码:无
个人学习源码:https://github.com/zccodere/s...

第一章:课程介绍 1-1 课程内容介绍

课程内容

理解邮件开发涉及的基本概念
了解SMTP和POP3协议
掌握配置Foxmail
掌握JavaMail发送简单邮件
第二章:邮件相关概念介绍 2-1 JavaMail的概述

JavaMail

JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口。它是Sun发布的用来处理email的API。它可以方便地执行一些常用的邮件传输。我们可以基于JavaMail开发出类似于Microsoft Outlook的应用程序。

为什么要学习JavaMail

现在很多的WEB开发都需要使用JavaMail,例如:
1.用户注册后,网站发送一封激活邮件验证。
2.用户过生日,系统发送生日祝福邮件。
3.将最新活动和优惠以邮件的形式告知会员。
这些应用都需要开发人员会使用编程语言发送邮件。
2-2 邮件开发中的相关的术语

电子邮箱

电子邮箱(E-mail地址)需要在邮件服务器上进行申请,确切地说,电子邮箱其实就是用户在邮件服务器上申请的一个账户。用户在邮件服务器上申请了一个账户后,邮件服务器就会为这个账号分配一定的空间,用户从而可以使用这个账号以及空间,发送电子邮件和保存别人发送过来的电子邮件。

邮箱服务器

服务器的概念不难理解,应为作为WEB开发人员我们应该更清楚什么是服务器,服务器指的是一台电脑安装了一个服务器软件。那么这台电脑就可以称为是WEB服务器。那么同样的一台电脑安装了邮件服务器软件,那么这台电脑称为是邮箱服务器。要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器。例如现在网络上有很多提供邮件服务的厂商:新浪、搜狐、网易等等他们都有自己的邮件服务器。

SMTP协议(发送邮件协议)

SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,
    它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
SMTP协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。
SMTP协议所指定的服务器,就可以把E-mail寄到收信人的服务器上了,整个过程只要几分钟。
SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转发出的电子邮件。
通常把处理用户SMTP请求(邮件发送请求)的邮件服务器称为SMTP服务器。
默认端口号为25

POP3协议(接收邮件协议)

POP3,全名为“Post Office Protocol - Version 3”,即“邮局协议版本3”。
是TCP/IP协议族中的一员,由RFC1939 定义。
本协议主要用于支持使用客户端远程管理在服务器上的电子邮件。
提供了SSL加密的POP3协议被称为POP3S。
同样,用户若想从邮件服务器管理的电子邮箱中接收一封电子邮件的话,他连上邮件服务器后,
    也需要遵循一定的通讯格式,POP3协议用于定义这种通讯格式。
因而,通常我们也把处理用户POP3请求(邮件接收请求)的邮件服务器称为POP3服务器。
默认端口号110
2-3 邮件收发过程的介绍

邮件收发过程

第三章:邮箱服务器和客户端安装及配置 3-1 邮箱服务器的安装和配置

安装软件eyoumailserversetup.exe

安装成功后,修改域名

新建账号

3-2 邮箱客户端的安装和配置

安装软件foxmail.exe

安装成功后,登录邮箱

第四章:邮件发送代码实现 4-1 环境搭建

以用户注册为例,当用户注册成功之后,向用户注册邮箱发送用户激活邮件。

教学时,使用传统开发方式,先建数据库表,然后在开发项目。我在学习时,使用JPA技术,基于实体对象模型进行自动创建表。

构建工具:maven
使用框架:Spring Boot

POM文件如下



    4.0.0

    com.myimooc
    myregistweb
    0.0.1-SNAPSHOT
    jar

    myregistweb
    Demo project for Spring Boot

    
        org.springframework.boot
        spring-boot-starter-parent
        1.5.3.RELEASE
         
    

    
        UTF-8
        UTF-8
        1.8
    

    
        
            org.springframework.boot
            spring-boot-starter
        
        
            org.springframework.boot
            spring-boot-starter-data-jpa
        
        
            org.springframework.boot
            spring-boot-starter-thymeleaf
        
        
            org.springframework.boot
            spring-boot-starter-mail
        
        
            org.springframework.boot
            spring-boot-starter-web
        

        
            mysql
            mysql-connector-java
            runtime
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
                1.5.3.RELEASE
            
        
    


用户注册页面代码




    
    用户注册页面


用户名
密码
昵称
邮箱
4-2 用户注册相关类的创建

代码演示:

1.编写领域模型User类

package com.myimooc.myregistweb.domain;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class User {
    
    @Id
    @GeneratedValue
    private Integer uid;
    
    private String username;
    
    private String password;
    
    private String nickname;
    
    private String email;
    
    private Integer state;
    
    private String code;

    public Integer getUid() {
        return uid;
    }

    public void setUid(Integer uid) {
        this.uid = uid;
    }

    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 getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Integer getState() {
        return state;
    }

    public void setState(Integer state) {
        this.state = state;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }
    
    
    
}

2.编写工具类UuidUtils类

package com.myimooc.myregistweb.util;

import java.util.UUID;

/**
 * 生成随机字符串工具类
 * @create ZhangCheng by 2017-06-08
 *
 */
public class UuidUtils {
    
    public static String getUuid(){
        return UUID.randomUUID().toString().replace("-", "");
    }
    
}
4-3 用户注册功能代码实现

代码演示:

1.编写UserRepository类

package com.myimooc.myregistweb.dao;

import org.springframework.data.jpa.repository.JpaRepository;

import com.myimooc.myregistweb.domain.User;

public interface UserRepository extends JpaRepository {
    
    User findByCode(String code);

}

2.编写UserService类

package com.myimooc.myregistweb.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.myimooc.myregistweb.dao.UserRepository;
import com.myimooc.myregistweb.domain.User;
import com.myimooc.myregistweb.util.MailUtils;

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;
    
    /**
     * 用户注册的方法
     * @param user
     */
    public void regist(User user){
        // 将数据存入到数据库
        userRepository.save(user);
        
        // 发送一封激活邮件
        try {
            MailUtils.sendMail(user.getEmail(), user.getCode());
        } catch (Exception e) {
//            e.printStackTrace();
            System.out.println("邮件发送异常");
        }
    }
    
    /**
     * 用户激活的方法
     * @param user
     */
    public boolean registActive(String code){
        
        User user = userRepository.findByCode(code);
        if( null == user){
            return false;
        }
        
        user.setState(1);
        user.setCode("");
        
        userRepository.save(user);
        
        return true;
    }
    
}

3.编写UserController类

package com.myimooc.myregistweb.web.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.myimooc.myregistweb.domain.User;
import com.myimooc.myregistweb.service.UserService;
import com.myimooc.myregistweb.util.UuidUtils;

@Controller
public class RegistController {
    
    @Autowired
    private UserService userService;
    
    /**
     * 跳转到注册页面
     * @return
     */
    @GetMapping("/regist")
    public ModelAndView toRegistPage(){
        return new ModelAndView("regist");
    }
    
    /**
     * 处理用户注册请求
     * @return
     */
    @PostMapping("/regist")
    public ModelAndView regist(User user){
        user.setState(0);// 0,未激活;1,已激活
        String code = UuidUtils.getUuid()+UuidUtils.getUuid();
        user.setCode(code);
        // 调用业务层处理数据
        userService.regist(user);
        // 页面跳转
        
        return new ModelAndView("regist");
    }
    
    /**
     * 处理用户激活请求
     * @return
     */
    @GetMapping("/regist/active")
    @ResponseBody
    public Object registActive(@RequestParam("code") String code){
        
        boolean result = userService.registActive(code);
        
        return "激活状态:"+result;
    }
    

}
4-4 发送激活邮件

代码演示:

package com.myimooc.myregistweb.util;

import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;

/**
 * 邮件发送工具类
 * @create ZhangCheng by 2017-06-08
 *
 */
public class MailUtils {
    
    /**
     * 发送邮件的方法
     * @param to 收件人邮箱地址
     * @param code 邮件的激活码
     */
    public static void sendMail(String to,String code) throws Exception{
        // 1.创建连接对象,连接到邮箱服务器
        Properties props = new Properties();
        
        Session session = Session.getInstance(props, new Authenticator() {

            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("service@zccoder.com", "123");
            }
        });
        
        // 2.创建邮件对象
        Message message = new MimeMessage(session);
        // 设置发件人
        message.setFrom(new InternetAddress("service@zccoder.com"));
        // 设置收件人
        message.setRecipient(RecipientType.TO, new InternetAddress(to));
        // 设置邮件主题
        message.setSubject("来自zccoder的账号激活邮件");
        // 设置邮件的正文
        message.setContent("

来自zccoder的账号激活邮件,激活请点击一下链接:

http://localhost:8080/regist/active?code="+code+"

", "text/html;charset=UTF-8"); // 3.发送一封激活邮件 Transport.send(message); } }
4-5 用户激活功能代码实现

代码演示:

package com.myimooc.myregistweb.web.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.myimooc.myregistweb.domain.User;
import com.myimooc.myregistweb.service.UserService;
import com.myimooc.myregistweb.util.UuidUtils;

@Controller
public class RegistController {
    
    @Autowired
    private UserService userService;
    
    /**
     * 跳转到注册页面
     * @return
     */
    @GetMapping("/regist")
    public ModelAndView toRegistPage(){
        return new ModelAndView("regist");
    }
    
    /**
     * 处理用户注册请求
     * @return
     */
    @PostMapping("/regist")
    public ModelAndView regist(User user){
        user.setState(0);// 0,未激活;1,已激活
        String code = UuidUtils.getUuid()+UuidUtils.getUuid();
        user.setCode(code);
        // 调用业务层处理数据
        userService.regist(user);
        // 页面跳转
        
        return new ModelAndView("regist");
    }
    
    /**
     * 处理用户激活请求
     * @return
     */
    @GetMapping("/regist/active")
    @ResponseBody
    public Object registActive(@RequestParam("code") String code){
        
        boolean result = userService.registActive(code);
        
        return "激活状态:"+result;
    }
    

}
第五章:课程总结 5-1 课程总结

总结

JavaMial的介绍
相关术语
邮件收发过程
邮件服务器搭建和客户端安装
用户注册发送邮件激活

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/70144.html

相关文章

  • 课网_Java图片验证码》学习总结

    时间:2017年07月09日星期日说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com教学源码:无学习源码:https://github.com/zccodere/s... 第一章:概述 1-1 课程概述 主要内容 验证码历史 课程内容 不同方案对比 设计与实现 总结 1-2 验证码历史 验证码历史 无验证码:垃圾骚扰 Luis von Ahn:Captcha 不断...

    haitiancoder 评论0 收藏0
  • 课网_Java实现Base64加密》学习总结

    摘要:时间年月日星期一说明本文部分内容均来自慕课网。多用于网络加密。散列函数函数或消息摘要函数主要作用散列函数用来验证数据的完整性。 时间:2017年4月10日星期一说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com教学示例源码:https://github.com/zccodere/s...个人学习源码:https://github.com/zccodere...

    verano 评论0 收藏0
  • 课网_《Spring Boot 发送邮件》学习总结

    摘要:慕课网发送邮件学习总结时间年月日星期六说明本文部分内容均来自慕课网。 慕课网《Spring Boot 发送邮件》学习总结 时间:2018年09月08日星期六 说明:本文部分内容均来自慕课网。@慕课网:https://www.imooc.com 教学源码:https://github.com/ityouknow/... 学习源码:https://github.com/zccoder...

    Meathill 评论0 收藏0
  • 课网_Java实现数字签名》学习总结

    时间:2017年4月13日星期四说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com教学示例源码:https://github.com/zccodere/s...个人学习源码:https://github.com/zccodere/s... 第一章:概述 1-1 数字签名算法概述 数字签名算法 签名-安全性,抗否认性 数字签名:带有密钥(公钥、私钥)的消息摘要算法 验...

    gotham 评论0 收藏0
  • 课网_《初识Java微信公众号开发》学习总结

    摘要:时间年月日星期五说明本文部分内容均来自慕课网。本套课程介绍微信公众号开发,主要涉及公众号介绍编辑模式介绍开发模式介绍等。慕课网是垂直的互联网技能免费学习网站。 时间:2017年08月11日星期五说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com教学源码:https://github.com/zccodere/s...学习源码:https://github...

    PrototypeZ 评论0 收藏0

发表评论

0条评论

marser

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<