S2SH邮件注册激活后注册成功

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

           ②将密码进行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);
}
}

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

 

posted @ 2014-10-29 23:36  Etund  阅读(167)  评论(0编辑  收藏  举报