(六)电子邮件

    电子邮箱:就是在邮件服务器上开启的一块空间
    服务器:提供邮件服务
    协议:规定数据的格式
    
    发送邮件的协议:smtp
    接受邮件的协议:pop / pop3    imap

本地邮件服务器

下载地址:http://pan.baidu.com/s/1o8HWqOa,http://pan.baidu.com/s/1i56BeOd

安装:一路next

设置: 

(1)设置域名 store.com
(2)新增几个账户 (普通用户)
jack
tom
(3)新增一个管理员账户
service

1、

2、

3、

4、

5、

6、

 

安装foxMail

 邮件工具类

package com.louis.utils;

import java.util.Properties;

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

public class MailUtils {

    public static void sendMail(String email, String emailMsg)
            throws AddressException, MessagingException {
        // 1.创建一个程序与邮件服务器会话对象 Session

        Properties props = new Properties();
        //设置发送的协议
        props.setProperty("mail.transport.protocol", "SMTP");
        
        //设置发送邮件的服务器
        props.setProperty("mail.host", "localhost");
        props.setProperty("mail.smtp.auth", "true");// 指定验证为true

        // 创建验证器
        Authenticator auth = new Authenticator() {
            public PasswordAuthentication getPasswordAuthentication() {
                //设置发送人的帐号和密码
                return new PasswordAuthentication("service", "123456");
            }
        };

        Session session = Session.getInstance(props, auth);

        // 2.创建一个Message,它相当于是邮件内容
        Message message = new MimeMessage(session);

        //设置发送者
        message.setFrom(new InternetAddress("service@store.com"));

        //设置发送方式与接收者
        message.setRecipient(RecipientType.TO, new InternetAddress(email)); 

        //设置邮件主题
        message.setSubject("用户激活");
        // message.setText("这是一封激活邮件,请<a href='#'>点击</a>");

        //设置邮件内容
        message.setContent(emailMsg, "text/html;charset=utf-8");

        // 3.创建 Transport用于将邮件发送
        Transport.send(message);
    }
}

service类

package com.louis.service.impl;

import com.louis.dao.UserDao;
import com.louis.dao.impl.UserDaoImpl;
import com.louis.domain.User;
import com.louis.service.UserService;
import com.louis.utils.MailUtils;

public class UserServiceImpl implements UserService {

    
    public void regist(User user) throws Exception  {
        UserDao dao = new UserDaoImpl();
        dao.add(user);
        //发送邮件
        //email收件人地址,emailMsg信息
        String emailMsg = "欢迎您注册成我们的一员,<a href='http://localhost//store/user?method=active&code="+user.getCode()+"'>点此激活</a>";  //调转到激活servlet
        MailUtils.sendMail(user.getEmail(), emailMsg);
    }

}

用户激活

    1、邮箱的连接点击
        http://localhost/store/user?method=active&code=824736A172A04023A7D71A498B8F6DF1
    2、 需要在UserServlet编写一个active
        获取激活码
        调用service完成激活
        页面跳转, 请求转发 jsp/msg.jsp
    3、userService中
        active(code)
            1.通过激活码获取一个用户
                用户有可能为空
            2.若不为空,修改用户的state 将0改成1
package com.louis.service.impl;

import com.louis.dao.UserDao;
import com.louis.dao.impl.UserDaoImpl;
import com.louis.domain.User;
import com.louis.service.UserService;
import com.louis.utils.MailUtils;
import com.sun.xml.internal.ws.policy.EffectiveAlternativeSelector;

public class UserServiceImpl implements UserService {

    
    public void regist(User user)  throws Exception{
        UserDao dao=new UserDaoImpl();
        dao.add(user);
        //发送邮件
        
        //email:收件人地址
        //emailMsg:邮件的内容
        String emailMsg="欢迎您注册成我们的一员,<a href='http://localhost:8080/store/user?method=active&code="+user.getCode()+"'>点此激活</a>";
        MailUtils.sendMail(user.getEmail(), emailMsg);
    }


    public User active(String code) throws Exception {
        UserDao dao=new UserDaoImpl();
        //1.通过code获取一个用户
        User user=dao.getByCode(code);
        
        //2.判断用户是否为空
        if(user==null){
            return null;
        }
        
        //3.修改用户状态
        //将用户的状态设置为1
        user.setState(1);
        dao.update(user);
        
        return user;
    }

}
package com.louis.dao.impl;

import java.sql.SQLException;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;

import com.louis.dao.UserDao;
import com.louis.domain.User;
import com.louis.utils.DataSourceUtils;
import com.sun.org.apache.bcel.internal.generic.NEW;

public class UserDaoImpl implements UserDao {

    @Override
    public void add(User user) throws SQLException {
        QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource());
        String sql="insert into user values(?,?,?,?,?,?,?,?,?,?);";
        qr.update(sql, user.getUid(),user.getUsername(),user.getPassword(),
                user.getName(),user.getEmail(),user.getTelephone(),
                user.getBirthday(),user.getSex(),user.getState(),user.getCode());
    }

    /**
     * 通过激活码获取一个用户
     */
    @Override
    public User getByCode(String code) throws Exception {
        QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource());
        String sql="select * from user where code = ? limit 1";
        return     qr.query(sql, new BeanHandler<>(User.class), code);
    }

    /**
     * 修改用户
     */
    @Override
    public void update(User user) throws Exception {
        QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource());
        String sql="update user set username = ?,password = ? ,name=?,email=?,birthday = ?,state = ?,code=? where uid =? ";
        qr.update(sql, user.getUsername(),user.getPassword(),user.getName(),user.getEmail(),user.getBirthday(),
                user.getState(),null,user.getUid());
        System.out.println(sql);
    }

}
package com.louis.web.servlet;

import java.io.IOException;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;

import com.louis.domain.User;
import com.louis.myconvertor.MyConverter;
import com.louis.service.UserService;
import com.louis.service.impl.UserServiceImpl;
import com.louis.utils.MD5Utils;
import com.louis.utils.UUIDUtils;

/**
 * 和用户相关的servlet
 */

public class UserServlet extends BaseServlet {
    
    
    public String add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("userServlet的add方法执行了");
        return null;
    }
    //调转到注册页面
    public String registUI(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        return "/jsp/register.jsp";
    }
    
    //完成注册
    public String regist(HttpServletRequest request,HttpServletResponse response) throws Exception {
        //1封装数据
        User user = new User();
        
        //注册自定义转化器
        ConvertUtils.register(new MyConverter(), Date.class);
        
        BeanUtils.populate(user, request.getParameterMap());
        
        //1.1设置用户id
        user.setUid(UUIDUtils.getId());
        
        //1.2设置激活码
        user.setCode(UUIDUtils.getCode());
        
        //1.3加密密码
        user.setPassword(MD5Utils.md5(user.getPassword()));
        
        //2调用service完成注册
        UserService service = new UserServiceImpl();
        service.regist(user);
        
        
        //页面请求转发
        request.setAttribute("msg", "用户已注册,请去邮箱激活");
        return "/jsp/msg.jsp";
    }
    
    /*
     * 用户激活
     * */
    public String active(HttpServletRequest request,HttpServletResponse response) throws Exception {
        //1获取激活码
        String code = request.getParameter("code");
        //2调用service完成激活
        UserService service = new UserServiceImpl();
        User user = service.active(code);
        if(user == null) {
            //通过激活码没有找到用户
            request.setAttribute("msg", "请重新激活");
             
        }else {
            request.setAttribute("msg", "激活成功");
        }
        
        //3请求转发msg.jsp
        return "/jsp/msg.jsp";
    }

}

 

 

posted on 2017-10-08 13:10  Michael2397  阅读(230)  评论(0编辑  收藏  举报

导航