`
weitao1026
  • 浏览: 1047930 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

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

一、搭建开发环境

1.1、创建Web项目

  

1.2、用户注册的Jsp页面

register.jsp

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

message.jsp

复制代码
1 <%@ page language="java" pageEncoding="UTF-8"%>
2 <!DOCTYPE HTML>
3 <html>
4   <head>
5     <title>消息提示页面</title>
6   </head>
7  
8   <body>
9        ${message}
10   </body>
11 </html>
复制代码
二、编写处理用户注册处理程序

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

User.java

复制代码
1 package me.gacl.domain;
2
3 public class User {
4     private String username;
5     private String password;
6     private String email;
7     public String getUsername() {
8         return username;
9     }
10     public void setUsername(String username) {
11         this.username = username;
12     }
13     public String getPassword() {
14         return password;
15     }
16     public void setPassword(String password) {
17         this.password = password;
18     }
19     public String getEmail() {
20         return email;
21     }
22     public void setEmail(String email) {
23         this.email = email;
24     }
25 }
复制代码
2.2、编写邮件发送功能

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

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

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

  

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

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

相关推荐

    JavaWeb培训讲义8

    ### JavaWeb培训讲义8 —— JavaMail Web应用开发 #### E-mail协议简介 电子邮件作为互联网上最基本的通讯方式之一,在日常工作中占据着重要的位置。在本讲义中,我们将详细介绍几种常用的E-mail协议,包括SMTP...

    Java Web快速入门——全十讲

    ### Java Web快速入门——全十讲 #### 一、Java与Web开发的融合:JavaEE标准框架 在探讨Java Web开发之前,我们首先要理解Java在Web领域的定位。Java不仅仅是一种编程语言,它还是一套完整的生态系统,适用于各种...

    JAVA WEBjar包驱动

    JavaMail API提供了一组标准的Java类,使得开发者可以方便地在Java应用中添加发送、接收和管理电子邮件的功能。mail.jar包含所有必要的类和接口,如Message、Session、Store和Transport等,它们允许程序员构建复杂的...

    李兴华 Java Web 开发实战经典_带源码_高清pdf 带书签 上

    第1章 JAVA WEB开发简介 1.1、WEB发展历程 1.2、企业开发架构 1.3、JAVA EE架构 1.4、JAVA EE核心设计模式 1.5、Struts开发框架 1.6、本章摘要 1.7、开发实战讲解 第2章 HTML、JavaScript简介 2.1、服务器...

    李兴华 java_web开发实战经典 源码 完整版收集共享

    第1章 JAVA WEB开发简介 1.1、WEB发展历程 1.2、企业开发架构 1.3、JAVA EE架构 1.4、JAVA EE核心设计模式 1.5、Struts开发框架 1.6、本章摘要 1.7、开发实战讲解 第2章 HTML、JavaScript简介 2.1、服务器...

    李兴华Java Web开发实战经典.pdf (高清版) Part1

    MLDN 李兴华 Java Web 开发实战经典.pdf (高清版) 全书分为两部分,需 要全部下载下载一起解压,此部分为第一部分 带有书签,清华大学出版社 第1章 JAVA WEB开发简介 1.1、WEB发展历程 1.2、企业开发架构 ...

    Spring3.x企业应用开发实战(完整版) part1

    Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。  Spring3.0引入了众多Java...附录A JavaMail发送邮件 附录B 在Spring中开发Web Service

    Spring.3.x企业应用开发实战(完整版).part2

    Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。  Spring3.0引入了众多Java...附录A JavaMail发送邮件 附录B 在Spring中开发Web Service

    李兴华 Java Web 开发实战经典_带源码_高清pdf 带书签 下

    第1章 JAVA WEB开发简介 1.1、WEB发展历程 1.2、企业开发架构 1.3、JAVA EE架构 1.4、JAVA EE核心设计模式 1.5、Struts开发框架 1.6、本章摘要 1.7、开发实战讲解 第2章 HTML、JavaScript简介 2.1、服务器...

    jsp2.0 技术手册

    第十二章至第十八章为提高部分,介绍了SQL、JSP与JDBC的概念与JavaMail的使用;Web应用程序设计师应有的设计理念和实现方式等内容,这是为有一定理论和实践经验的读者准备的,可以适应他们提高水平的需要。

    尚硅谷教学视频

    - **SpringMVC视频教程**:了解SpringMVC的工作原理,以及如何使用它构建Web应用程序。 - **JPA视频教程**:介绍Java Persistence API规范,学习如何使用JPA进行对象关系映射。 - **SpringData视频**:学习Spring ...

    李兴华 Java Web 开发实战经典 高清扫描版Part3

    第1章 JAVA WEB开发简介 1.1、WEB发展历程 1.2、企业开发架构 1.3、JAVA EE架构 1.4、JAVA EE核心设计模式 1.5、Struts开发框架 1.6、本章摘要 1.7、开发实战讲解 第2章 HTML、JavaScript简介 2.1、服务器...

Global site tag (gtag.js) - Google Analytics