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

  现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件。邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息。今天我们也来实现一个这样的功能,用户注册成功之后,就将用户的注册信息以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学习总结(五十三)——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之旅】08 CFD速成之道

    学了那么一个星期的流体力学,又看了一周的计算流体力学,小白对于如何应用CFD解决工程流体问题,依然是一无所知.眼看一个月的时间已经过半,小白有点着急起来.于是在一个阳光明媚的早晨,小白又找到了黄师姐. ...

  2. 查看eclipse web项目中jsp编译后的servlet源文件【转】【JSP】

    eclipse中,jsp编译后 servlet源文件的位置为: F:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wor ...

  3. 一切Web的基础----HTTP

    HTTP 是基于 TCP/IP 协议的应用层协议.它不涉及数据包(packet)传输,主要规定了客户端和服务器之间的通信格式,默认使用80端口.HTTP协议基于TCP连接,该协议针对TCP连接上的数据 ...

  4. 洛谷11月月赛round.2

    P3414 SAC#1 - 组合数 题目背景 本题由世界上最蒟蒻最辣鸡最撒比的SOL提供. 寂月城网站是完美信息教室的官网.地址:http://191.101.11.174/mgzd . 题目描述 辣 ...

  5. iOS状态栏---学习笔记六

    一.设置状态栏的颜色. //1.需要在自定义导航的时候,设置顶部视图 - (UIViewController *)childViewControllerForStatusBarStyle{ retur ...

  6. 通过trie树单词自动补全(二)

    经常使用iciba进行单词查询, 关于他的搜索建议是通过单词前缀做的索引, 所以自己想动手实现下, 当然如果借助mysql的话,一条sql语句就能实现, 网上查询了下trie正适合做这个,所以通过C语 ...

  7. 发布一个免费开源软件-- PAD流程图绘制软件PADFlowChart

    软件的可执行文件下载:PADFlowChart-exe.zip MD5校验码:91FCA9FEC9665FD09BEB3DA94ADC1CE6 SHA1校验码:ECD742AA3092A085AB07 ...

  8. 阅读ArrayBlockingQueue源码了解如何利用锁实现BlockingQueue

    BlockingQueue是多线程里面一个非常重要的数据结构.在面试的时候,也常会被问到怎么实现BlockingQueue.本篇根据Java7里ArrayBlockingQueue的源码,简单介绍一下 ...

  9. RSVP协议的基本概念介绍

    2010-06-12 14:12 佚名 互联网 字号:T | T 对于RSVP协议的简单介绍和图解.通过文章,我们将对这个含义的基本概念和结构,以及工作方式等方面的知识有所了解.希望对大家有所帮助. ...

  10. javascript数据类型判断

    javascript基本数据类型:原始类型  和  引用类型 原始类型(简单数据类型):String,Number,Boolean,Undefined,Null,Symbol(ES6新增) 引用类型( ...