JavaWeb中使用JavaMail实现发送邮件功能实例详解

 更新时间:2016年05月29日 11:29:59   作者:孤傲苍狼  
这篇文章主要介绍了JavaWeb中使用JavaMail实现发送邮件功能的实例代码,非常不错具有参考借鉴价值,感兴趣的朋友一起看看吧

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

一、搭建开发环境

1.1、创建Web项目

  

1.2、用户注册的Jsp页面

register.jsp

<%@ page language="java" pageEncoding="UTF-"%>
<!DOCTYPE HTML>
<html>
<head>
<title>注册页面</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/servlet/RegisterServlet" method="post">
用户名:<input type="text" name="username"><br/>
密码:<input type="password" name="password"><br/>
邮箱:<input type="text" name="email"><br/>
<input type="submit" value="注册">
</form>
</body>
</html>

1.3、消息提示页面

message.jsp

<%@ page language="java" pageEncoding="UTF-"%>
<!DOCTYPE HTML>
<html>
<head>
<title>消息提示页面</title>
</head>
<body>
${message}
</body>
</html>

二、编写处理用户注册处理程序

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

User.java

package me.gacl.domain;
public class User {
private String username;
private String password;
private String email;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}

2.2、编写邮件发送功能

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

package me.gacl.web.controller;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import me.gacl.domain.User;
/**
* @ClassName: Sendmail
* @Description: Sendmail类继承Thread,因此Sendmail就是一个线程类,这个线程类用于给指定的用户发送Email
* @author: 孤傲苍狼
* @date: -- 下午::
*
*/ 
public class Sendmail extends Thread {
//用于给用户发送邮件的邮箱
private String from = "gacl@sohu.com";
//邮箱的用户名
private String username = "gacl";
//邮箱的密码
private String password = "邮箱密码";
//发送邮件的服务器地址
private String host = "smtp.sohu.com";
private User user;
public Sendmail(User user){
this.user = user;
}
/* 重写run方法的实现,在run方法中发送邮件给指定的用户
* @see java.lang.Thread#run()
*/
@Override
public void run() {
try{
Properties prop = new Properties();
prop.setProperty("mail.host", host);
prop.setProperty("mail.transport.protocol", "smtp");
prop.setProperty("mail.smtp.auth", "true");
Session session = Session.getInstance(prop);
session.setDebug(true);
Transport ts = session.getTransport();
ts.connect(host, username, password);
Message message = createEmail(session,user);
ts.sendMessage(message, message.getAllRecipients());
ts.close();
}catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* @Method: createEmail
* @Description: 创建要发送的邮件
* @Anthor:孤傲苍狼
*
* @param session
* @param user
* @return
* @throws Exception
*/ 
public Message createEmail(Session session,User user) throws Exception{
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.setRecipient(Message.RecipientType.TO, new InternetAddress(user.getEmail()));
message.setSubject("用户注册邮件");
String info = "恭喜您注册成功,您的用户名:" + user.getUsername() + ",您的密码:" + user.getPassword() + ",请妥善保管,如有问题请联系网站客服!!";
message.setContent(info, "text/html;charset=UTF-");
message.saveChanges();
return message;
}
}

2.3、编写处理用户注册的Servlet

package me.gacl.web.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import me.gacl.domain.User;
import me.gacl.service.UserService;
public class RegisterServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try{
String username = request.getParameter("username");
String password = request.getParameter("password");
String email = request.getParameter("email");
User user = new User();
user.setEmail(email);
user.setPassword(password);
user.setUsername(username);
System.out.println("把用户信息注册到数据库中");
//用户注册成功之后就使用用户注册时的邮箱给用户发送一封Email
//发送邮件是一件非常耗时的事情,因此这里开辟了另一个线程来专门发送邮件
Sendmail send = new Sendmail(user);
//启动线程,线程启动之后就会执行run方法来发送邮件
send.start();
//注册用户
//new UserService().registerUser(user);
request.setAttribute("message", "恭喜您,注册成功,我们已经发了一封带了注册信息的电子邮件,请查收,如果没有收到,可能是网络原因,过一会儿就收到了!!");
request.getRequestDispatcher("/message.jsp").forward(request, response);
}catch (Exception e) {
e.printStackTrace();
request.setAttribute("message", "注册失败!!");
request.getRequestDispatcher("/message.jsp").forward(request, response);
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}

  程序运行效果如下:

  

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

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

以上所述是小编给大家介绍的java mail 发送邮件功能的实例代码,希望对大家有所帮助!

相关文章

  • 详解eclipse项目中.classpath文件的使用

    详解eclipse项目中.classpath文件的使用

    这篇文章主要介绍了详解eclipse项目中.classpath文件的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • PowerJob的DispatchStrategy方法工作流程源码解读

    PowerJob的DispatchStrategy方法工作流程源码解读

    这篇文章主要为大家介绍了PowerJob的DispatchStrategy方法工作流程源码解读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • Java线程池7个参数的含义

    Java线程池7个参数的含义

    这篇文章主要介绍了Java线程池7个参数的含义,所谓的线程池的 7 大参数是指,在使用 ThreadPoolExecutor 创建线程池时所设置的 7 个参数,下文更多详细内容,需要的小伙伴可以参考一下
    2022-05-05
  • Java instanceof用法详解及实例代码

    Java instanceof用法详解及实例代码

    这篇文章主要介绍了Java instanceof用法详解及实例代码的相关资料,需要的朋友可以参考下
    2017-02-02
  • Java三目运算符的实战案例

    Java三目运算符的实战案例

    三目运算符在java中运用可以说非常的广泛,下面这篇文章主要给大家介绍了关于Java三目运算符的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • java由JABXContext注解读取xml配置文件方式

    java由JABXContext注解读取xml配置文件方式

    这篇文章主要介绍了java由JABXContext注解读取xml配置文件方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • 解决springcloud阿里云OSS文件访问跨域问题的实现

    解决springcloud阿里云OSS文件访问跨域问题的实现

    本文主要介绍了解决springcloud阿里云OSS文件访问跨域问题的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • 你真的懂java的日志系统吗

    你真的懂java的日志系统吗

    日志管理的第一件事,就是日志的收集,日志收集是开发者必备的技巧,不管是哪个开发语言,哪个开发平台,日志收集的插件都是有很多选择的,下面这篇文章主要给大家介绍了关于java日志系统的相关资料,需要的朋友可以参考下
    2022-02-02
  • MybatisPlus搭建项目环境及分页插件

    MybatisPlus搭建项目环境及分页插件

    Mybatis-Plus(简称MP)是一个Mybatis的增强工具,在Mybatis的基础上只做增强不做改变,为简化开发、提高效率而生,下面这篇文章主要给大家介绍了关于MybatisPlus搭建项目环境及分页插件的相关资料,需要的朋友可以参考下
    2022-11-11
  • springboot定时任务@Scheduled执行多次的问题

    springboot定时任务@Scheduled执行多次的问题

    这篇文章主要介绍了springboot定时任务@Scheduled执行多次问题的解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10

最新评论