时间: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文件如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.myimooc</groupId><artifactId>myregistweb</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>myregistweb</name><description>Demo project for Spring Boot</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.3.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>1.5.3.RELEASE</version></plugin></plugins></build></project>

用户注册页面代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"/><title>用户注册页面</title>
</head>
<body>
<form action="/regist" method="post"><table width="600" border="1"><tr><td>用户名</td><td><input type="text" name="username"/> </td></tr><tr><td>密码</td><td><input type="password" name="password"/> </td></tr><tr><td>昵称</td><td><input type="text" name="nickname"/> </td></tr><tr><td>邮箱</td><td><input type="text" name="email"/> </td></tr><tr><td colspan="2"><input type="submit" value="注册"/> </td></tr></table>
</form>
</body>
</html>

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@GeneratedValueprivate 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, Integer> {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 {@Autowiredprivate 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 {@Autowiredprivate 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")@ResponseBodypublic 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() {@Overrideprotected 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("<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");// 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 {@Autowiredprivate 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")@ResponseBodypublic Object registActive(@RequestParam("code") String code){boolean result = userService.registActive(code);return "激活状态:"+result;}}

第五章:课程总结

5-1 课程总结

总结

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

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

  1. 慕课网_《微信授权登录》学习总结

    时间:2017年08月12日星期六 说明:本文部分内容均来自慕课网.@慕课网:http://www.imooc.com 教学源码:无 学习源码:https://github.com/zccodere/ ...

  2. 微信授权登录(微信订阅号使用测试账号)

    1.微信授权登录: 微信公众号测试登录: 准备: 1.1 花生壳! 下载地址:http://hsk.oray.com/download/ 1.2 微信公众号:https://mp.weixin.qq. ...

  3. 硅谷课堂 12_公众号消息和微信授权登录

    硅谷课堂第十二天-公众号消息和微信授权登录 文章目录 硅谷课堂第十二天-公众号消息和微信授权登录 一.公众号普通消息 1.实现目标 2.消息接入 2.1.公众号服务器配置 2.2.验证来自微信服务器消 ...

  4. uni app和php开发微信登录代码,uniapp如何实现微信授权登录

    uniapp实现微信授权登录的方法:首先获取对应的appid和appsecret:然后在uniapp项目的manifest.json中进行APP SDK配置和模块权限配置.最后实现编码. 本教程操作环 ...

  5. thinkphp 微信授权登录 以及微信实现分享

    <?php namespace app\wechat\controller; use think\Controller; use think\Request; /** * 微信授权登录类 * U ...

  6. code换取微信openid_微信授权登录开发的两种方式

    本文主要针对微信公众号(公众平台的开发) 首先理解一个概念:OAuth: OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表), ...

  7. Java版本微信授权登录(升级版)

    前面写了一遍文章<Java版本微信授权登录(测试版)>,可以当做入门的基础文章,这里继续做一点深入,主要解决的是,如何在本地开发中微信授权以后跳转到本地启动的项目中. 我们知道了微信公众平 ...

  8. android友盟微信授权登录清除,【转载】Android友盟SDK微信授权登录接入

    微信授权登录接入需要先到微信开放平台申请好应用的APPID,交纳300大洋费用得到授权登录权限后才能使用,此处不再赘述. 接入的两种方式 -- 微信SDK接入:使用微信官方SDK接入,需要分" ...

  9. uniapp开发h5微信授权登录(详细教程)

    uniapp开发h5微信授权登录 文章目录 uniapp开发h5微信授权登录 前言 一.前期准备--申请测试账号 二.正式开发--前端代码 三.打包发布 总结 前言 我也是第一次做h5授权微信登录,网 ...

  10. springboot微信授权登录

    水平有限!实现方法直接找的网上的以为大神所编写的api来实现,这里主要是记录一下自己实现的过程.具体方法请参考网址:https://github.com/liyiorg/weixin-popular, ...

最新文章

  1. Webserver管理系列:11、注意默认的隐含共享
  2. MySql数据备份与恢复
  3. c语言 goto 跳出循环,goto语句可以跳出循环.ppt
  4. 变化的和不变的。。。(2004版)
  5. Python调用C语言
  6. Redis之Redis内存模型
  7. Android 应用开发(41)---EditText(输入框)详解
  8. 计算机一级重点知识,计算机一级MSOffice考试重点:数制的基本概念
  9. 安装hdfs集群的具体步骤
  10. centos免密登录
  11. CollabNet Subversion Edge 安裝筆記 (1):基本安裝設定篇
  12. discuz是如何判断手机端访问的
  13. 雷电模拟器打开应用权限_雷电模拟器超级用户权限怎么设置,是什么,怎么关闭【获取超级用户权限】通知提示,如何自动允许...
  14. 在线JSON格式化美化
  15. 美通社日历 | 媒体关注、会展信息、企业财报发布,节假日备忘(8月3日—8月9日)...
  16. 刚刚!核电老将俞培根晋升东方电气集团董事长
  17. 2019牛客暑期多校训练营(第九场)H-Cutting Bamboos(主席树)
  18. HDU 6078 Wavel Sequence
  19. 从小白到鹅厂的通关秘籍(附简历讲解与部分面试题)
  20. 华硕笔记本升级固态SSD过程

热门文章

  1. 【002】基于51单片机的电子万年历proteus仿真设计
  2. Android 高仿美团外卖详情页
  3. 数字化转型如何执行?
  4. 长沙电销机器人排名_长沙电销机器人公司招聘
  5. Java项目开始前必要的七大准备工作,少一步你都得重头开始写
  6. 【教程】Marvell 88W8686 WiFi模块驱动程序的编写(一)
  7. 微信小程序获取实时天气
  8. QT 之绘图进阶: 图片绘图类QPixmap、QImage、QPicture
  9. p图你还在用ps么 程序员该怎么P图
  10. 最佳工程实践—思维利器OmniGraffle