首先我的思路是这样的:①接收从客户端接收过来的数据(密码,用户名,邮箱)

           ②将密码进行MD5加密,然后将信息用"_"连接起来(用于后面分解)

           ③将信息交个一个工具类中实现生成邮件信息和发送邮件(Action类提供的信息是加密后的密码和用户名和邮箱组成的一个长字符串)

           ④在之前说过的那个实现生成邮件信息和发送邮件的工具类用到了另外一个工具类(这里说明一下我们的激活连接是由"http://"+"ip地址"+":/端                  口"+"/Action"+"后面的信息"组成的),所以我们这里还缺一个获取真实的IP地址,后面有帖代码

           ⑤点击在Action类里面经过一些验证就成功注册写入数据库(里面的一些细节就不用说的)

先上代码,这是我的一个测试类Action,.......好吧这不重要,

package com.MailActive;

import com.CommonUtils.CommomUtils;
import com.InterceptorPrivilege.Employee;
import com.InterceptorPrivilege.EmployeeService;
import com.Utils.commonUtils.Base64DE;
import com.Utils.commonUtils.JavaMailActive;
import com.opensymphony.xwork2.ModelDriven;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.struts2.ServletActionContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.stereotype.Controller;
import sun.misc.BASE64Decoder;

import javax.servlet.http.HttpServletRequest;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.util.Enumeration;

/**
* Created by etund on 2014/10/29.
*/
@Controller
@Scope("prototype")
public class RegisterAction implements ModelDriven<Employee>{

@Autowired
private EmployeeService employeeService;
private Employee model;
private String register;

public String getRegister() {
return register;
}

public void setRegister(String register) {
this.register = register;
}

@Autowired
private JavaMailActive javaMailActive;

public String createMail() throws Exception{
// 接收并封装数据
// String user49f290d6e8459c53f31f97de37921086 = model.getPassword()+"_"+model.getUsername();
String password = model.getPassword();
String username = model.getUsername();
String email = model.getEmail();
// BASE64加密
password = DigestUtils.md5Hex(password);
register = password+"_"+username+"_"+email;
System.out.println(register+"===========register=============");
// 最后用一个字符串验证是否是当初注册的那个用户
// 把加密后的信息加入邮件
javaMailActive.MailActive(register, email);
// 发送邮件
return "createMail";
}

public String confirmMail(){
String[] info = new String[3];
info = register.split("_");
model.setPassword(info[0]);
model.setUsername(info[1]);
model.setEmail(info[2]);
employeeService.save(model);
System.out.println(model.toString());
return "confirmMail";
}
@Override
public Employee getModel() {
if(model==null){
model = new Employee();
}
return model;
}
}

//接下来的介绍两个工具类

//这是实现封装邮件信息和创建邮件的类

package com.Utils.commonUtils;

import com.CommonUtils.CommomUtils;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.MailMessage;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import javax.annotation.Resource;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.util.Properties;

/**
* Created by etund on 2014/10/29.
*/
@Component
public class JavaMailActive {
@Autowired
private JavaMailSenderImpl mailSender;

public void MailActive(String register, String email) {
try {
System.out.println(mailSender);
System.out.println(mailSender.getUsername());
// href 有IP地址+:8887+动作
String ip = CommomUtils.getRealIp();
//建立邮件消息,发送简单邮件和html邮件的区别
MimeMessage mailMessage = mailSender.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage);
messageHelper.setFrom(mailSender.getUsername());

messageHelper.setTo(email);
messageHelper.setSubject("点击下面信息激活你的账号");
// ?register="+register
String href = "http://"+ip+":8887"+"/mailActive_confirmMail.do?register="+register;
System.out.println(href + "---------");
messageHelper.setText("<html><body><a href = " + href + ">点击下面链接激活" + href + "</a></body></html>", true);
Properties properties = new Properties();
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.timeout", "25000");
mailSender.send(mailMessage);
} catch (MessagingException e) {
e.printStackTrace();
}
}
}

//这是得到IP地址的类

public static String getRealIp() {
try {
String localip = null;// 本地IP,如果没有配置外网IP则返回它
String netip = null;// 外网IP

Enumeration<NetworkInterface> netInterfaces =
NetworkInterface.getNetworkInterfaces();
InetAddress ip = null;
boolean finded = false;// 是否找到外网IP
while (netInterfaces.hasMoreElements() && !finded) {
NetworkInterface ni = netInterfaces.nextElement();
Enumeration<InetAddress> address = ni.getInetAddresses();
while (address.hasMoreElements()) {
ip = address.nextElement();
if (!ip.isSiteLocalAddress()
&& !ip.isLoopbackAddress()
&& ip.getHostAddress().indexOf(":") == -1) {// 外网IP
netip = ip.getHostAddress();
finded = true;
break;
} else if (ip.isSiteLocalAddress()
&& !ip.isLoopbackAddress()
&& ip.getHostAddress().indexOf(":") == -1) {// 内网IP
localip = ip.getHostAddress();
}
}
}

if (netip != null && !"".equals(netip)) {
return netip;
} else {
return localip;
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}

明天继续更新,今天还有事做

S2SH邮件注册激活后注册成功的更多相关文章

  1. OpenCores注册步骤和成功提交

    一  OpenCores 网站简介,这个是全世界最大的FPGA开源IP核网站.由于最近在学习USB2.0host control IP,所以想去网上下载相关的IP例程学习.通过搜索发现,有两个网站十分 ...

  2. springboot 注册服务注册中心(zk)的两种方式

    在使用springboot进行开发的过程中,我们经常需要处理这样的场景:在服务启动的时候,需要向服务注册中心(例如zk)注册服务状态,以便当服务状态改变的时候,可以故障摘除和负载均衡. 我遇到过两种注 ...

  3. spring cloud eureka注册原理-注册失败填坑

    写在前面 我们知道Eureka分为两部分,Eureka Server和Eureka Client.Eureka Server充当注册中心的角色,Eureka Client相对于Eureka Serve ...

  4. spring cloud系列教程第八篇-修改服务名称及获取注册中心注册者的信息

    spring cloud系列教程第八篇-修改服务名称及获取注册中心注册者的信息 本文主要内容: 1:管理页面主机名及访问ip信息提示修改 2:获取当前注册中心的服务列表及每个服务对于的服务提供者列表 ...

  5. [C#反编译教程]001.Reflector.NET反编译工具 v8.5绿色版+注册机+注册教程

    截图 下载地址 Reflector.NET反编译工具 v8.5绿色版+注册机 下载地址:http://pan.baidu.com/s/1mgN1Cpi 密码:mx19 简介 .NET Reflecto ...

  6. Dubbo系列之 (二)Registry注册中心-注册(1)

    引导 dubbo的服务的注册与发现,需要通过第三方注册中心来协助完成,目前dubbo支持的注册中心包括 zookeeper,consul,etcd3,eureka,nacas,redis,sofa.这 ...

  7. Dubbo系列之 (二)Registry注册中心-注册(2)

    引导 本章主要介绍下AbstractRegistry.FailbackRegistry的作用和源码. AbstractRegistry 首先,直接引出这个类的作用,该类主要把服务提供者信息缓存本地文件 ...

  8. 注册Goole 账户 成功注册

    注册谷歌邮箱等Google帐号时提示:此电话号码无法用于进行验证怎么办? 相信很多网友在注册Google帐号的时候需要手机号码验证,比如在遇到过注册Google Gmail到最后一步“验证您的帐号” ...

  9. 这两天老是有兄弟问到Vue的登陆和注册,登陆成功留在首页,没有登录回到登录页面,现在我用最简单实用的方法实现(两分钟技就看懂)

    其实登录注册,并且登录一次保持登录的状态,是每个项目都需要实现的功能. 网上也有很多的方法,不过,不是通俗易懂,在这里说一下我自己的方法,非常简单实用核心就是用localStorage存.取数据,这样 ...

随机推荐

  1. css3怎么隐藏dom:4种方法

    1.display:none; 2.position:absolute; left:-99999px; 3.visibility:hidden; 4.opacity:0;

  2. Swift与Objective-C的兼容“黑魔法”:@objc和Dynamic

    Cocoa框架早已烙上了不可磨灭的OC印记,而无数的第三方库都是用OC写成的,这些积累无论是谁都不能小觑.苹果采取了允许开发者在同一个项目中同时使用Swift和OC进行开发的做法,但要想实现互通,又需 ...

  3. RESTheart安装与设置

    作者:Maurizio Turatti, 最后在Feb 25, 2016时被 Andrea Di Cesare更新 安装与设置 1. 快速开始 Docker Vagrant Bare metal 2. ...

  4. 如何通过SNMP的OID识别不同厂商的设备

    众所周知,SNMP作为通用的网络协议常用于系统监控之中,那么如何借助SNMP来识别不同厂商的设备呢? 事实上,在SNMP的OID树状图中专门有一个节点用于识别各不同的厂商,这个节点是: iso(1)  ...

  5. Spring MVC注解冲突

    SpringMVC+MyBatis - 7 Spring自动扫描注解类的冲突问题 http://www.blogjava.net/crazycy/archive/2014/07/12/415738.h ...

  6. 【HDU 1828】 Picture (矩阵周长并,线段树,扫描法)

    [题目] Picture Problem Description A number of rectangular posters, photographs and other pictures of ...

  7. 【UVA 1380】 A Scheduling Problem (树形DP)

    A Scheduling Problem   Description There is a set of jobs, say x1, x2,..., xn <tex2html_verbatim_ ...

  8. http://jinnianshilongnian.iteye.com/blog/1996071

    http://jinnianshilongnian.iteye.com/blog/1996071 http://my.oschina.net/jkcui/blog/388400 http://tian ...

  9. Python类的基础入门知识

    http://www.codesky.net/article/201003/122860.html首先第一点,你会发现Python Class的定义中有一个括号,这是体现继承的地方. Java用ext ...

  10. IP 碎片重组

    IP 碎片重组 内核中的IP重组函数. struct sk_buff * ip_defrag(struct sk_buff * skb, u32 user) { ...... //如果内核范围超出限制 ...