SMT HOME注册不了,需要网易邮箱如何验证邮件验证,可是网易邮箱如何验证邮件总是收不到激活验证的邮件

今天看啥 热点:
注册邮箱验证激活技术,邮箱验证激活
一.先说思路
//1.数据库加三个字段,state:(0:未激活,1:激活成功),ActiCode:(放激活码),token_exptime(过期时间,用来验证激活邮件是否过期)
//2.用户填写资料,点击注册,插入数据成功,state字段默认是0,同时生成一个ActiCode(用传过来的邮箱、密码、和当前时间加密形成)也存入数据库
//3.发送邮件。。。提示用户登录邮箱激活。。。邮件中带一个激活成功页的URL,URL里有两个参数(1,用户ID,2:激活码)
//4.用户登录邮箱点击链接,来到处理激活的业务逻辑页面或Servlet,得到URL中两个参数,以这两个参数为条件查询数据库里的数据,如果有,取当前时间和之前存入数据库的过期时间作比较,看是否过期,过期,删除数据库中该条记录,并转到失败页面,没过期,查看链接传过来的激活码与数据库字段激活码是否一致,不一致,同样删除数据库中该条记录,并跳转到激活失败界面,一致,则将字段state为1,激活成功,转到激活成功页。。。
二、具体实现代码
&&&&& 1.首先,准备一个简单的测试页面
&div id=&main& style=&margin:0width:500&&
&form id=&reg& action=&user.action?op=reg& method=&post&&
E-mail:&input type=&text& class=&input& name=&email& id=&email&&
密 码:&input type=&password& class=&input& name=&pwd& id=&pwd&&
&input type=&submit& class=&btn& value=&提交注册& &
&/body&&&&&&&
&&&&& 2.点击提交注册,来到user.action?op=reg,注意带的参数op指我要做的操作,用于后面的Servlet做判断该做什么操作,下面的代码完成了形成激活码、过期时间等表示当前注册用户的状态的信息存入数据库并发送邮件的过程。(邮件内容自定义,可以忽略我的)
package com.nh.web.
import java.io.IOE
import java.io.PrintW
import java.sql.SQLE
import java.text.SimpleDateF
import java.util.ArrayL
import java.util.C
import java.util.D
import java.util.L
import java.util.UUID;
import javax.naming.NamingE
import javax.servlet.ServletE
import javax.servlet.http.HttpS
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import com.nh.dao.DBH
import com.nh.utils.E
import com.nh.utils.SendE
public class UserServlet extends CommonServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String op = request.getParameter(&op&);
// 判断op是什么,调用不同的方法做处理
if (op != null && !&&.equals(op)) {
if (&reg&.equals(op)) {
regOP(request, response);
} catch (Exception e) {
e.printStackTrace();
response.sendRedirect(&common/500.jsp&);
private void regOP(HttpServletRequest request, HttpServletResponse response) throws IOException, SQLException, NamingException {
1.数据库加两个字,state字段(0:未激活,1:激活成功),ActiCode:(放激活码)
2.用户填写资料,插入数据成功,state字段默认是0,同时生成一个ActiCode也存入数据库
3.提示用户激活。。。发送邮件。。。邮件中带一个激活成功页的URL,URL里有两个参数(1,用户ID,2:激活码)
4.用户点击链接,回到激活成功页。。。激活成功页的Load事件,得到两个参数,以这两个参数为条件查询数据库里的数据,如果有,修改字段state为1,反之。。提示激活失败,重新激活。。
String email=request.getParameter(&email&);
String pwd=Encrypt.md5(request.getParameter(&pwd&));
Calendar c = Calendar.getInstance();
//现在的时间(单位:毫秒)
//TODO:时间换算问题,如何处理int和long之间的关系
long time = c.getTimeInMillis();
//创建激活码
String token=Encrypt.md5(email+pwd+time);
//过期时间为24小时后
int token_exptime=(int)(time+*24);
String token_exptime=(time+1000*20)+&&;
//这里测试是用的20秒
String id=UUID.randomUUID().toString();
String sql=&insert into tb_user(id,username,pwd,token,token_exptime,regtime,status) values (?,?,?,?,?,sysdate,0)&;
List&Object& params=new ArrayList&Object&();
params.add(id);
params.add(email);
params.add(pwd);
params.add(token);
params.add(token_exptime);
DBHelper db=new DBHelper();
int r=db.doUpdate(sql, params); //保存注册信息
if( r&0 ){
//发送邮件
///邮件的内容
SimpleDateFormat sdf=new SimpleDateFormat(&yyyy-MM-dd&);
StringBuffer sb=new StringBuffer(&&div style=\&width:660overflow:border-bottom:1px solid #\&&&div style=\&height:52overflow:border:1px solid #464c51;background:#353b3f url(/rsc/img/email/hdbg.png);\&&&a href=\&?mail=qbclickbynoticemail_\& target=\&_blank\& style=\&display:width:144height:34margin:10px 0 0 20overflow:text-indent:-2000background:url(/rsc/img/email/logo.png) no-\&&LOFTER&/a&&/div&&+&&div style=\&padding:24px 20\&&您好,&+email+&&br/&&br/&LOFTER是一款\&专注兴趣、分享创作\&的轻博客产品,旨在为\&热爱记录生活、追求时尚品质、崇尚自由空间\&的你,打造一个全新而定展示平台!&br/&&br/&请点击下面链接激活账号,24小时生效,否则重新注册账号,链接只能使用一次,请尽快激活!&/br&&);
sb.append(&&a href=\&http://localhost:8080/mailtest/emailcheck.action?op=activate&id=&);
sb.append(id);
sb.append(&&token=&);
sb.append(token);
sb.append(&\&&http://localhost:8080/mailtest/emailcheck.action?op=activate&id=&);
sb.append(id);
sb.append(&&token=&);
sb.append(token);
sb.append(&&/a&&+&&br/&如果以上链接无法点击,请把上面网页地址复制到浏览器地址栏中打开&br/&&br/&&br/&LOFTER,专注兴趣,分享创作&br/&&+sdf.format(new Date())+ &&/div&&/div&& );
//发送邮件
SendEmail.send(email, sb.toString());
response.sendRedirect(&doEmail.action?op=emaillogin&email=&+email+&&pwd=&+pwd);
发送邮件的代码,这里需要导入javax.mail的包,即mail.jar,如果发件人邮箱是QQ邮箱还要去QQ邮箱开启smtp和其他两个协议,我这里用的163邮箱就不需要设置
package com.nh.
import java.util.D
import java.util.P
import javax.mail.A
import javax.mail.M
import javax.mail.MessagingE
import javax.mail.PasswordA
import javax.mail.S
import javax.mail.T
import javax.mail.internet.InternetA
import javax.mail.internet.MimeM
* @author Qixuan.Chen
public class SendEmail {
public static final String HOST = &&;
public static final String PROTOCOL = &smtp&;
public static final int PORT = 25;
public static final String FROM = &&;//发件人的email
public static final String PWD = &xxxx&;//发件人密码
* 获取Session
private static Session getSession() {
Properties props = new Properties();
props.put(&mail.smtp.host&, HOST);//设置服务器地址
props.put(&mail.store.protocol& , PROTOCOL);//设置协议
props.put(&mail.smtp.port&, PORT);//设置端口
props.put(&mail.smtp.auth& , &true&);
Authenticator authenticator = new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(FROM, PWD);
Session session = Session.getDefaultInstance(props , authenticator);
public static void send(String toEmail , String content) {
Session session = getSession();
System.out.println(&--send--&+content);
// Instantiate a message
Message msg = new MimeMessage(session);
//Set message attributes
msg.setFrom(new InternetAddress(FROM));
InternetAddress[] address = {new InternetAddress(toEmail)};
msg.setRecipients(Message.RecipientType.TO, address);
msg.setSubject(&账号激活邮件&);
msg.setSentDate(new Date());
msg.setContent(content , &text/charset=utf-8&);
//Send the message
Transport.send(msg);
catch (MessagingException mex) {
mex.printStackTrace();
这是QQ邮箱设置,一般开启1、2、4
这是收到的激活邮件
根据用户所填邮箱跳转相应邮箱登录地址的代码
package com.nh.web.
import java.io.IOE
import java.io.PrintW
import javax.servlet.ServletE
import javax.servlet.http.HttpS
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
public class DoEmailLoginServlet extends CommonServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String op = request.getParameter(&op&);
// 判断op是什么,调用不同的方法做处理
if (op != null && !&&.equals(op)) {
if (&emaillogin&.equals(op)) {
emailloginOP(request, response);
} catch (Exception e) {
e.printStackTrace();
response.sendRedirect(&common/500.jsp&);
private void emailloginOP(HttpServletRequest request,
HttpServletResponse response) throws IOException {
//判断用户邮箱是什么,跳到指定邮箱登陆界面
String email=request.getParameter(&email&); //
String pwd=request.getParameter(&pwd&);
String addrstr=email.split(&@&)[1]; //qq.com
if( &&.equals(addrstr)){
addrstr=&&;
}else if( &&.equals(addrstr)){
addrstr=&/&;
}else if( &&.equals(addrstr)){
addrstr=&/&;
}else if( &&.equals(addrstr)){
addrstr=&.cn/&;
}else if( &&.equals(addrstr)){
addrstr=&&;
response.sendRedirect(&emailaction.jsp?email=&+email+&&pwd=&+pwd+&&addrstr=&+addrstr);
具体页面我就不一一给了,直接上激活验证代码吧
package com.nh.web.
import java.io.IOE
import java.io.PrintW
import java.lang.reflect.InvocationTargetE
import java.sql.SQLE
import java.util.ArrayL
import java.util.C
import java.util.L
import javax.naming.NamingE
import javax.servlet.ServletE
import javax.servlet.http.HttpS
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import com.lofter.bean.U
import com.nh.dao.DBH
import com.nh.utils.DataExistAlreadyE
public class EmailActivateCheckServlet extends CommonServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String op = request.getParameter(&op&);
// 判断op是什么,调用不同的方法做处理
if (op != null && !&&.equals(op)) {
if( &activate&.equals(op)){
activateOP(request,response);
} catch (Exception e) {
e.printStackTrace();
response.sendRedirect(&common/500.jsp&);
private void activateOP(HttpServletRequest request,
HttpServletResponse response) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, Exception {
//获取参数token的值,即激活识别码。
//将它与数据表中的用户信息进行查询对比,如果有相应的数据集,判断是否过期,如果在有效期内则将对应的用户表中字段status设置1,即已激活,这样就完成了激活功能。
String id=request.getParameter(&id&);
String token=request.getParameter(&token&);
Calendar c = Calendar.getInstance();
//现在的时间(单位:毫秒)
long curtime = c.getTimeInMillis();
String sql=&select id,token_exptime,token,username,pwd from tb_user where status=0 and
List&Object& params=new ArrayList&Object&();
params.add( token );
DBHelper db=new DBHelper();
User u=db.findSingleObject(User.class, sql, params);
String email=u.getUsername();
String pwd=u.getPwd();
if( u!=null ){
long token_exptime=Long.parseLong(u.getToken_exptime());
if( curtime&token_exptime ){
//激活码过期,先删除该用户记录,然后重新发送邮件
sql=&delete from tb_user where id='&+u.getId()+&'&;
db.doUpdate(sql, null);
response.sendRedirect(&actionfailer.jsp?email=&+email+&&pwd=&+pwd);
throw new DataExistAlreadyException(&激活码已过期!&);
//验证激活码是否正确
if( token.equals(u.getToken())){
//激活成功, //并更新用户的激活状态,为已激活
sql=&update tb_user set status=1 where id='&+u.getId()+&'&;
db.doUpdate(sql, null);
response.sendRedirect(&actionsuccess.jsp&);
sql=&delete from tb_user where id='&+u.getId()+&'&;
db.doUpdate(sql, null);
response.sendRedirect(&actionfailer.jsp?email=&+email+&&pwd=&+pwd);
throw new DataExistAlreadyException(&激活码不正确&);
package com.nh.web.
import java.io.IOE
import java.io.PrintW
import javax.servlet.ServletC
import javax.servlet.ServletE
import javax.servlet.http.HttpS
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpS
public abstract class CommonServlet extends HttpServlet {
    private static final long serialVersionUID = 0250657L;
    private String saveFilePath=&&;
    protected String basePath=&&;
    
    
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        doPost(req,resp);
    }
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        
        saveFilePath=req.getRealPath(&/&);
        HttpSession session=req.getSession();
        ServletContext application=session.getServletContext();
        if( application.getAttribute(&basePath&)!=null ){
            basePath=(String) application.getAttribute(&basePath&);
        }
        
        super.service(req, resp);
    }
    
    
package com.lofter.
import java.io.S
import java.util.D
public class User implements Serializable {
    private static final long serialVersionUID = -1485708L;
    private S
    private S // --账户
    private S // --密码
    private S // --名称
    private S // --个人签名
    private S // --头像
    private D // --注册时间
    private S // --账号激活码
    private String token_ // --激活码有效期
    private I // --激活状态 ,0-未激活,1-已激活
    public User() {
        super();
    }
    
    public User(String id, String username, String pwd, String nickname,
            String autograph, String head, Date regtime, String token,
            String token_exptime, Integer status) {
        super();
        this.id =
        this.username =
        this.pwd =
        this.nickname =
        this.autograph =
        this.head =
        this.regtime =
        this.token =
        this.token_exptime = token_
        this.status =
    }
    public String getId() {
        
    }
    public void setId(String id) {
        this.id =
    }
    public String getUsername() {
        
    }
    public void setUsername(String username) {
        this.username =
    }
    public String getPwd() {
        
    }
    public void setPwd(String pwd) {
        this.pwd =
    }
    public String getNickname() {
        
    }
    public void setNickname(String nickname) {
        this.nickname =
    }
    public String getAutograph() {
        
    }
    public void setAutograph(String autograph) {
        this.autograph =
    }
    public String getHead() {
        
    }
    public void setHead(String head) {
        this.head =
    }
    public Date getRegtime() {
        
    }
    public void setRegtime(Date regtime) {
        this.regtime =
    }
    public static long getSerialversionuid() {
        return serialVersionUID;
    }
    public String getToken() {
        
    }
    public void setToken(String token) {
        this.token =
    }
    public String  getToken_exptime() {
        return token_
    }
    public void setToken_exptime(String token_exptime) {
        this.token_exptime = token_
    }
    public Integer getStatus() {
        
    }
    public void setStatus(Integer status) {
        this.status =
    }
    
相关搜索:
相关阅读:
相关频道:
&&&&&&&&&&&&&&&&&&
WEB前端教程最近更新99 血精灵 圣骑士
因为坑爹的雅虎要终止服务了,而万分悲催的我正好成了受害者要更改注册邮箱。好吧,更改就更改吧,先是更改成我QQ的邮箱,说是已注册过了,必须要是没注册过的邮箱,行!这个怪我,我又改成163的邮箱重新提交了申请。昨天进邮箱一看说是申请成功了,心中一阵窃喜,进去之后改密码也很顺利,但是进行其他!作时,说是邮箱要验证,我在163邮箱里看了下午3.26分战网发来了一封验证的邮件,点开里面的链接进去说是验证失败,让我重新发送验证邮件,我就又点了重新发送,提示邮件已发送成功,让我进邮箱查看,我进163邮箱发现没有,之后我又重复了几次,仍然发现没收到。无奈之下,我打了@#电话,先是个妹子接的,说的很客气,说是什么邮箱白名单要设置什么,我按照她提示的进邮箱设置过后,又满怀希望的点了重新发送,结果还是没有,我又了电话,这次是个汉子,更客气,说是战网不支持360浏览器,只支持IE和火狐的,让我重新找一台没安装360的电脑登录点发送,我问是不是把360浏览器删除用纯正的IE浏览器登录也可以,对方说可以试试,结果我试了还是收不到验证邮件。这尼马咋这么坑爹呢,现在还有多少电脑没装360的,最起码我单位和所认识的人的电脑都装了360的,现在让我上哪去找一台从没装过360的电脑,总不能让我把电脑重装系统吧。那也太麻烦了,我好多东西都要重装的。我就想问问还有没有别的办法没有!!!!
若有其他邮件可以使用的话,可以把该邮箱设置一下转发,转发到其他邮箱,再发送邮件,去转发的邮箱看看
99 血精灵 圣骑士
按你说的做了,转发到QQ邮箱,还是收不到,我都晕了。到底怎么回事啊,别的都能收到,什么改密码的都行,唯独验证邮箱的收不到。
依旧不行的话,对于这个情况,请拨打客 服电话:3 根据语音提示转2转0人工服务。
99 血精灵 圣骑士
打过两个电话了,也按他们说的做了,我贴子里都说的很清楚了呀。真心搞不明白,收个邮件怎么这么麻烦,我邮箱里那么多垃圾邮件都能收到,怎么这正规的邮件反而收不到了呢。
还是这样的话,可以提供一下该战网对应邮箱名称、可供联系的手机号码,尝试为您提交给工作人员核实一下
该主题由诗亦语在日 1:05 CST编辑过
99 血精灵 圣骑士
在这里公布我的邮箱和手机?
99 血精灵 圣骑士
我现在用的是163邮箱,也是你们网.!易的邮箱,怎么你们网.!易的游戏验证邮件发不了自己公司的邮箱?这让我情何以堪哪!
该主题由风流胖财神在日 1:16 CST编辑过
回复后请编辑下自己的信息。如何编辑自己的回复?回复后,将鼠标移至之前的回复内容上,会有相应的处理功能。选择【编辑】,然后将『问题』以外的所有信息删除
99 血精灵 圣骑士
邮箱和手机都发过了,也按照你说的删除掉了。不知道你看到了没有?
这个已经查看到,该情况已经提交给工作人员了,请耐心等待有什么消息会短信通知的
99 血精灵 圣骑士
恩,好的,我就不信了,你们自己的游戏验证邮件发不到163的邮箱里,就算是垃圾邮件,我也绝不相信发不出去。别的什么乱七八糟的垃圾邮件我都能收到,这要是网、!易自己公司的邮件发不到163的邮箱里,说出去岂不是让人笑话!
请放心,会处理好的~
90 兽人 死亡骑士
能解决吗,我也是同样的问题,看你是你们163的问题了,搞什么谁能帮我也解决下电话也打了,没法解决啊
100 亡灵 法师
我也一样啊 坑爹啊!
别喊我丫头
90 血精灵 法师
我也遇到了
Dreamkiller
100 人类 潜行者
战网提供的那些所谓解决方案根本没用!添加了白名单之后依旧收不到验证邮件!到底要如何解决?是不是需要换成非!@的邮箱才能收到?!
悟空的筋斗云
90 侏儒 法师
我也出现了这个问题,我什么方法都试过了,前前后后也重新发送了几十次了,还是不行,太坑爹了吧!
冰冻番茄丶
24 暗夜精灵 德鲁伊
这!@#就是个垃圾游戏,大好就和你一样情况$%^没兴趣搞了。玩个小号又-*!一样问题,坑啊
冰冻番茄丶
24 暗夜精灵 德鲁伊
战 网 就 他 妈 的 是 个 垃圾
暴力威胁。我们将严肃对待此类行为,并会上报有关部门。
发布的主题中包含其他玩家的个人信息。包括实际地址、邮箱地址、电话号码及不当的照片和/或视频。
骚扰或歧视性用语。此类言辞将不允许出现。
现实生活中的威胁
失效的链接
阐述理由(最多256字)

我要回帖

更多关于 qq邮箱收不到验证邮件 的文章

 

随机推荐