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