java邮箱激活

2023-05-16

一、分析:

1:先从前端接收到一个邮箱帐号,由于鲁棒性的要求,在发送邮箱之前邮箱格式必须正确!!不然的话第一发送不了,第二会发生错误,出现异常。所以,先检验邮箱格式

2:然后配置发送端邮箱还有接收端邮箱,开通smtp/pop3接口服务,一般faileConnected异常通常就是因为这个才出现的。

3:在user表中设置一个激活码还有激活状态字段,之后会详细讲。

4:之后创建一个类专门负责发送邮件到接收端,那么其中的内容该怎么写呢?要发送什么内容,才能从接收端服务器访问到本地服务器,并且跳到Controller做处理呢?下面只是举个列子,只作为参考,

注意:最好用localhost,不要用ip地址,因为换个地方就会报异常,另外细心点的也可以看出我的Controller名字就叫做toActive

http://localhost:8080/sh/registuser/toActive?email="+user.getEmail()

5:这个Controller该怎么处理呢?经过邮件发送过来的超链接,有个参数叫user.getEmail(),作用是根据这个email来查询数据库,看有没有这个用户,如果存在,并且这个用户的激活状态为1,说明就已经激活过了,不用再次激活。如果激活状态为0,说明还未激活,修改激活状态为1。

二、代码以及效果

1:前端
1.1检验邮箱格式
1.1.1基本代码部分:
<div>
<span>邮箱地址<label>*</label></span>
<input type="text" id="email" name="email" οnblur="send()"/><span id="error"></span><br/> 
</div>
  
1.1.2ajax部分:
<script type="text/javascript">  
  f unction send() {
$.post("registuser/checkEmail",{"email":$("#email").val()},function(result){
if(result=="true") {  
               document.getElementById("error").innerHTML = "用户名已被注册或者格式不正确!";  
            } else {  
               document.getElementById("error").innerHTML = "用户名可以使用";  
           }
 });
}    
</script>
2:后端
2.1检验邮箱格式并且发送邮件
2.1.1:检验邮箱
public String regist(User u,@RequestParam("agpassword") String agpassword,HttpServletRequest request){
if(u.getPassword().equals(agpassword)&&u.getEmail()!=null){
String code=UUID.randomUUID().toString().replace("-","");
u.setAcode(code);
u.setActive(1);
String regix = "[a-zA-Z_0-9]+@[a-zA-Z_0-9]{2,6}(\\.[a-zA-Z_0-9]{2,3})+";
//u.setAcode("qarguugnombhihci");
if(null==userService.listByEmail(u.getEmail())&&u.getEmail().matches(regix)){
userService.addUser(u);
MySendMailThread send = new MySendMailThread(u);
send.run();
HttpSession session = request.getSession();
session.setAttribute("rg",new Integer(2));
return "/registResult";
}else{
HttpSession session = request.getSession();
session.setAttribute("rg",new Integer(1));
return "/registResult";
}
}else{
HttpSession session = request.getSession();
session.setAttribute("rg",new Integer(3));
return "/registResult";
}
}
2.1.1:发送邮件的那个类,为了高效率,所以用了多线程技术
public class MySendMailThread extends Thread {
private User user = null;
public MySendMailThread(User user) {
this.user = user;
}
@Override
public void run() {
// 跟smtp服务器建立一个连接
Properties p = new Properties();
// 设置邮件服务器主机名
p.setProperty("mail.host", "smtp.qq.com");// 指定邮件服务器,默认端口 25
// 发送服务器需要身份验证
p.setProperty("mail.smtp.auth", "true");// 要采用指定用户名密码的方式去认证
// 发送邮件协议名称
p.setProperty("mail.transport.protocol", "smtp");
// 开启SSL加密,否则会失败
MailSSLSocketFactory sf = null;
try {
sf = new MailSSLSocketFactory();
} catch (GeneralSecurityException e1) {
e1.printStackTrace();
}
sf.setTrustAllHosts(true);
p.put("mail.smtp.ssl.enable", "true");
p.put("mail.smtp.ssl.socketFactory", sf);
// 开启debug调试,以便在控制台查看
// session.setDebug(true);也可以这样设置
// p.setProperty("mail.debug", "true");
// 创建session
Session session = Session.getDefaultInstance(p, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
// 用户名可以用QQ账号也可以用邮箱的别名
PasswordAuthentication pa = new PasswordAuthentication(
"发送端的邮箱名 ","授权码 ");
// 后面的字符是授权码,用qq密码不行!!
return pa;
}
});
try {
// 声明一个Message对象(代表一封邮件),从session中创建
MimeMessage msg = new MimeMessage(session);
// 邮件信息封装
// 1发件人
msg.setFrom(new InternetAddress("1249857183@qq.com"));
// 2收件人
msg.setRecipient(RecipientType.TO,new InternetAddress(user.getEmail()));
// 3邮件内容:主题、内容
msg.setSubject(user.getEmail() + ",欢迎注册购买雪橇账号,请点击链接激活账号");
// StringBuilder是线程不安全的,但是速度快,这里因为只会有这个线程来访问,所以可以用这个
StringBuilder sbd = new StringBuilder();
sbd.append(user.getEmail() + "<br/>欢迎!请确认此邮件地址以激活您的账号。<br/>");
sbd.append("<font color='red'><a href='http://localhost:8080/sh/registuser/toActive?email="
+user.getEmail()+ "'target='_blank'");
sbd.append(">立即激活</a></font><br/>");
sbd.append("或者点击下面链接:<br/>");
sbd.append("http://10.7.89.88:8080/sh/registuser/toActive?email="
+user.getEmail()+"'target='_blank'"+"<br/>");
sbd.append("这是一封自动发送的邮件;如果您并未要求但收到这封信件,您不需要进行任何操作。");
msg.setContent(sbd.toString(), "text/html;charset=utf-8");// 发html格式的文本
// 发送动作
Transport.send(msg);
System.out.println("给" + user.getEmail() + "发送邮件成功。");
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java邮箱激活 的相关文章

随机推荐

  • 建造者模式详解

    建造者模式 建造者模式 xff08 Bulider Pattern xff09 是将一个复杂对象的构建过程与它的实现表示分离 xff0c 使得同样的构建过程可以创建不同的表示 xff0c 属于创建型模式 使用创建者模式对于用户而言只需要制定
  • LAMP架构简述

    目录 一 LAMP架构简述 二 各组件作用 三 构建LAMP平台 3 1编译安装Apache httpd服务 3 1 1 关闭防火墙 xff0c 将安装Apache所需软件包转到 opt目录下 3 1 2 安装环境依赖包 3 1 3 设置安
  • SLF4J源码分析

    介绍 官网 xff1a http www slf4j org github xff1a https github com qos ch slf4j SLF4J xff08 Simple Logging Facade for Java xff
  • ssh指定密码登陆远程服务器

    1 ssh远程登录 ssh登录远程服务器 xff0c 一般都通过ssh key方式免密码登陆 xff1b 也可以指定用户名 密码来登陆远程服务器 xff1b 如下 xff1a ssh IP l user p port 或者 ssh user
  • U盘制作ubuntu18.04.6系统安装盘

    U盘制作ubuntu18 04 6系统安装盘 1 1 下载镜像文件 ubuntu 18 04 6 desktop amd64 iso 2 下载u盘制作工具rufus3 15 3 运行rufus3 1 制作unbutun18 04启动U盘 3
  • Gradle全版本资源下载

    使用说明 1 xff0c 官网下载地址https services gradle org distributions 不同版本更改版本号即可 xff0c 官网下载不成功的 xff0c 嫌官网下载速度慢的 xff0c 可以直接在这里下载 2
  • .sh文件无法运行--权限问题

    下载了 sh后缀名脚本 结果双击安装文件时是用gedit打开 试着从终端打开 xff0c 提示 xff1a command not found 最后发现原来是文件的打开权限没有钩选 允许以程序执行文件 在图形界面下无法修改权限 xff0c
  • Android 遇坑之路及解决方案

    一 在状态栏之上弹自定义吐司 1 需求 xff1a UI设计师设计的原型图是在状态栏之上的位置弹一个自定义吐司 xff0c 我们的应用内全部都是沉浸式状态栏 xff0c 将状态栏隐藏掉了的 2 解决方案 xff1a 首先给toast设置ma
  • SCRUM框架包括3个角色、3个工件、5个活动、5个价值

    转自http www scrumcn com agile scrum knowledge library scrum html SCRUM 是一个用于开发和维持复杂产品的框架 Scrum 是一个用于开发和维持复杂产品的框架 xff0c 是一
  • rpm安装mysql报libc.so.X(GLIBC_XXX)(64bit) is needed by

    这个原因和linux本身自带的glibc版本不符合安装要求 xff0c 可以对glibc进行升级 解压 xff1a tar xvf glibc XXX tar gz进入glibc 2 14目录 xff1a cd glibc XXXX创建bu
  • rpm安装mysql

    引言 之前安装mysql都是直接使用tar包安装 xff0c 没有用过rpm xff0c 今天搞了一台腾讯云服务器 xff0c 所以想尝试一种新的安装mysql的方式 xff0c 下面分享安装过程和遇到的问题 第一 下载rpm包 官网地址
  • SpringBoot整合多数据源(Druid+Mybaties)

    SpringBoot整合多数据源 xff08 Druid 43 Mybaties xff09 1 添加pom文件 二 改yml 三 业务代码 1 mapper层 xff0c 注意要将不同库的Mapper xml文件分别存放不同的目录 xff
  • 浏览器 中设置断点调试

    1 xff1a 点击F12进入代码调试页面 xff0c 然后点击source xff0c 点击需要设置断点的地方 xff0c F5刷新 2 xff1a F11向下面执行一步 3 xff1a F10向上面执行一步
  • SpringBoot整合Mybaties

    一 引入pom 1 引入jdbc starter xff0c mybatis starter xff0c mysql connector 二 改yml yml的配置如下 xff1a 千万注意那块儿mapper的映射路径的后缀必须是Mappe
  • 国内下载centos的镜像网站大全

    http isoredirect centos org centos 7 isos x86 64 https blog 51cto com 14260602 2441705
  • Shiro实战以及源码解析

    一 明白什么是认证和授权 从百度百科上理解的 xff0c 感觉非常通俗易懂 你要登机 xff0c 你需要出示你的 passport 和源 ticket xff0c passport 是为了证明你张三确实是你百张三 xff0c 这就是 认证
  • 谈谈你对深拷贝和浅拷贝的理解-Java

    一 区别 1 深拷贝中既要拷贝基本数据类型也要拷贝引用类型的数据 xff0c 也就是说拷贝一份完全一样的对象 2 浅拷贝中之拷贝基本数据类型 xff0c 引用类型的数据只是拷贝了原来的引用 xff0c 并没有把引用的数据也拷贝 二 方式 1
  • 谈谈你对依赖注入(DI)和控制反转(IoC)的理解

    学习过Spring框架的人一定都会听过Spring的IoC 控制反转 DI 依赖注入 这两个概念 xff0c 对于初学Spring的人来说 xff0c 总觉得IoC DI这两个概念是模糊不清的 xff0c 是很难理解的 xff0c 今天和大
  • Guava Cache应用以及源码解析

    Guava Cache的学习 https github com google guava 一 Guava的适用性 二 两种缓存的加载 1 第一种CacheLoader方式 xff0c 返回的是LoadingCache对象 xff0c 这个对
  • java邮箱激活

    一 分析 xff1a 1 xff1a 先从前端接收到一个邮箱帐号 xff0c 由于鲁棒性的要求 xff0c 在发送邮箱之前邮箱格式必须正确 xff01 xff01 不然的话第一发送不了 xff0c 第二会发生错误 xff0c 出现异常 所以