版权声明:转载请标注来源:https://me.csdn.net/qq_37844454 https://blog.csdn.net/qq_37844454/article/details/83034168
我们在注册、找回密码等验证用户身份时候,经常要用到邮件验证码功能。如下图:
JSP常见的邮件发送是利用mail.jar插件发送(下载地址:点击这里)。
接下来,我将详细得给有需要的同志展示如何利用mail.jar插件发送邮件:
第一步:将mail.jar导入到自己项目的lib目录下:
第二部:新建一个jsp文件(名字随意),将以下代码复制到该文件的第一行:
<%@ page contentType="text/html;charset=GB2312"%>
<%@ page import="javax.mail.*,javax.mail.internet.*,javax.activation.*,java.util.*"%>
第二步:将下面代码复制到刚刚创建的JSP文件的<body></body>标签里面(将原来的内容删掉,其中有几个地方需要修改,请注意):
<%
try {
Random a = new Random();
int ResetPwdCode = a.nextInt(100000);//产生随机数,用于产生验证码
String Theme = "管理员找回密码验证";//设置邮件主题
String Explain = "\n\n\n\n\n\n\n\n\n 特别说明:此邮件仅用找回密码册验证,请勿回复,谢谢合作!!";
String Content = "尊敬的用户:\n您的验证码为:" + ResetPwdCode + Explain;//拼接邮箱发送的内容
session.setAttribute("adminResetPwdCode", ResetPwdCode);//把ResetPwdCode放到session里,命名为adminResetPwdCode(保存这个验证码,用于等下对比用户填写的验证码)
session.setMaxInactiveInterval(120);//设置验证码的有效其为120S
//获得属性,并生成Session对象
Properties props = new Properties();
Session sendsession;
Transport transport;
sendsession = Session.getInstance(props, null);
//向属性中写入SMTP服务器的地址
props.put("mail.smtp.host", "smtp.qq.com");//第一个参数不要改动;第二个参数:如果用的是QQ邮箱作为发送邮件的发件人,就不要改动,如果用其他的邮箱如:163邮箱,就改为smtp.163.com!
//设置SMTP服务器需要权限认证
props.put("mail.smtp.auth", "true");
props.setProperty("mail.smtp.starttls.enable", "true");//************这里很重要,如果没有这句,这会引起安全配置问题,无法通过验证 !!!
//需要时使用SSL登录方式,随着各个Mail服务器对于安全的重视,纷纷采用基于SSL的Mail登录方式进行发送和接收电子邮件。
//例如GMail等。当使用JavaMail发送电子邮件时,需要根据SSL设定,增加安全验证的功能
//设置输出调试信息:控制台会显示收件人、发件人等信息,可根据自己的需要设为false
sendsession.setDebug(true);
//根据Session生成Message对象
Message message = new MimeMessage(sendsession);
//设置发信人地址
message.setFrom(new InternetAddress("[email protected]"));//将其中的邮箱地址改为你的邮箱地址
//设置收信人地址
message.setRecipient(Message.RecipientType.TO,
new InternetAddress(request.getParameter("Email")));
//request.getParameter("Email")):接受表单里填写的收件人的地址
//设置e-mail标题
message.setSubject(new String(Theme.getBytes("UTF-8"), "utf-8"));
//设置e-mail发送时间
message.setSentDate(new Date());
//设置e-mail内容
message.setText(new String(Content.getBytes("UTF-8"), "utf-8"));//两个参数都是设置文本格式,做乱码处理
//保存对于Email的修改
message.saveChanges();
//根据Session生成Transport对象
transport = sendsession.getTransport("smtp");
//连接到SMTP服务器
transport.connect("smtp.qq.com", "xxxx","xxxxxxxxxxx");
//第一个参数是刚刚在上面修改的参数;第二位参数是自己用户发送邮件的邮箱账号,注意不要有.com等后缀名,第三位参数是邮箱pop3的授权密码,进邮箱里申请以后复制到此处
//发送e-mail
transport.sendMessage(message, message.getAllRecipients());
//关闭Transport连接
transport.close();
%>
<%
} catch (MessagingException me) {
out.println(me.toString());
}
%>
以上就是邮件发送的后台代码了。
接下来我们来看看简单的Ajax异步发送邮件(前台功能):
效果图:
jq代码:
var wait = 0;
// 120 秒发送一次
var limit = 120;
var timer = null;
var Jquery = $;
$('#get_code').click(function () {//#get_code 这个是发送邮件的
// 如果不等于0,需要等待时间
if (wait !== 0) {
// 不等于0 直接直接就行了
alert('时间还没到');
return false;
}
// 时间到了,按钮点击之后,直接设置计算时间
var btn = Jquery(this);
btn.prop('disabled', true);
// 表示没 1000毫秒执行一次闭包, setInterval 返回一个定时器的 ID
timer = setInterval(function () {
// 每 1000 毫秒执行这个,
++ wait;
// 如果时间等于 0,可以重新发送验证码
if (wait >= limit) {
btn.prop('disabled', false);
btn.val('免费获取验证码');//按钮的文本内容
// 这里清除定时器就要用到这个ID
clearInterval(timer);
// 然后把 wait 设置为0
wait = 0;
}
btn.val((limit-wait) + '秒后重新发送');
}, 1000);
Jquery.post("resources/ResetPwdSendEmail.jsp", {Email: Jquery("#Email").val()},function(res) {
//其中 ResetPwdSendEmail.jsp 就是刚刚我们建立的那个jsp文件
//console.log(res);
});
});
亲测成功:
以上就是全部的邮件发送后台、前台的主要功能的代码了,页面以及表单部分的就不展示出来了。
ps:申请邮箱pop3的方法(如果连接失效,请自行搜索,其他邮箱也是类似的申请):QQ邮箱如何开启POP3协议并获取授权码?