javaweb实现邮件发送(给注册邮箱发送验证码,或者激活码)

先上效果图:

输入相应的值

点击提交

我的邮箱收到相应的信息,我这里点击邮件激活激活账号

这里主要讲如何发送邮箱就可以了(有需要的如何设计激活账号可以留言)

前期准备:

下载email需要的jar,和serverlet的jar包

上代码

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>Insert title here</title>
</head>
<body>
<h1>注册</h1>
<form action="regis.action" method="post">
用户名:<input type="text" name="name"></br>
密码:<input type="password" name="pw"></br>
邮箱:<input type="text" name="mail">
<input type="submit" value="提交">
</form>
</body>
</html>

regis.action的代码(用于接收值,和调用方法发送邮件)

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        response.setCharacterEncoding("UTF-8");
        request.setCharacterEncoding("UTF-8");
        
        String name =request.getParameter("name");
        String password =request.getParameter("pw");
        String e_mail=request.getParameter("mail");
        String code=UUid.getId()+UUid.getId();//生成随机激活码,在下面的工具类中
        UserInfo usr =new UserInfo();//持久层
        usr.setEmail(e_mail);
        usr.setName(name);
        usr.setPassword(password);
        usr.setUuId(0);
        usr.setCode(code);//存入相应的值
        Service ser =new Service();
        ser.regist(usr);//调用serverce的方法
    }

持久层:

package com.pojo;

public class UserInfo {
    
    private int id;
    private String name;
    private String password;
    private int state;
    private String email;
    private String code;
    public int getState() {
        return state;
    }
    public void setState(int state) {
        this.state = state;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public int getUuId() {
        return state;
    }
    public void setUuId(int uuId) {
        this.state = uuId;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }

}


//生成随机激活码的工具类

package com.jdbc;

import java.util.UUID;

public class UUid {
    
    public static String getId()
    {
        
        return UUID.randomUUID().toString().replace("-", "");
    }
    

}


Service 工具类:

package com.service;

import com.dao.UserInfoDao;
import com.daoImpl.UserInfoDaoImpl;
import com.jdbc.Mail;
import com.pojo.UserInfo;

public class Service {
    
    public void regist(UserInfo user)
    {
        UserInfoDao dao =new UserInfoDaoImpl();
        dao.save(user);//这里可以不用管。这是我往数据库存入数据的操作
        //发送邮件
        Mail mail= new Mail();//我写的发送邮件的类
        try {
            mail.sendMail(user.getEmail(), user.getCode());
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }

}

Mail类(用于发送邮件)

package com.jdbc;

import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;

/**
 * 邮箱发送工具类
 * */
public class Mail {

    /**
     * 发送邮件的方法
     * @param to : 发送对象
     * @param code: 激活码
     * */
    public static void sendMail(String to ,String code) throws  Exception
    {
        //创建连接对象,连接到服务器
        Properties props=new Properties();
        props.setProperty("mail.transport.protocol", "smtp");   // 使用的协议(JavaMail规范要求)
        props.setProperty("mail.smtp.host", "smtp.163.com");   // 发件人的邮箱的 SMTP 服务器地址,,我这里是用163邮箱发送的邮件//需要到自己发送邮箱的设置(在下面讲解)
        props.setProperty("mail.smtp.auth", "true");//请注意本地的邮箱服务器可以不用设置上面的三行
        Session session = Session.getInstance(props,new Authenticator() {

            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                // TODO Auto-generated method stub
                return new PasswordAuthentication("xxx@163.com", "密码(邮箱有一个客户端授权码需要填那个(没有设置的需要去设置,具体设置接下来会讲))");
            }
        });
        //创建邮件对象
        Message msg = new MimeMessage(session);
        //发送一封激活邮件
        msg.setFrom(new InternetAddress("xxx@163.com(发送这封邮箱的邮箱名)"));
        //设置收件人
        msg.setRecipient(RecipientType.TO,new InternetAddress(to) );
        //设置邮件的主题
        msg.setSubject("来自完美课堂的激活文件");
        //设置邮件的正文
        msg.setContent("<h1> 激活点击以下链接:</h1><h3><a href='http://localhost:8080/testService/sure.action?code="+code+"'>http://localhost:8080/testService/sure.action?code="+code+"</a></h3>", "text/html;charset=UTF-8");
        Transport.send(msg);
    }
    
}

我用的163邮箱(qq有限需要进行特殊设置,此处省略)

具体设置如下:进入邮箱

设置成你需要的

(需要的jar审核还未通过,有需要可以到我的主页下载或自行到网上下载)

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实现用户注册登录页面,需要以下步骤: 1. 创建一个Java Web项目,例如使用Eclipse或IntelliJ IDEA等IDE工具,创建一个Dynamic Web Project。 2. 创建用户注册和登录的JSP页面,包括表单元素和提交按钮。 3. 创建一个Servlet来处理用户提交的表单数据,并将其存储到数据库中。可以使用JDBC或ORM框架如Hibernate等。 4. 创建一个Session来记录用户是否已经登录。如果用户已经登录,将其重定向到主页。 5. 创建一个验证码生成器,可以使用Java的awt包来生成图片验证码。当用户注册或登录时,要求用户输入正确的验证码。 6. 将生成的验证码图片显示在注册或登录页面上,以确保用户输入正确的验证码。 7. 创建一个过滤器,以确保只有通过身份验证的用户才能访问受保护的页面。 需要注意以下几个点: 1. 在处理用户输入时,要确保正确性和安全性。可以使用正则表达式或其他验证方法来验证用户输入。 2. 在处理密码时,要对其进行哈希处理,以确保密码不会被泄露。 3. 在处理验证码时,要确保用户输入的验证码与生成的验证码相匹配。可以使用Session来存储生成的验证码,并将其与用户输入进行比较。 4. 在创建过滤器时,要确保只有通过身份验证的用户才能访问受保护的页面。可以使用基于角色的访问控制(Role-Based Access Control)来实现此目的。 以上是实现用户注册登录页面的大致步骤,具体实现过程中需要根据具体情况进行调整。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值