发表于: 2020-09-19 21:55:11

0 1425


今天完成的事情:

完成短信 ,邮件发送

昨天没成功是因为容联云需要实名认证



短信jsp页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>手机注册</title>
<body>
<strong><p>手机号注册</p></strong>
<div "color:#6a8759;">"contain" >
<form action="/RegisterByPhone" method=POST >
请输入用户名:<br>
<input type="text" name="username" id="username" placeholder="请输入小于16位的用户名maxlength="16">
${NameError}
<br>
请输入密码:<br>
<input type="text" name="password" id="pass" placeholder="请输入小于16位的密码"  maxlength="16">
${PassError}
<br>
请再次确认密码:<br>
<input type="text" name="againPassword" id="againPass" placeholder="请再次输入密码maxlength="16" >
${TwoPassError}
<br>
手机号:<br>
<input type="text" name="phone" id="phone2" placeholder="请输入11位手机号maxlength="11">
${PhoneError}
<br>
请输入收到的验证码:<br>
<input type="text" name="yzm" id="yzm" placeholder="请输入4位验证码maxlength="4">
<input type="button" name="" id="verCodeBtn" value="获取验证码onclick="settime(this);"/>
${YzmError}
<br>
<br>
<input type="submit" value="注册">
</form>
</div>
<br>

<script src="http://www.lanrenzhijia.com/ajaxjs/jquery.min.js"></script>
<script>
//验证码
var counts = 120;
function settime(val) {
if(counts == 0) {
val.removeAttribute("disabled");
val.value = "获取验证码";
counts = 120;
return false;
} else {
val.setAttribute("disabled", true);
val.value = "重新发送(+ counts + "";
counts--;
}
setTimeout(function() {
settime(val);
}, 1000);
}

//获取验证码
$(function(){
$("#verCodeBtn").click(function() {
var userinfo = {
"UserPhoneNum": $("input[name='phone']").val()
}

$.ajax({
url: "/sendPhoneYzm",
data: userinfo,
type: "post",
});
});
})
</script>

</hr>
<a href="/RegisterByEmailPage">如果你想使用邮箱注册,请点击此处</a>
<br>
<a href="/login">已有账号?点此直接登录</a>
</body>
</html>




发送短信工具类


spring管理账号密码


properties文件

serverIp =app.cloopen.com
serverPort =8883
accountSId =8aaf07087249953401726b199a7a110a
accountToken =241c0dcb24e04fc48ded38486f33fa81
appId =8aaf07087249953401726b199b451110


bean(set方法注入)

<!--    Spring管理短信接口的bean对象-->
   <bean id="sendMessage" class="com.mb.util.SendMessageUtil">
       <property name="serverIp" value="${serverIp}"></property>
       <property name="serverPort" value="${serverPort}"></property>
       <property name="accountSId" value="${accountSId}"></property>
       <property name="accountToken" value="${accountToken}"></property>
       <property name="appId" value="${appId}"></property>
   </bean>


发短信工具类

package com.mb.util;

import com.cloopen.rest.sdk.BodyType;
import com.cloopen.rest.sdk.CCPRestSmsSDK;
import lombok.Data;
import org.apache.log4j.Logger;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import javax.print.DocFlavor;
import java.util.HashMap;
import java.util.Set;
import java.util.concurrent.TimeUnit;


public class SendMessageUtil {

   @Autowired
   RedisTemplate redisTemplate;

   private static Logger logger = Logger.getLogger(SendMessageUtil.class);

   private String serverIp;
   private String serverPort;
   private String accountSId;
   private String accountToken;
   private String appId;

    //set方法注入
   public void setServerIp(String serverIp) {
       this.serverIp = serverIp;
   }

   public void setServerPort(String serverPort) {
       this.serverPort = serverPort;
   }

   public void setAccountSId(String accountSId) {
       this.accountSId = accountSId;
   }

   public void setAccountToken(String accountToken) {
       this.accountToken = accountToken;
   }
   public void setAppId(String appId) {
       this.appId = appId;
   }


   public void sendTelCode(String tel) {

       logger.info("输入的手机号是"+tel);

       logger.info("准备放入SDK的参数为========="+serverIp+serverPort+accountSId+accountToken+appId);

       CCPRestSmsSDK sdk = new CCPRestSmsSDK();
       // 初始化服务器地址和端口,格式如下,服务器地址不需要写https:
       sdk.init(serverIpserverPort);
       // 初始化主帐号和主帐号TOKEN
       sdk.setAccount(accountSIdaccountToken);
       // 初始化应用ID
       sdk.setAppId(appId);

       logger.info("生成的SDK==========="+sdk);

       // 1-电话作为参数输入
       // 2-模板ID
       String templateId = "1";
       logger.info("模板Id是:+ templateId);

       // 3-随机四位验证码
       int yzm = (int) ((Math.random() 89991000);

       //验证码转化为Strig类型
       String pyzm = String.valueOf(yzm);
       logger.info("验证码是:+ pyzm);

       String redisResult = (String)redisTemplate.opsForValue().get(tel);
       logger.info("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"+redisResult);

       if(redisResult == null) {
           // 将手机号为key,验证码为value,存储缓存,设置过期时间2分钟
           try {
               redisTemplate.opsForValue().set(telpyzm120TimeUnit.SECONDS);
               logger.info("手机号,验证码放入缓存成功");
           catch (Exception e) {
               logger.info("手机号,验证码放入缓存失败");
           }
       }else {
           try {
               redisTemplate.delete(tel);
               logger.info("删除原有缓存");
               redisTemplate.opsForValue().set(telpyzm120TimeUnit.SECONDS);
               logger.info("新增一个缓存");
           }catch (Exception e){
               logger.info("缓存失败-原因:"+e.toString());
           }
       }

       //设置模板中的2个参数  第一个为验证码yzm   第二个为2  2分钟内输入验证码)
       String[] datas= new String[]{pyzm,"2"};

       logger.info("准备传入的参数"+tel+"==="+templateId+"====="+datas);

       //  发送短信 获取发送结果
       HashMap<StringObjectresult = sdk.sendTemplateSMS(tel,templateId ,datas);
       logger.info("短信验证发送结果 = " + result);

       // statusCode状态码为000000,即为发送成功
       if("000000".equals(result.get("statusCode"))){
           // 正常返回输出data包体信息(map
           HashMap<String,Objectdata = (HashMap<StringObject>) result.get("data");
           // 获取data中的key
           Set<StringkeySet = data.keySet();
           // 遍历key,通过key得到对应的值,输出
           for(String key:keySet){
               Object object = data.get(key);
               logger.info(key +" = "+object);
           }
       }else{
           //异常返回输出错误码和错误信息
           logger.info("错误码=" + result.get("statusCode"+错误信息= "+result.get("statusMsg"));
       }
   }
}



controller 短信注册


/**
 * @Author: TianBo
 * @Description: 接收表单参数,手机新用户注册
 @Date: 2020/6/4
 * @Param postinfo: 自定义JAVA对象
 @Param request: 用于跳转至jsp页面
 @return: java.lang.String
 **/

@RequestMapping(value "/RegisterByPhone"method = RequestMethod.POST)
public String registerByPhone(postinfo postinfo,HttpServletRequest request) {

   logger.info("传入参数+ postinfo);
   String u = postinfo.getUsername();
   String p = postinfo.getPassword();
   String pp = postinfo.getAgainPassword();
   String phone = postinfo.getPhone();
   String InputYzm = postinfo.getYzm();

   logger.info("用户输入的注册信息:"名字:+ u + 密码:+ p + 第二个密码:+ pp + 手机号:+ phone + 验证码:+ InputYzm);

   //判断输入的用户名是否为空 或者  空字符
   if (u != null && u != "") {
       logger.info("用户名不为空");
   else {
       String error = "用户名不能为空,请重新输入用户名";
       logger.info("用户名不能为空,请重新输入用户名");
       request.setAttribute("NameError"error);
       return "phoneRegister";
   }

   if (p != null && p != "") {
       logger.info("密码不为空");
   else {
       String error = "用户密码不能为空!";
       logger.info("用户密码不能为空!");
       request.setAttribute("PassError"error);
       return "phoneRegister";
   }

   if (pp != null && pp != "") {
       logger.info("重复密码不为空");
   else {
       String error = "重复密码不能为空!";
       logger.info("重复输入密码不能为空!");
       request.setAttribute("PassError"error);
       return "phoneRegister";
   }

   if (p.equals(pp)) {
       logger.info("两次输入密码一致");
   else {
       String error = "两次输入密码不一致,请重新输入";
       logger.info("两次输入密码不一致");
       request.setAttribute("TwoPassError"error);
       return "phoneRegister";
   }

   //判断数据库中是否有此用户名
   MyAccount NameAccount = my.selectAccountByName(u);
   logger.info("根据用户名查询出的用户为+ NameAccount);

   //如果查询出的账户为空(代表用户不存在),才能注册
   if (ObjectUtils.isEmpty(NameAccount)) {
       logger.info("此用户名不存在,可以注册!");
   else {
       String error = "用户名已经存在,请更换用户名注册或直接登录";
       logger.info("用户名已经存在");
       request.setAttribute("NameError"error);
       return "phoneRegister";
   }

   if (phone != null && phone != "") {
       logger.info("手机号不为空,可以注册");
   else {
       String error = "手机号为空,请重新输入!";
       logger.info("手机号为空");
       request.setAttribute("PhoneError"error);
       return "phoneRegister";
   }

   MyAccount PhoneAccount = my.selectAccountByPhone(phone);
   logger.info("根据手机号查询出的用户为+ PhoneAccount);

   //如果查询出的账户为空(代表用户不存在),才能注册
   if (ObjectUtils.isEmpty(PhoneAccount)) {
       logger.info("手机号未被注册过,可以注册!");
   else {
       String error = "手机号已经被注册,请更换手机号或直接登录";
       logger.info("手机号已经被注册");
       request.setAttribute("PhoneError"error);
       return "phoneRegister";
   }

   if (InputYzm != null && InputYzm != "") {
       logger.info("输入的验证码不为空");
   else {
       String error = "验证码为空,请输入验证码";
       logger.info("输入的验证码为空");
       request.setAttribute("YzmError"error);
       return "phoneRegister";
   }


   //获取缓存中的验证么
   String GetRedisYzm = (StringredisTemplate.opsForValue().get(phone);

   logger.info("获取到的缓存里的验证码是"+GetRedisYzm);

   if (GetRedisYzm != null) {
       logger.info("缓存不为空,验证码还未到期");

       if (InputYzm.equals(GetRedisYzm)){
           logger.info("验证码相同");

               MyAccount account = new MyAccount();
               account.setUsername(u);
               account.setPassword(p);
               account.setPhone(phone);
               logger.info("要注册的用户数据为:+ account);

               try{

               //插入数据
               int id = my.insertAccount(account);
               logger.info("注册完毕生成的用户id"+id);
               logger.info("注册成功!");
               //返回到登录页面
               return "login";

           catch (Exception e) {
               String error = "注册失败,请再试试";
               logger.info("注册失败,请重新输入");
               request.setAttribute("error"error);
               return "phoneRegister";
           }

       } else {
           String error = "验证码错误,请重新输入!";
           logger.info("验证码错误");
           request.setAttribute("YzmError"error);
           return "phoneRegister";
       }
   } else {
       String error = "验证码为空,请重新输入!";
       logger.info("验证码为空");
       request.setAttribute("YzmError"error);
       return "phoneRegister";
   }

}






SendCloud邮件


邮件jsp页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>邮箱注册</title>
<body>
<strong><p>邮箱注册</p></strong>
<div "color:#6a8759;">"contain" >
<form action="/RegisterByEmail" method=POST >
请输入用户名:<br>
<input type="text" name="username" id="username" placeholder="请输入小于16位的用户名maxlength="16">
${NameError}
<br>
请输入密码:<br>
<input type="text" name="password" id="pass" placeholder="请输入小于16位的密码"  maxlength="16">
${PassError}
<br>
请再次确认密码:<br>
<input type="text" name="againPassword" id="againPass" placeholder="请再次输入密码maxlength="16" >
${TwoPassError}
<br>
邮箱:<br>
<input type="text" name="email" id="email2" placeholder="请输入您的邮箱">
${EmailError}
<br>
请输入收到的验证码:<br>
<input type="text" name="yzm" id="yzm" placeholder="请输入4位验证码maxlength="4">
<input type="button" name="" id="verCodeBtn" value="获取验证码onclick="settime(this);"/>
${YzmError}
<br>
<br>
<input type="submit" value="注册">
</form>
</div>
<br>

<script src="http://www.lanrenzhijia.com/ajaxjs/jquery.min.js"></script>
<script>
//验证码
var counts = 120;
function settime(val) {
if(counts == 0) {
val.removeAttribute("disabled");
val.value = "获取验证码";
counts = 120;
return false;
} else {
val.setAttribute("disabled", true);
val.value = "重新发送(+ counts + "";
counts--;
}
setTimeout(function() {
settime(val);
}, 1000);
}

//获取验证码
$(function(){
$("#verCodeBtn").click(function() {
var userinfo = {
"UserEmailNum": $("input[name='email']").val()
}

$.ajax({
url: "/sendEmailYzm",
data: userinfo,
type: "post",
});
});
})
</script>

</hr>
<a href="/RegisterByPhonePage">如果你想使用手机注册,请点击此处</a>
<br>
<a href="/login">已有账号?点此直接登录</a>
</body>
</html>


用spring管理账号密码


email.properties

URL=https://api.sendcloud.net/apiv2/mail/send

API_USER=tbtb_test_pVslgW

API_KEY=ZPE6CpBCT1mXJzTy


bean对象


<!--    Spring管理短信接口的bean对象-->
   <bean id="sendMail" class="com.mb.util.SendMailUtil">
       <constructor-arg name="url" value="${URL}"></constructor-arg>
       <constructor-arg name="apiUser" value="${API_USER}"></constructor-arg>
       <constructor-arg name="apiKey" value="${API_KEY}"></constructor-arg>
   </bean>


发邮件工具类

public class SendMailUtil {

   Logger logger = Logger.getLogger(SendMessageUtil.class);

   @Autowired
   RedisTemplate redisTemplate;

   private String url;

   private String apiUser;

   private String apiKey;

   public SendMailUtil(String urlString apiUserString apiKey) {
       this.url = url;
       this.apiUser = apiUser;
       this.apiKey = apiKey;
   }

   public void Send(String email) {

       logger.info("输入的邮箱为:"+email);
       //邮件标题
       String subject = "新用户注册";
       logger.info("邮件的主题为:"+subject);

       //随机生成4位数验证码
       int yzm = (int) ((Math.random() 89991000);
       //验证码转化为Strig类型e
       String eyzm = String.valueOf(yzm);
       logger.info("邮件验证码是:+ eyzm);

       //验证码有效期
       String limitTime="2";
       logger.info("邮件验证码的有效期为"+limitTime+"分钟");

       String html = "您的验证码是"+"["+eyzm+"]"+",请在"+limitTime+"分钟内输入!";
       logger.info("邮件的内容为:"+html);


       // 创建http客户端  (另一种方式:CloseableHttpClient httpclient = HttpClients.createDefault())
       HttpClient httpClient = HttpClientBuilder.create().build();
       // 创建post请求
       HttpPost httpPost = new HttpPost(url);


        /** 先取出key为邮件名的缓存
         如果没有缓存,就新增一个
         *如果有缓存,就删除之前的缓存,再新增
         */
       String EmailRedisResult = (String)redisTemplate.opsForValue().get(email);

      if(EmailRedisResult==null){
          try{
              redisTemplate.opsForValue().set(email,eyzm,120TimeUnit.SECONDS);
              logger.info("放入缓存成功");
          }catch (Exception e){
               logger.info("新增缓存失败"+e.toString());
          }
      }else {
           try{
               redisTemplate.delete(email);
               logger.info("删除原有缓存成功");
               redisTemplate.opsForValue().set(email,eyzm,120TimeUnit.SECONDS);
               logger.info("放入缓存成功");
           }catch (Exception e){
               logger.info("更新缓存失败"+e.toString());
           }
      }

       /**
        * 定义了一个list,该list的数据类型是NameValuePair(简单名称值对节点类型),
        这个代码用于Javaurl发送Post请求。在发送post请求时用该list来存放参数。
        */
       List<NameValuePairparams = new ArrayList<NameValuePair>();
       //API_USER
       params.add(new BasicNameValuePair("apiUser"apiUser));
       //API_KEY
       params.add(new BasicNameValuePair("apiKey"apiKey));
       //收件人地址多个地址使用 ; 分隔 ben@ifaxin.com;joe@ifaxin.com
       params.add(new BasicNameValuePair("to"email));
       //发件人地址建议from域名后缀与发信域名一致。
       params.add(new BasicNameValuePair("from""support@ifaxin.com"));
       //发件人名称
       params.add(new BasicNameValuePair("fromName""JnShu"));
       //邮件标题
       params.add(new BasicNameValuePair("subject"subject));
       //邮件内容
       params.add(new BasicNameValuePair("html"html));

       logger.info("向邮箱API传入的参数为"+params);

           try {
               // post请求是将参数放在请求体里面传过去的;这里将entity放入post请求体中
               httpPost.setEntity(new UrlEncodedFormEntity(params"UTF-8"));

               // 由客户端执行(发送)Post请求
               HttpResponse response = httpClient.execute(httpPost);

               //判定返回的reponse结果是否为   ok
               if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {

                   logger.info("发送状态:"+EntityUtils.toString(response.getEntity()));

               else {
                   System.err.println("error");
                   logger.info("未收到服务端返回的消息!");
               }

           }catch (UnhandledException e){
                   e.printStackTrace();
           }catch (IOException e) {
                   e.printStackTrace();
           }
       //释放底层的httpConnection,以便可以重用请求
       httpPost.releaseConnection();
       }
   }


controller层邮件注册

/**
    * @Author: TianBo
    * @Description: 接收表单参数,手机新用户注册
    @Date: 2020/6/4
    * @Param postinfo: 自定义JAVA对象
    @Param request: 用于跳转jsp页面
    @return: java.lang.String
    **/

   @RequestMapping(value "/RegisterByEmail"method = RequestMethod.POST)
   public String registerByEmail(postinfo postinfo,HttpServletRequest request) {

       logger.info("传入参数+ postinfo);
       String u = postinfo.getUsername();
       String p = postinfo.getPassword();
       String pp = postinfo.getAgainPassword();
       String email = postinfo.getEmail();
       String InputYzm = postinfo.getYzm();

       logger.info("用户输入的注册信息:"名字:+ u + 密码:+ p + 第二个密码:+ pp + 邮箱:+ email + 验证码:+ InputYzm);

       //判断输入的用户名是否为空 或者  空字符
       if (u != null && u != "") {
           logger.info("用户名不为空");
       else {
           String error = "用户名不能为空,请重新输入用户名";
           logger.info("用户名不能为空,请重新输入用户名");
           request.setAttribute("NameError"error);
           return "emailRegister";
       }

       if (p != null && p != "") {
           logger.info("密码不为空");
       else {
           String error = "用户密码不能为空!";
           logger.info("用户密码不能为空!");
           request.setAttribute("PassError"error);
           return "emailRegister";
       }

       if (pp != null && pp != "") {
           logger.info("重复密码不为空");
       else {
           String error = "重复密码不能为空!";
           logger.info("重复输入密码不能为空!");
           request.setAttribute("PassError"error);
           return "emailRegister";
       }

       if (p.equals(pp)) {
           logger.info("两次输入密码一致");
       else {
           String error = "两次输入密码不一致,请重新输入";
           logger.info("两次输入密码不一致");
           request.setAttribute("TwoPassError"error);
           return "emailRegister";
       }

       //判断数据库中是否有此用户名
       MyAccount NameAccount = my.selectAccountByName(u);
       logger.info("根据用户名查询出的用户为+ NameAccount);

       //如果查询出的账户为空(代表用户不存在),才能注册
       if (ObjectUtils.isEmpty(NameAccount)) {
           logger.info("此用户名不存在,可以注册!");
       else {
           String error = "用户名已经存在,请更换用户名注册或直接登录";
           logger.info("用户名已经存在");
           request.setAttribute("NameError"error);
           return "emailRegister";
       }

       if (email != null && email != "") {
           logger.info("邮箱号不为空,可以注册");
       else {
           String error = "邮箱号为空,请重新输入!";
           logger.info("邮箱号为空");
           request.setAttribute("EmailError"error);
           return "emailRegister";
       }

       MyAccount EmailAccount = my.selectAccountByEmail(email);
       logger.info("根据邮箱号查询出的用户为+ EmailAccount);

       //如果查询出的账户为空(代表用户不存在),才能注册
       if (ObjectUtils.isEmpty(EmailAccount)) {
           logger.info("邮箱号未被注册过,可以注册!");
       else {
           String error = "邮箱号已经被注册,请更换新邮箱或直接登录";
           logger.info("邮箱号已经被注册");
           request.setAttribute("EmailError"error);
           return "phoneRegister";
       }

       if (InputYzm != null && InputYzm != "") {
           logger.info("输入的验证码不为空");
       else {
           String error = "验证码为空,请输入验证码";
           logger.info("输入的验证码为空");
           request.setAttribute("YzmError"error);
           return "phoneRegister";
       }


       //获取缓存中的验证么
       String GetRedisYzm = (StringredisTemplate.opsForValue().get(email);

       logger.info("获取到的缓存里的验证码是"+GetRedisYzm);

       if (GetRedisYzm != null) {
           logger.info("缓存不为空,验证码还未到期");

           if (InputYzm.equals(GetRedisYzm)){
               logger.info("验证码相同");

               MyAccount account = new MyAccount();
               account.setUsername(u);
               account.setPassword(p);
               account.setEmail(email);
               logger.info("要注册的用户数据为:+ account);

               try{

                   //插入数据
                   int id = my.insertAccount(account);
                   logger.info("注册完毕生成的用户id"+id);
                   logger.info("注册成功!");
                   //返回到登录页面
                   return "login";

               catch (Exception e) {
                   String error = "注册失败,请再试试";
                   logger.info("注册失败,请重新输入");
                   request.setAttribute("error"error);
                   return "phoneRegister";
               }

           } else {
               String error = "验证码错误,请重新输入!";
               logger.info("验证码错误");
               request.setAttribute("YzmError"error);
               return "phoneRegister";
           }
       } else {
           String error = "验证码为空,请重新输入!";
           logger.info("验证码为空");
           request.setAttribute("YzmError"error);
           return "phoneRegister";
       }
   }
}



返回列表 返回列表
评论

    分享到