博客源地址:http://www.cnblogs.com/xdp-gacl/p/4220190.html

  现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件。邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息。今天我们也来实现一个这样的功能,用户注册成功之后,就将用户的注册信息以Email的形式发送到用户的注册邮箱当中,实现发送邮件功能就得借助于JavaMail了。

一、搭建开发环境

1.1、创建Web项目

  

1.2、用户注册的Jsp页面

register.jsp

  1. 1 <%@ page language="java" pageEncoding="UTF-8"%>
  2. 2 <!DOCTYPE HTML>
  3. 3 <html>
  4. 4 <head>
  5. 5 <title>注册页面</title>
  6. 6 </head>
  7. 7
  8. 8 <body>
  9. 9 <form action="${pageContext.request.contextPath}/servlet/RegisterServlet" method="post">
  10. 10 用户名:<input type="text" name="username"><br/>
  11. 11 密码:<input type="password" name="password"><br/>
  12. 12 邮箱:<input type="text" name="email"><br/>
  13. 13 <input type="submit" value="注册">
  14. 14 </form>
  15. 15 </body>
  16. 16 </html>

1.3、消息提示页面

message.jsp

  1. 1 <%@ page language="java" pageEncoding="UTF-8"%>
  2. 2 <!DOCTYPE HTML>
  3. 3 <html>
  4. 4 <head>
  5. 5 <title>消息提示页面</title>
  6. 6 </head>
  7. 7
  8. 8 <body>
  9. 9 ${message}
  10. 10 </body>
  11. 11 </html>

二、编写处理用户注册处理程序

2.1、开发封装用户注册信息的domain

User.java

  1. 1 package me.gacl.domain;
  2. 2
  3. 3 public class User {
  4. 4 private String username;
  5. 5 private String password;
  6. 6 private String email;
  7. 7 public String getUsername() {
  8. 8 return username;
  9. 9 }
  10. 10 public void setUsername(String username) {
  11. 11 this.username = username;
  12. 12 }
  13. 13 public String getPassword() {
  14. 14 return password;
  15. 15 }
  16. 16 public void setPassword(String password) {
  17. 17 this.password = password;
  18. 18 }
  19. 19 public String getEmail() {
  20. 20 return email;
  21. 21 }
  22. 22 public void setEmail(String email) {
  23. 23 this.email = email;
  24. 24 }
  25. 25 }

2.2、编写邮件发送功能

  发送邮件是一件非常耗时的事情,因此这里设计一个线程类来发送邮件

  1. 1 package me.gacl.web.controller;
  2. 2
  3. 3 import java.util.Properties;
  4. 4 import javax.mail.Message;
  5. 5 import javax.mail.Session;
  6. 6 import javax.mail.Transport;
  7. 7 import javax.mail.internet.InternetAddress;
  8. 8 import javax.mail.internet.MimeMessage;
  9. 9 import me.gacl.domain.User;
  10. 10
  11. 11 /**
  12. 12 * @ClassName: Sendmail
  13. 13 * @Description: Sendmail类继承Thread,因此Sendmail就是一个线程类,这个线程类用于给指定的用户发送Email
  14. 14 * @author: 孤傲苍狼
  15. 15 * @date: 2015-1-12 下午10:43:48
  16. 16 *
  17. 17 */
  18. 18 public class Sendmail extends Thread {
  19. 19 //用于给用户发送邮件的邮箱
  20. 20 private String from = "gacl@sohu.com";
  21. 21 //邮箱的用户名
  22. 22 private String username = "gacl";
  23. 23 //邮箱的密码
  24. 24 private String password = "邮箱密码";
  25. 25 //发送邮件的服务器地址
  26. 26 private String host = "smtp.sohu.com";
  27. 27
  28. 28 private User user;
  29. 29 public Sendmail(User user){
  30. 30 this.user = user;
  31. 31 }
  32. 32
  33. 33 /* 重写run方法的实现,在run方法中发送邮件给指定的用户
  34. 34 * @see java.lang.Thread#run()
  35. 35 */
  36. 36 @Override
  37. 37 public void run() {
  38. 38 try{
  39. 39 Properties prop = new Properties();
  40. 40 prop.setProperty("mail.host", host);
  41. 41 prop.setProperty("mail.transport.protocol", "smtp");
  42. 42 prop.setProperty("mail.smtp.auth", "true");
  43. 43 Session session = Session.getInstance(prop);
  44. 44 session.setDebug(true);
  45. 45 Transport ts = session.getTransport();
  46. 46 ts.connect(host, username, password);
  47. 47 Message message = createEmail(session,user);
  48. 48 ts.sendMessage(message, message.getAllRecipients());
  49. 49 ts.close();
  50. 50 }catch (Exception e) {
  51. 51 throw new RuntimeException(e);
  52. 52 }
  53. 53 }
  54. 54
  55. 55 /**
  56. 56 * @Method: createEmail
  57. 57 * @Description: 创建要发送的邮件
  58. 58 * @Anthor:孤傲苍狼
  59. 59 *
  60. 60 * @param session
  61. 61 * @param user
  62. 62 * @return
  63. 63 * @throws Exception
  64. 64 */
  65. 65 public Message createEmail(Session session,User user) throws Exception{
  66. 66
  67. 67 MimeMessage message = new MimeMessage(session);
  68. 68 message.setFrom(new InternetAddress(from));
  69. 69 message.setRecipient(Message.RecipientType.TO, new InternetAddress(user.getEmail()));
  70. 70 message.setSubject("用户注册邮件");
  71. 71
  72. 72 String info = "恭喜您注册成功,您的用户名:" + user.getUsername() + ",您的密码:" + user.getPassword() + ",请妥善保管,如有问题请联系网站客服!!";
  73. 73 message.setContent(info, "text/html;charset=UTF-8");
  74. 74 message.saveChanges();
  75. 75 return message;
  76. 76 }
  77. 77 }

2.3、编写处理用户注册的Servlet

  1. 1 package me.gacl.web.controller;
  2. 2
  3. 3 import java.io.IOException;
  4. 4 import javax.servlet.ServletException;
  5. 5 import javax.servlet.http.HttpServlet;
  6. 6 import javax.servlet.http.HttpServletRequest;
  7. 7 import javax.servlet.http.HttpServletResponse;
  8. 8 import me.gacl.domain.User;
  9. 9 import me.gacl.service.UserService;
  10. 10
  11. 11 public class RegisterServlet extends HttpServlet {
  12. 12
  13. 13 public void doGet(HttpServletRequest request, HttpServletResponse response)
  14. 14 throws ServletException, IOException {
  15. 15 try{
  16. 16 String username = request.getParameter("username");
  17. 17 String password = request.getParameter("password");
  18. 18 String email = request.getParameter("email");
  19. 19 User user = new User();
  20. 20 user.setEmail(email);
  21. 21 user.setPassword(password);
  22. 22 user.setUsername(username);
  23. 23
  24. 24 System.out.println("把用户信息注册到数据库中");
  25. 25 //用户注册成功之后就使用用户注册时的邮箱给用户发送一封Email
  26. 26 //发送邮件是一件非常耗时的事情,因此这里开辟了另一个线程来专门发送邮件
  27. 27 Sendmail send = new Sendmail(user);
  28. 28 //启动线程,线程启动之后就会执行run方法来发送邮件
  29. 29 send.start();
  30. 30
  31. 31 //注册用户
  32. 32 //new UserService().registerUser(user);
  33. 33 request.setAttribute("message", "恭喜您,注册成功,我们已经发了一封带了注册信息的电子邮件,请查收,如果没有收到,可能是网络原因,过一会儿就收到了!!");
  34. 34 request.getRequestDispatcher("/message.jsp").forward(request, response);
  35. 35 }catch (Exception e) {
  36. 36 e.printStackTrace();
  37. 37 request.setAttribute("message", "注册失败!!");
  38. 38 request.getRequestDispatcher("/message.jsp").forward(request, response);
  39. 39 }
  40. 40 }
  41. 41
  42. 42 public void doPost(HttpServletRequest request, HttpServletResponse response)
  43. 43 throws ServletException, IOException {
  44. 44 doGet(request, response);
  45. 45 }
  46. 46 }

  程序运行效果如下:

  

  现在很多网站都有这样的功能,用户注册完成之后,网站根据我们注册时填写的邮箱给我们一封Email,然后点击Email中的超链接去激活我们的用户。这种功能就是这样实现的。

  在总结使用JavaMail发送邮件时发现,将邮件发送到sina或者sohu的邮箱时,不一定能够马上收取得到邮件,总是有延迟,有时甚至会延迟很长的时间,甚至会被当成垃圾邮件来处理掉,或者干脆就拒绝接收,有时候为了看到邮件发送成功的效果,要等半天,实属无奈啊。

(转载)JavaWeb学习总结(五十三)——Web应用中使用JavaMail发送邮件的更多相关文章

  1. JavaWeb学习总结(五十三)——Web应用中使用JavaMail发送邮件

    现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件.邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息.今天我们也来实现一个这样的功能 ...

  2. (转载)JavaWeb学习总结(五十)——文件上传和下载

    源地址:http://www.cnblogs.com/xdp-gacl/p/4200090.html 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传 ...

  3. web应用中使用JavaMail发送邮件 。。转载

    现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件.邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息.今天我们也来实现一个这样的功能 ...

  4. web应用中使用JavaMail发送邮件

    现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件.邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息.今天我们也来实现一个这样的功能 ...

  5. Web应用中使用JavaMail发送邮件进行用户注册

    现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件.邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息.今天我们也来实现一个这样的功能 ...

  6. 转载-JavaWeb学习总结

    JavaWeb学习总结(五十三)——Web应用中使用JavaMail发送邮件 孤傲苍狼 2015-01-12 23:51 阅读:13407 评论:20     JavaWeb学习总结(五十二)——使用 ...

  7. javaweb学习总结(五)——Servlet开发(一)(转)

    转载自 http://www.cnblogs.com/xdp-gacl/p/3760336.html 一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun ...

  8. javaweb学习总结(五)——Servlet开发(一)

    一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向 ...

  9. JavaWeb学习笔记——开发动态WEB资源(六)ServletConfig和ServletContext

    1.只有在第一次请求服务器产生实例的时候才会调用init()方法,有一种办法能在服务器一启动的时候就加载init()方法. 即服务器启动即加载Servlet,且按数字大小顺序实例化Servlet. 方 ...

随机推荐

  1. 【小白的CFD之旅】15 四种境界

    天气不错,小白一大早就起床了,吃过早餐就往奔实验室而去.路上碰到了同去实验室的小牛师兄. "小白,这么早啊",小牛师兄老远就发现了小白,打招呼道. "早啊,牛师兄,刚吃完 ...

  2. Python学习记录day6

    title: Python学习记录day6 tags: python author: Chinge Yang date: 2016-12-03 --- Python学习记录day6 @(学习)[pyt ...

  3. 抓鼠标的猫(Win32实现,Codeblocks+GCC编译)

    程序效果: 猫的眼睛一直跟着鼠标移动: 鼠标经过猫的右脚附近时,猫会抓住鼠标.(未使用Hook) 代码: //main.cpp 1 #include <windows.h> #includ ...

  4. NOIP2001 一元三次方程求解[导数+牛顿迭代法]

    题目描述 有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差 ...

  5. Python函数作用域的查找顺序

    函数作用域的LEGB顺序 1.什么是LEGB? L:local 函数内部作用域 E:enclosing 函数内部与内嵌函数之间 G:global 全局作用域 B:build-in 内置作用域 2.它们 ...

  6. [No000041]如果你被ruby惯坏了,不如试试python3-在Windows下安装ipython

    说明:我比较喜欢绿色软件,因此,下载的是python3为zip包.所以执行命令时请注意当前路径. 先安装pip (请去官网下载get-pip.py 地址: https://pip.pypa.io/en ...

  7. Eclipse使用svn文章列表

    http://www.cnblogs.com/duanxz/p/3334660.html http://www.cnblogs.com/duanxz/p/3334660.html http://130 ...

  8. Jquery 操作CheckBox ,RadioButtonList,DropDownList

    Jquery版本2.1.4 CheckBox 1.获取值: $("#chb").prop("checked"); RadioButtonList 1.获取值: ...

  9. Error: Could not find the required version of the Java(TM) 2 Runtime Environment in'(null)'.

    今天拿到一台新机器,搭一下开发环境,安装个JDK是个很基本的事情,从Orale的网站上下了个安装,但是一直出下面的错: 我信了你的邪,Google了一圈,有人说是可能文件下载有问题,重新下载安装就可以 ...

  10. JS组件系列——Bootstrap右键菜单解决方案:ContextMenu

    前言:有段时间没发表随笔了,过个年人都变得懒了.新年刚来上班,今天正好得空,将去年遗留的两个小组件总结记录下.有朋友跟我说:你的bootstrap组件要能够形成一个可以满足一般项目需求的系列组件,才有 ...