ssm项目之发送邮件激活账户

向用户发送激活码点击激活账号

用户表Users:

package com.myy.pojo;

/**
 * @program: bookShopping
 * @description: 用户表
 * @author: myy
 *
 * 实体类:
 * 1. 属性私有化,提供公共的get、set方法供外界访问
 * 2. 必须要有无参构造
 * 3. 属性类型应该为包装类类型(8种基本类型)
 * 4. 类不能使用final修饰
 *
 * final、finally(不管有没有异常,都要执行)
 * finalize:Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法。
 */
public class Users {
    private Integer id;
    private String username;
    private String password;
    private String nickname;
    private String email;
    private String role;
    private Integer state;
    private String activecode;
    private String updatetime;

    public Users() {
    }

    public Users(Integer id, String username, String password,
                 String nickname, String email, String role,
                 Integer state, String activecode, String updatetime) {
        this.id = id;
        this.username = username;
        this.password = password;
        this.nickname = nickname;
        this.email = email;
        this.role = role;
        this.state = state;
        this.activecode = activecode;
        this.updatetime = updatetime;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getRole() {
        return role;
    }

    public void setRole(String role) {
        this.role = role;
    }

    public Integer getState() {
        return state;
    }

    public void setState(Integer state) {
        this.state = state;
    }

    public String getActivecode() {
        return activecode;
    }

    public void setActivecode(String activecode) {
        this.activecode = activecode;
    }

    public String getUpdatetime() {
        return updatetime;
    }

    public void setUpdatetime(String updatetime) {
        this.updatetime = updatetime;
    }
}

用户Mapper:
UsersMapper接口:

package com.myy.mapper;

import com.myy.pojo.Users;

import java.util.List;

public interface UsersMapper {
    /**
     * 增加
     * @param users
     * @return 1:成功 0:失败
     */
    int insertUsers(Users users);
}

UsersMapper.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.myy.mapper.UsersMapper">

    <insert id="insertUsers" parameterType="com.myy.pojo.Users">
        INSERT INTO users
        (username, password, nickname, email, role, state, activecode)
        VALUES(#{username}, #{password}, #{nickname}, #{email}, #{role},
               #{state}, #{activecode})

    </insert>
</mapper>

用户service包
UsersService接口:

package com.myy.service;

import com.myy.pojo.Users;

import java.util.List;

/**
 * @author myy
 */
public interface UsersService {
    int insertUsers(Users users);
    Users findUsersByCode(String code);//code:用户激活码
}

service.impl包
UsersServiceImpl:

package com.myy.service.impl;

import com.myy.mapper.UsersMapper;
import com.myy.pojo.Users;
import com.myy.service.UsersService;
import com.myy.utils.MailUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import javax.mail.MessagingException;
import java.util.List;

/**
 *@program: bookShopping
 *@description:
 *@author: myy
 */
@Service
public class UsersServiceImpl implements UsersService {

    @Resource
    private UsersMapper usersMapper;

    @Override
    public int insertUsers(Users users) {
        int num = usersMapper.insertUsers(users);
        //发送用户激活邮件
        try {
            MailUtils.secdMail(users.getEmail(), users.getActivecode());
        } catch (MessagingException e) {
            e.printStackTrace();
        }
        return num;
    }
    @Override
    public Users findUsersByCode(String code) {
        return usersMapper.findUsersByCode(code);
    }
}

用户controller包

com.myy.controller;
/**
 * @author myy
 */

import com.myy.pojo.Users;
import com.myy.service.UsersService;
import com.myy.service.impl.UsersServiceImpl;
import com.myy.utils.DateUtils;
import com.myy.utils.Md5Utils;
import com.myy.utils.UUIDUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Date;

/**
 *@program: bookShopping
 *@description:
 *@author: myy
 */
@Controller
@RequestMapping("/users")
public class UsersController {
    @Autowired
    private UsersService usersService;
    //激活账户
    @RequestMapping("/activation")
    public String activation(String code) {
        //根据激活码查询用户
        Users users = usersService.findUsersByCode(code);
        //将账户的状态改为1
        users.setState(1);
        usersService.updateUsers(users);
        return "login";
    }
}

最重要的就是发送邮件的工具类了

package com.myy.utils;

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;

/**
 *@program: bookShopping
 *@description: 邮件
 *@author: myy
 */
public class MailUtils {

    /*
    *@param [toMail, code]收件人 激活码
    *@return void
    */
    public static void secdMail(String toMail, String code) throws MessagingException {
        //设置邮件服务器
        Properties properties = new Properties();
        //可以设置邮件服务器
        properties.setProperty("mail.host","smtp.163.com");
        properties.setProperty("mail.smtp.auth","true");
        //与邮件服务器的连接
        Session session = Session.getInstance(properties, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("[email protected]","myy123");
            }
        });

        //创建邮件
        Message message = new MimeMessage(session);
        //设置收件人地址
        message.setFrom(new InternetAddress("[email protected]"));
        //抄送
        message.setRecipient(Message.RecipientType.TO, new InternetAddress(toMail));
        //设置邮件的主体
        message.setSubject("来自图书商城的邮件");
        //设置内容
        String msg="<h1>点击<a href='http://localhost:8080/book/users/activation.action?code="+code+"'>此处</a>激活账户<h1>";
        message.setContent(msg, "text/html;charset=utf-8");
        //发送邮件
        Transport.send(message);
    }
}

最后在邮箱里打开POP3/SMTP/IMAP的开关即可。

猜你喜欢

转载自blog.csdn.net/sunshinegirl168660/article/details/80951385