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

           ②将密码进行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. 批量执行sql语句

    基本使用 $sqls="sql语句1;sql语句2;sql语句n"; 或 $sqls="insert into xx;";  $sqls.="inse ...

  2. php设计模式:工厂模式

    php设计模式:工厂模式 意图: 定义一个用于创建对象的接口,让子类决定实例化哪一个类. 工厂模式实现: 工厂模式中任何创建对象的工厂类都要实现这个接口,实现接口的方法体中都要实现接口中的方法,它声明 ...

  3. ECharts使用记

    系统开发厂商一直都使用基于Flash的图表解决方案,例如Fushioncharts.本人也曾略做研究,当时对js不熟,只能采用静态xml方式,颇为繁琐. 自从了解了html5的新特性,意识到基于Can ...

  4. Python全栈开发之MySQL(三)视图,存储过程触发器,函数,事务,索引

    一:视图 1:什么是视图? 视图是指存储在数据库中的查询的SQL语句,具有简单.安全.逻辑数据独立性的作用及视点集中简化操作定制数据安全性的优点.视图包含一系列带有名称的列和行数据.但是,视图并不在数 ...

  5. gcc向待编译源文件传入参数的方法

    gcc有两种方法向待编译源文件传入参数 第一种 利用–Dmacro=name 编译选项,详见gcc -D选项 第二种 利用链接脚本(*.lds)传入参数,类似于ADS的编译器参数可以被待编译源文件调用 ...

  6. 实现CodeFirst自动数据迁移无需命令

    本主题假设您掌握了实体框架中 Code First 迁移的基本知识. 借助自动迁移功能,您无需对您所做的每一个更改都在程序包管理器控制台中运行Update-Database 命令. 启用迁移 只需执行 ...

  7. dustjs

    http://akdubya.github.io/dustjs/ https://github.com/linkedin/dustjs

  8. 注解方式传LIST@RequestBody

    在SpringMVC中使用注解方式传List类型的参数时,要使用@RequestBody注解而不是@RequestParam注解 //创建文件夹 @RequestMapping(value=" ...

  9. Xcode报错:Unexpected '@' in program

    今天犯了个很弱的错误,就是当定义个一个@property时,编译器直接报错:Unexpected '@' in program 原因是把定义的属性写在.m文件中了,改到.h文件中就好了... 以后大家 ...

  10. 使用VisualStudio2010创建C#应用程序

    打开VisualStudio2010,选择“文件”——“新建”——“项目”菜单命令.调出“新建项目”对话框.