一般我们注册账号时,网站通常会要求我们填写一个邮箱地址,随后发送一封验证邮件到该邮箱,我们点击邮件里的验证链接(或者填写发送的验证码)就可以完成注册。

这个功能可以通过javamail实现.

首先原材料:下载javamail的jar包,一般为javax.mail.jar之类的.

                     下载jaf的包,一般为activation,jar之类的.

将两个包添加到项目web-inf中lib下并添加路径.

接下来理一下流程:首先需要一个注册网页register.jsp,当用户提交了注册网页首先判断用户名是否重复,邮箱符合标准,两次输入密码一样之类的(这一部分其实用ajax写的比较人性化,此处暂且不表),然后将该用户名压入数据库,并且标记该条数据的sign为0,随后发送邮件到用户输入的邮箱(这一部分就是javamail的工作啦~~),用户邮箱点击链接跳转到一个处理页面,在处理页面首先拿get方法的url+自己想要加的内容(比如直接是用户名或者一串加密过的数字,这里方便直接用用户名),获得用户名并且查找数据库,若存在并且sign为0,那么sign为1(这时这条数据就是真正的用户),也可以再将这个用户添加到新一个数据库,这样可以避免以后判断sign,同时跳转到登录界面login.jsp,如果存在并且sign为1,说明重复注册(比如用户点了这个链接两次...),如果不存在直接拒绝,跳转回register.jsp

发送邮件的关键代码如下:

Properties pros=new Properties();
Transport transport;
pros.put("mail.smtp.host", "smtp.163.com"); //我是用163邮箱发的邮件,所以smtp主机是smtp.163.com,用其他邮箱需要查一下smtp主机,一般为smtp.***.com
pros.put("mail.smtp.auth","true");
Session sendmailsession=Session.getInstance(pros);
sendmailsession.setDebug(true);
Message newMessage=new MimeMessage(sendmailsession);
newMessage.setFrom(new InternetAddress("********@163.com"));//这里输入发送的邮箱地址
newMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(to));//这里的to替换成用户输入的收件箱,也就是String to=request.getParameter("email")之类的
newMessage.setSubject(subject);//输入主题(subject是一个字符串)
newMessage.setSentDate(new Date());//输入日期
newMessage.setContent(emailContent.toString(),"text/html;charset=UTF-8");//或者setText("一段字符串")
transport=sendmailsession.getTransport("smtp");//此处不变
transport.connect("smtp.163.com","邮箱地址匿了","授权密码匿了");//这里比较麻烦,第一个是发送邮件的代理主机,第二个是发送邮箱的地址,第三个是发送邮箱的授权密码(而不是登录密码)
transport.sendMessage(newMessage, newMessage.getAllRecipients());
transport.close();



setText方法是传一段文本,比如我只是要传一段话,那么直接用setText比较方便

setContent适用于传html文本,比如上文所说的链接,比如字体大小的变化,颜色的变化,说白了就是更高级,但是必须用html标签拼接起来.

比如我这里的拼接方式:

String message="http://localhost:8080/changshi3/check3.jsp?username="+request.getParameter("username");//生成url地址和传递参数(这里就直接用本地了)
StringBuilder emailContent = new StringBuilder()  
        .append("您已经注册成功:<span style=\"color: #F3750F;font-weight: bold;font-size: larger;font-family: cursive;\">") 
        .append("<a href=\"")
        .append(message)
        .append("\">") 
        .append("点击此链接跳转")
        .append("</a>")
        .append("</span><br/>")  
        .append("此链接只能使用一次,验证成功自动失效;<br/>")  
        .append("<div style=\"font-size: small;color: gray;\">")  
        .append("(请在10分钟内完成验证,10分钟后验证码失效,您需要重新进行验证。感谢您的支持。)<br/>")  
        .append("如果您错误的收到了本电子邮件,请您忽略上述内容<br/>").append("</div>");

效果图:注册


java邮箱spf java邮箱验证码注册_用户名

提示

java邮箱spf java邮箱验证码注册_用户名_02



邮箱:

java邮箱spf java邮箱验证码注册_java_03

需要注意的是发送邮箱必须是开启smtp服务,至少默认126和163是不开启的,所以需要开启并且密码是授权密码(开启smtp服务时创建的密码),同时注意发送内容不要为空,以防当成垃圾邮件.