我们经常遇到在网站或者软件注册新用户时需要向我们的注册邮箱发送一封激活邮件,然后我们去邮箱点击激活连接后我们的用户名才能登陆,其过程是当我们注册成功后数据库已经存入该用户的相关信息,但是用户状态为不可用,所以这时候该用户名是不能正常使用的。因此系统需要向我们的注册邮箱发一封激活邮件,我们点击激活连接后系统会将数据库中用户状态字段更改为可用状态,至此用户激活成功,该用户可以正常使用。下面是实现过程:
为了方便起见我们还是编写一个发送邮箱工具类。
<span style="font-family:KaiTi_GB2312;font-size:18px;color:#333333;">package cn.itcast.shop.utils;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
/**
* 邮件发送工具类
* @author shx
*
*/
public class MailUitls {
/**
* 发送邮件的方法
* @param to :收件人
* @param code :激活码
*/
public static void sendMail(String to,String code){
/**
* 1.获得一个Session对象.
* 2.创建一个代表邮件的对象Message.
* 3.发送邮件Transport
*/
// 1.获得连接对象
Properties props = new Properties();
props.setProperty("mail.host", "localhost");
Session session = Session.getInstance(props, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("[email protected]", "111");
}
});
// 2.创建邮件对象:
Message message = new MimeMessage(session);
// 设置发件人:
try {
message.setFrom(new InternetAddress("[email protected]"));
// 设置收件人:
message.addRecipient(RecipientType.TO, new InternetAddress(to));
// 抄送 CC 密送BCC
// 设置标题
message.setSubject("来自官方激活邮件");
// 设置邮件正文:
message.setContent("<h1>官方激活邮件!点下面链接完成激活操作!</h1><h3><a href='http://192.168.24.162:8080/shop/user_active.action?code="+code+"'>http://192.168.24.162:8080/shop/user_active.action?code="+code+"</a></h3>", "text/html;charset=UTF-8");
// 3.发送邮件:
Transport.send(message);
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
sendMail("[email protected]","11111111111111");
}
}
</span>
Action:
<span style="font-family:KaiTi_GB2312;font-size:18px;color:#333333;"> /**
*
* 用户注册
*/
public String regist(){
userService.save(user);
this.addActionMessage("注册成功,情趣邮箱激活!");
return "msg";
}
/**
* 用户激活的方法
*/
public String active() {
// 根据激活码查询用户:
User existUser = userService.findByCode(user.getCode());
// 判断
if (existUser == null) {
// 激活码错误的
this.addActionMessage("激活失败:激活码错误!");
} else {
// 激活成功
// 修改用户的状态
existUser.setState(1);
existUser.setCode(null);
userService.update(existUser);
this.addActionMessage("激活成功:请去登录!");
}
return "msg";
}</span>
<span style="font-family:KaiTi_GB2312;font-size:18px;color:#333333;"> // 业务层完成用户注册代码:
public void save(User user) {
// 将数据存入到数据库
user.setState(0); // 0:代表用户未激活. 1:代表用户已经激活.
String code = UUIDUtils.getUUID()+UUIDUtils.getUUID();//调用随机ID生成工具
user.setCode(code);
userDao.save(user);
// 发送激活邮件;
MailUitls.sendMail(user.getEmail(), code);
}
// 业务层根据激活码查询用户
public User findByCode(String code) {
return userDao.findByCode(code);
}
// 修改用户的状态的方法
public void update(User existUser) {
userDao.update(existUser);
}</span>
<span style="font-family:KaiTi_GB2312;font-size:18px;color:#333333;"> public void save(User user) {
// TODO Auto-generated method stub
this.getHibernateTemplate().save(user);
}
// 根据激活码查询用户
public User findByCode(String code) {
String hql = "from User where code = ?";
List<User> list = this.getHibernateTemplate().find(hql,code);
if(list != null && list.size() > 0){
return list.get(0);
}
return null;
}
// 修改用户状态的方法
public void update(User existUser) {
this.getHibernateTemplate().update(existUser);
}</span>
注册成功后激活之前数据库截图因为我们只希望用户激活一次,所以激活成功后将数据的code字段清空,state改为1。目前系统没有上线,为了方便测试,我用的本地邮箱测试,仅支持局域网,需要外网的请参见博客http://blog.csdn.net/huyuyang6688/article/details/48031347,以上内容有不足之处请大家批评指正,谢谢!
文章浏览阅读3.3k次,点赞2次,收藏13次。安装前准备工作准备一台带有桌面的CentOS 7.x操作系统的服务器。 到Oracle官网下载安装包,选择Linux x86-64,下载入口。进入操作系统后修改系统自带的yum源,命令如下:#首先备份系统原先的yum源mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak#获取阿里云的yum源配置文件wget -O /etc/yum.repos.d/CentOS-Base.repo http
文章浏览阅读6.5k次。启动redis会有如下WARNING对一个高负载的环境来说tcp设置128这个值,太小了。想要永久解决该问题,首先需要关闭redis,然后打开/etc/sysctl.confsudo vim /etc/sysctl.conf然后再最后加上net.core.somaxconn= 1024如图:之后再执行如下指令sudo sysctl -p进行更新。再重启redis就可以解决了!关于如何重启redis请参考我本篇文章:https://blog.csdn.net/changyana/ar_the tcp backlog setting of 511 cannot be enforced because /proc/sys/net/core
文章浏览阅读284次。粤桂协作从玉农业签约 农业大健康·林裕豪:中国金控粤桂帮扶新闻中国采编网 中国新闻采编网 谋定研究中国智库网 国研智库 国情讲坛 谋定论道 经信研究 哲商对话 万权采编:11月5日-7日,对话功能性农业农业大健康大会中国农民丰收节交易会,2021年粤桂协作消费对接活动暨第20届广西名特优农产品(广州)交易会举行。广西自治区党委书记刘宁,自治区党委副书记、自治区主席蓝天立,自治区党委副书记刘小明,自治区党委常务、常务副主席秦如培,自治区党委常务、南宁市委书记王小东,自治区党委常务、秘书长黄伟京,自治区副主
文章浏览阅读545次。1.U-boot源码整体框架源码解压以后,我们可以看到以下的文件和文件夹: cpu与处理器相关的文件。每个子目录中都包括cpu.c和interrupt.c、start.S、u-boot.lds。cpu.c初始化CPU、设置指令Cache和数据Cache等interrupt.c设置系统的各种中断和异常start.S是U-boot启动时执行的第一个文件,它主要做最早其的系统初始化,
文章浏览阅读8k次。过去十年间,许多科技公司已开始畅怀拥抱开源。许多公司使用开源工具来运行自己的 IT 基础设施和网站,一些提供与开源工具相关的产品和服务,或基于开源工具而建的产品和服务,还有一些在为开源代码贡献代码或支持开源项目。Black Duck 在 2015 年的一项调查发现,78% 的企业组织使用开源软件,这个比例几乎是 2010 年时候的两倍。此外,88% 的企业表示,它们预计在今后几年,会加大为开源..._blackduck 替代产品
文章浏览阅读410次。1,安装vuexnpm install vuex --save2,src文件夹下src/store/index.js来注册vuex import Vue from 'vue';import Vuex from 'vuex';Vue.use(Vuex);const store = new Vuex.Store({ getters}) export defau..._vuex的引入
文章浏览阅读357次。点击上方“Python大本营”,选择“置顶公众号”Python大本营 IT人的职业提升平台马云曾在卸任演讲的时候说过这样一段话:“很多人还没搞清楚什么是PC互联网,移动互联网来了,我..._大数据工程师月薪30k
文章浏览阅读724次。hh
文章浏览阅读7.6k次,点赞20次,收藏244次。第一部分、计算机算法常用术语中英对照Data Structures 基本数据结构Dictionaries 字典Priority Queues 堆Graph Data Structures 图Set Data Structures 集合Kd-Trees 线段树Numerical Problems 数值问题Solving Linear Equations 线性方程组Bandwidth Reduction 带宽压缩Matrix Multiplication 矩阵乘法Determinants _计算机专业英语
文章浏览阅读323次。一、Plugin定义对于Plugin机制,叙述之前必须要强调一下: Plugin可以看做是对agent功能的扩充。对于业务系统的监控指标采集,最好不要做成plugin,而是把采集脚本放到业务程序发布包中,随着业务代码上线而上线,随着业务代码升级而升级,这样会比较容易管理。(承述来自OpenFalcon官方文档中关于plugin机制相关说明)二、Plugin使用步骤1...._falcon plugins
文章浏览阅读397次。在程序升级/维护过程中,版本控制是一个很重要的内容。用户需要了解安装到设备上的应用程序的版本信息,以及了解哪些版本可以进行升级。其它应用程序——包括你发布的其它程序——需要向系统查询你的应用程序的版本,来确定相互之间的兼容性。 你的应用程序发布的服务可能也需要查询版本来显示给用户。Android系统自身不检查应用程序的版本信息,也不会强制限制升级或兼容等。相反的,只是用户或应用程序
文章浏览阅读2.7k次。在最近用Qt调库的时候经常遇到一些花里胡哨的问题你有dll lib 以及头文件的时候,将dll放置你的debug目录,而lib随便放置一个位置,只要你路径知道将lib的api头文件放置你的工程,可以和你的main.cpp放在同一个目录,最好添加进你的工程就可以。绕后在你 pro 文件配置 在配置中加上LIBS += -L$$PWD"lib库的路径"-l"lib名"如LIBS +..._qt lib += -l$$pwd