- 浏览: 1047930 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1441)
- 软件思想&演讲 (9)
- 行业常识 (250)
- 时时疑问 (5)
- java/guava/python/php/ruby/R/scala/groovy (213)
- struct/spring/springmvc (37)
- mybatis/hibernate/JPA (10)
- mysql/oracle/sqlserver/db2/mongdb/redis/neo4j/GreenPlum/Teradata/hsqldb/Derby/sakila (268)
- js/jquery/jqueryUi/jqueryEaseyUI/extjs/angulrJs/react/es6/grunt/zepto/raphael (81)
- ZMQ/RabbitMQ/ActiveMQ/JMS/kafka (17)
- lucene/solr/nuth/elasticsearch/MG4J (167)
- html/css/ionic/nodejs/bootstrap (19)
- Linux/shell/centos (56)
- cvs/svn/git/sourceTree/gradle/ant/maven/mantis/docker/Kubernetes (26)
- sonatype nexus (1)
- tomcat/jetty/netty/jboss (9)
- 工具 (17)
- ETL/SPASS/MATLAB/RapidMiner/weka/kettle/DataX/Kylin (11)
- hadoop/spark/Hbase/Hive/pig/Zookeeper/HAWQ/cloudera/Impala/Oozie (190)
- ios/swift/android (9)
- 机器学习&算法&大数据 (18)
- Mesos是Apache下的开源分布式资源管理框架 (1)
- echarts/d3/highCharts/tableau (1)
- 行业技能图谱 (1)
- 大数据可视化 (2)
- tornado/ansible/twisted (2)
- Nagios/Cacti/Zabbix (0)
- eclipse/intellijIDEA/webstorm (5)
- cvs/svn/git/sourceTree/gradle/jira/bitbucket (4)
- jsp/jsf/flex/ZKoss (0)
- 测试技术 (2)
- splunk/flunm (2)
- 高并发/大数据量 (1)
- freemarker/vector/thymeleaf (1)
- docker/Kubernetes (2)
- dubbo/ESB/dubboX/wso2 (2)
最新评论
现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件。邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息。今天我们也来实现一个这样的功能,用户注册成功之后,就将用户的注册信息以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的邮箱时,不一定能够马上收取得到邮件,总是有延迟,有时甚至会延迟很长的时间,甚至会被当成垃圾邮件来处理掉,或者干脆就拒绝接收,有时候为了看到邮件发送成功的效果,要等半天,实属无奈啊。
一、搭建开发环境
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的邮箱时,不一定能够马上收取得到邮件,总是有延迟,有时甚至会延迟很长的时间,甚至会被当成垃圾邮件来处理掉,或者干脆就拒绝接收,有时候为了看到邮件发送成功的效果,要等半天,实属无奈啊。
发表评论
-
20180222积累
2018-02-22 09:34 4781. mybatis如何通过接口查找对应的mapper. ... -
20180208积累
2018-02-08 10:28 465临时表与永久表相似,但临时表存储在 tempdb 中,当不 ... -
行业应用
2018-01-30 16:30 485git clone的时候用上面那个IP地址,下面栏中的不能 ... -
SQLite 数据库
2018-01-29 22:57 755android: SQLite创建数据 ... -
java里面获取map的key和value的方法
2018-02-01 11:29 2158获取map的key和value的方法分为两种形式: ma ... -
Eclipse中Maven WEB工程tomcat项目添加调试以及项目发布细节记录
2018-02-23 21:11 725一、建立一个maven WEB项目 1、file-&g ... -
错误:HttpServlet was not found on the Java
2018-02-23 21:12 381我们在用Eclipse进行Java web ... -
使用 java8 实现List到Array的转换
2018-02-23 21:13 2988开发中需要调用第三方的库,有些 API 的入参要求是 do ... -
Java8 利用Lambda处理List集合
2018-01-11 09:58 5630Java 8新增的Lambda表达式,我们可以很方便地并行操 ... -
java中string与json互相转化
2018-01-11 09:40 1076在Java中socket传输数据时,数据类型往往比较难选择。 ... -
JSON 数据格式
2018-01-11 09:37 474JSON(JavaScript Object Notatio ... -
java怎么读取json格式的数据
2018-01-11 09:46 1059java可以使用JSONObject和JSONArray来操作 ... -
Java8-如何将List转变为逗号分隔的字符串
2018-01-10 10:13 1988Converting a List to a String ... -
eclipse maven 打war包的两种方式
2018-02-23 21:25 703第一种:利用pom.xml文件打包。 右键pom.xml ... -
Annotation(三)——Spring注解开发
2018-02-28 09:21 428Spring框架的核心功能IoC(Inversion o ... -
Spring自定义注解
2018-02-28 09:32 594java注解:附在代码中的一些元信息,用于在编译、运行时起 ... -
Java项目
2018-01-08 10:56 0这两种解决办法已经能完全解决问题,不过值得注意的一点是,我 ... -
解决Eclipse建立Maven项目后无法建立src/main/java资源文件夹的办法
2018-03-22 10:41 1130在Eclipse中建立好一个Maven项目后,如果Java ... -
Java @override报错的解决方法
2018-01-07 12:56 0有时候Java的Eclipse工程换一台电脑后编译总是@ove ... -
Java 8 配置Maven-javadoc-plugin
2018-01-07 09:07 1040在升级JDK至1.8之后,使用Maven-javadoc- ...
相关推荐
### JavaWeb培训讲义8 —— JavaMail Web应用开发 #### E-mail协议简介 电子邮件作为互联网上最基本的通讯方式之一,在日常工作中占据着重要的位置。在本讲义中,我们将详细介绍几种常用的E-mail协议,包括SMTP...
### Java Web快速入门——全十讲 #### 一、Java与Web开发的融合:JavaEE标准框架 在探讨Java Web开发之前,我们首先要理解Java在Web领域的定位。Java不仅仅是一种编程语言,它还是一套完整的生态系统,适用于各种...
JavaMail API提供了一组标准的Java类,使得开发者可以方便地在Java应用中添加发送、接收和管理电子邮件的功能。mail.jar包含所有必要的类和接口,如Message、Session、Store和Transport等,它们允许程序员构建复杂的...
第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、服务器...
第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、服务器...
MLDN 李兴华 Java Web 开发实战经典.pdf (高清版) 全书分为两部分,需 要全部下载下载一起解压,此部分为第一部分 带有书签,清华大学出版社 第1章 JAVA WEB开发简介 1.1、WEB发展历程 1.2、企业开发架构 ...
Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。 Spring3.0引入了众多Java...附录A JavaMail发送邮件 附录B 在Spring中开发Web Service
Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。 Spring3.0引入了众多Java...附录A JavaMail发送邮件 附录B 在Spring中开发Web Service
第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、服务器...
第十二章至第十八章为提高部分,介绍了SQL、JSP与JDBC的概念与JavaMail的使用;Web应用程序设计师应有的设计理念和实现方式等内容,这是为有一定理论和实践经验的读者准备的,可以适应他们提高水平的需要。
- **SpringMVC视频教程**:了解SpringMVC的工作原理,以及如何使用它构建Web应用程序。 - **JPA视频教程**:介绍Java Persistence API规范,学习如何使用JPA进行对象关系映射。 - **SpringData视频**:学习Spring ...
第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、服务器...