• (六)电子邮件


        电子邮箱:就是在邮件服务器上开启的一块空间
        服务器:提供邮件服务
        协议:规定数据的格式
        
        发送邮件的协议: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";
        }
    
    }

  • 相关阅读:
    PHP 文件写入和读取(必看篇)
    FormData
    JAVA中使用MD5加密实现密码加密
    使用JSONObject生成和解析json
    spring的@Transactional注解详细用法
    获取当前运行函数和方法的名字
    getattr的使用
    python socket编程入门级
    python字典解析
    我看到的最棒的Twisted入门教程!
  • 原文地址:https://www.cnblogs.com/Michael2397/p/7637098.html
Copyright © 2020-2023  润新知