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

来源:互联网 发布:亚马逊 云计算 编辑:程序博客网 时间:2024/06/10 08:19


现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件。邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息。今天我们也来实现一个这样的功能,用户注册成功之后,就将用户的注册信息以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: Sendmail13 * @Description: Sendmail类继承Thread,因此Sendmail就是一个线程类,这个线程类用于给指定的用户发送Email14 * @author: 孤傲苍狼15 * @date: 2015-1-12 下午10:43:4816 *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     @Override37     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: createEmail57     * @Description: 创建要发送的邮件58     * @Anthor:孤傲苍狼59     *60     * @param session61     * @param user62     * @return63     * @throws Exception64     */ 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             //用户注册成功之后就使用用户注册时的邮箱给用户发送一封Email26             //发送邮件是一件非常耗时的事情,因此这里开辟了另一个线程来专门发送邮件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的邮箱时,不一定能够马上收取得到邮件,总是有延迟,有时甚至会延迟很长的时间,甚至会被当成垃圾邮件来处理掉,或者干脆就拒绝接收,有时候为了看到邮件发送成功的效果,要等半天,实属无奈啊。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 酷狗音乐换手机怎么办 有优势卵泡不排卵怎么办 卵泡30mm不破怎么办 成熟的卵泡不破怎么办 卵泡大了不破怎么办 卵泡突然不长了怎么办 想怀孕卵泡不长怎么办 吉吉影音下载慢怎么办 辞职后社保断了怎么办 2岁泡泡糖咽下去怎么办 我在拼多多开团怎么办 养了一条鱼死了怎么办 鱼缸的鱼尾巴烂怎么办 捡到玉佛吊坠该怎么办 晚上睡不踏实多梦易醒怎么办 红米3s蓝屏怎么办 吃饭没给钱跑了怎么办 刚出生的宝宝红屁屁怎么办 刚出生的宝宝红屁股怎么办 眼镜配高了25度怎么办 广州摇号中签后怎么办 深圳摇号中签后怎么办 皮肤被紫外线晒伤怎么办 脸被太阳晒过敏怎么办 星际2买了的怎么办 脸被风吹红了怎么办 天谕背包满了怎么办 剑灵没用的武器怎么办 人老实心太善良怎么办 雷蛇鼠标滚轮响怎么办 唱歌唱的嗓子疼怎么办 额头又高又凸怎么办 40多岁满头白发怎么办 被梅毒的针扎了怎么办 小腿上有肌肉块怎么办 血沉方程k值高怎么办 婚后父母给的钱怎么办 如果高考志愿没被录取怎么办 买到二手车退档怎么办 驾考过期怎么办退档 我和情人分手了怎么办