文章目录
一、使用QQ邮箱发送邮件
1.获取QQ邮箱的授权码
QQ邮箱–> 设置–>账户–> 生成授权码
2.导入jar包 —— mail.jar
添加到构建路径WEB-INF/lib
右键–> Build Path–> Add to Build Path
3.测试代码
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class JavaMailLearn {
public static void main(String[] args) throws Exception {
//设置参数
Properties prop = new Properties();
prop.setProperty("mail.smtp.host", "smtp.qq.com");
prop.setProperty("mail.transport.protocol", "smtp");
prop.setProperty("mail.smtp.auth", "true"); //是否要验证用户
prop.setProperty("mail.smtp.port", "465");
prop.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
prop.setProperty("mail.smtp.socketFactory.port", "465");
//发送邮件的5个步骤
//1. 获取session
Session session=Session.getInstance(prop);
session.setDebug(true);
//2.创建ts对象
Transport ts=session.getTransport();
//3.连接发件服务器
//通过第三方连接QQ邮箱服务器,需要邮箱地址、授权码
ts.connect("smtp.qq.com", "[email protected]", "avpvwswhgufvbdhh");
//4.创建邮件对象
Message message=createMessage(session);
//5.发送邮件
ts.sendMessage(message,message.getAllRecipients());
ts.close();
}
//创建邮件
public static MimeMessage createMessage(Session session) throws Exception{
//创建邮件对象
MimeMessage message=new MimeMessage(session);
//声明发件人
message.setFrom(new InternetAddress("[email protected]"));
//声明收件人
message.setRecipient(Message.RecipientType.TO, new InternetAddress("[email protected]"));
//声明主题
message.setSubject("邮箱发送测试");
//声明内容
message.setContent("<a href='http://www.baidu.com'>百度一下</a>","text/html;charset=utf-8");
return message;
}
}
验证码实现
1.图片验证码原理
在登录的时候,登陆页面上有一个img标签,在src路径填写获取验证码的地址,验证码由后台生成。后台接收到请求之后,先生成随机的数字和字符,把随机生成的字串放入session,等待校验,然后调用验证码生成工具类生成验证码,返回前台。
前台输入验证码和session里面的验证码对比,一样就对比通过。
2.验证码工具类
有点长,略(见源码)
3.VerifyCodeServlet
package org.lanqiao.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.lanqiao.util.VerifyCodeUtils;
/**
* 生成验证码的servlet
*/
@WebServlet("/VerifyCodeServlet")
public class VerifyCodeServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public VerifyCodeServlet() {
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//取消浏览器缓存
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("image/jpeg"); //设置上下文类型 图片响应
//获取随机的字符和数字
String code=VerifyCodeUtils.generateVerifyCode(4);
request.getSession().setAttribute("code", code);
//通过字符生成验证码
VerifyCodeUtils.outputImage(100, 43, response.getOutputStream(), code);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
4.UserServlet.java
package org.lanqiao.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.lanqiao.bean.User;
import org.lanqiao.service.IUserService;
import org.lanqiao.service.impl.UserServiceImpl;
import jdk.nashorn.internal.ir.RuntimeNode.Request;
/**
* Servlet implementation class UserServlet
*/
@WebServlet("/UserServlet")
public class UserServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
//声明并创建UserService
IUserService userService=new UserServiceImpl();
//所有的请求都会进入service方法
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置字符集编码
request.setCharacterEncoding("utf-8");
//接收flag,判断要执行的操作
String flag=request.getParameter("flag");
if("checkCode".equals(flag)) {
//执行验证码验证
checkCode(request,response);
}
}
//验证码验证
public void checkCode(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException {
//获取用户输入的验证码
String userCode=request.getParameter("userCode");
//取出session中的验证码
String code=(String)request.getSession().getAttribute("code");
//创建pw对象
PrintWriter pw=response.getWriter();
//两者进行对比,如果输入正确验证成功
if(code.equalsIgnoreCase(userCode)) { //验证码是不区分大小写的对比
pw.write("200");
}else {
pw.write("400");
}
}
}
5.login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录</title>
<link rel="stylesheet" href="css/pintuer.css">
<link rel="stylesheet" href="css/admin.css">
<script src="js/jquery.js"></script>
<script src="js/pintuer.js"></script>
</head>
<body>
<div class="bg"></div>
<div class="container">
<div class="line bouncein">
<div class="xs6 xm4 xs3-move xm4-move">
<div style="height:150px;"></div>
<div class="media media-y margin-big-bottom">
</div>
<form action="UserServlet" method="post">
<input type="hidden" name="flag" value="login"/>
<div class="panel loginbox">
<div class="text-center margin-big padding-big-top"><h1>后台管理中心</h1></div>
<div class="panel-body" style="padding:30px; padding-bottom:10px; padding-top:10px;">
<div class="form-group">
<div class="field field-icon-right">
<input type="text" class="input input-big" name="username" placeholder="登录账号" data-validate="required:请填写账号" />
<span class="icon icon-user margin-small"></span>
</div>
</div>
<div class="form-group">
<div class="field field-icon-right">
<input type="password" class="input input-big" name="pass" placeholder="登录密码" data-validate="required:请填写密码" />
<span class="icon icon-key margin-small"></span>
</div>
</div>
<div class="form-group">
<div class="field">
<input type="text" class="input input-big" name="code" placeholder="填写右侧的验证码" data-validate="required:请填写右侧的验证码" onblur="checkCode(this)" />
< img src="VerifyCodeServlet" alt="" width="100" height="32" class="passcode" style="height:43px;cursor:pointer;" onclick="this.src=this.src+'?'" //此处加 '>'
</div
</div>
</div>
<div style="padding:30px;"><input type="submit" class="button button-block bg-main text-big input-big" value="登录"></div>
</div>
</form>
</div>
</div>
</div>
</body>
<script type="text/javascript">
function checkCode(data){
var data=$(data).val();
$.ajax({
url:"UserServlet",
method:"get",
data:{
userCode:data, //用户输入的验证码
flag:"checkCode"
},
success:function(result){
if(result=="200"){
alert('验证码输入正确');
}else if(result="400"){
alert('验证码输入错误')
}else{
alert("未知错误")
}
}
})
}
</script>
</html>