JSP如何利用 mail.jar 组件发送邮件?

版权声明:转载请标注来源: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协议并获取授权码?

猜你喜欢

转载自blog.csdn.net/qq_37844454/article/details/83034168