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 = "[email protected]";
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的邮箱时,不一定能够马上收取得到邮件,总是有延迟,有时甚至会延迟很长的时间,甚至会被当成垃圾邮件来处理掉,或者干脆就拒绝接收,有时候为了看到邮件发送成功的效果,要等半天,实属无奈啊。

时间: 2024-08-25 11:17:43

web应用中使用JavaMail发送邮件的相关文章

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

现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件.邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息.今天我们也来实现一个这样的功能,用户注册成功之后,就将用户的注册信息以Email的形式发送到用户的注册邮箱当中,实现发送邮件功能就得借助于JavaMail了. 一.搭建开发环境 1.1.创建Web项目 1.2.用户注册的Jsp页面 register.jsp 1 <%@ page language="java" p

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

博客源地址:http://www.cnblogs.com/xdp-gacl/p/4220190.html 现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件.邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息.今天我们也来实现一个这样的功能,用户注册成功之后,就将用户的注册信息以Email的形式发送到用户的注册邮箱当中,实现发送邮件功能就得借助于JavaMail了. 一.搭建开发环境 1.1.创建Web项目 1.2.用户注册的Js

java中使用javamail发送邮件

1. 电子邮件协议 电子邮件的在网络中传输和网页一样需要遵从特定的协议,常用的电子邮件协议包括 SMTP,POP3,IMAP. 其中邮件的创建和发送只需要用到 SMTP协议,所有本文也只会涉及到SMTP协议.SMTP 是 Simple Mail Transfer Protocol 的简称,即简单邮件传输协议. 2. JavaMail Java 官方也提供了对电子邮件协议封装的 Java 类库,就是JavaMail,但并没有包含到标准的 JDK 中,需要我们自己去 Java 或 Oracle 官网

[Java Web]2\Web开发中的一些架构

1.企业开发架构: 企业平台开发大量采用B/S开发模式,不管采用何种动态Web实现手段,其操作形式都是一样的,其核心操作的大部分都是围绕着数据库进行的.但是如果使用编程语言进行数据库开发,要涉及很多诸如事务.安全等操作问题,所以现在开发往往要通过中间件进行过渡,即,程序运行在中间件上,并通过中间件进行操作系统的操作,而具体一些相关的处理,如事务.安全等完全由中间件来负责,这样程序员只要完成具体的功能开发即可. 2.Java EE架构: Java EE 是在 Java SE 的基础上构建的,.NE

使用JavaMail发送邮件和接受邮件

一. 为什么要学习JavaMail 为什么要学习JavaMail开发? 现在很多WEB应用在开发时都需要集成邮件发送功能,例如: 1. 给新注册的用户自动发送一封包含其注册信息的欢迎E-Mail. 2. 给过生日的注册会员自动发送一封表示祝贺的E-Mail. 3. 将网站的最新活动信息通过E-Mail发送给所有的注册会员. 二. 邮件服务器和协议 1. 邮件服务器: 要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器.例如现在Internet很多提供邮件服务的厂商:sina.so

javamail发送邮件的简单实例(转)

javamail发送邮件的简单实例 今天学习了一下JavaMail,javamail发送邮件确实是一个比较麻烦的问题.为了以后使用方便,自己写了段代码,打成jar包,以方便以后使用.呵呵 以下三段代码是我的全部代码,朋友们如果想用,直接复制即可. 第一个类:MailSenderInfo.java package com.util.mail;    /**    * 发送邮件需要使用的基本信息  *author by wangfun http://www.5a520.cn 小说520   */  

spring-boot实战【12】:Spring Boot中使用JavaMailSender发送邮件

相信使用过Spring的众多开发者都知道Spring提供了非常好用的JavaMailSender接口实现邮件发送.在Spring Boot的Starter模块中也为此提供了自动化配置.下面通过实例看看如何在Spring Boot中使用JavaMailSender发送邮件. 快速入门 在Spring Boot的工程中的pom.xml中引入spring-boot-starter-mail依赖: 1 2 3 4 <dependency> <groupId>org.springframew

javamail发送邮件(转)

今天学习了一下JavaMail,javamail发送邮件确实是一个比较麻烦的问题.为了以后使用方便,自己写了段代码,打成jar包,以方便以后使用.呵呵 以下三段代码是我的全部代码,朋友们如果想用,直接复制即可.jar包因为我不知道怎么传到javaeye上,所以朋友们回去自己打吧. 我的代码有三个类: 第一个类:MailSenderInfo.java Java代码   package com.util.mail; /** * 发送邮件需要使用的基本信息 */ import java.util.Pr

javamail发送邮件服务

一.需求 最近给一个朋友做了一个积分商城,主要是通过后台管理商品兑换信息,移动端使用微信公众号,用户想要要在移动端提供商品售后服务功能,客户从移动端发起售后服务,调用发送邮件的服务及时将需要告知的内容发送给商家客服人员: 二.实现方式 在项目中引用javamail jar包,从传统的实现方式我作了些改变,首先是要去设置一个发送邮件的账号,设置方法:账号邮箱账号>设置>账号,开启此项目服务: 通过账号的手机发送指定的短信内容,收到验证密码,作用为发送邮件的服务器账号. 再指定一个为客服收邮件的账