最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何使用JavaMail發(fā)送郵件

 更新時間:2015年12月04日 09:45:39   作者:孤傲蒼狼  
這篇文章主要教大家如何使用JavaMail發(fā)送郵件在web應用中,實現(xiàn)用戶注冊成功之后,將用戶的注冊信息以Email的形式發(fā)送到用戶的注冊郵箱當中,感興趣的小伙伴們可以參考一下

現(xiàn)在很多的網(wǎng)站都提供有用戶注冊功能, 通常我們注冊成功之后就會收到一封來自注冊網(wǎng)站的郵件。郵件里面的內(nèi)容可能包含了我們的注冊的用戶名和密碼以及一個激活賬戶的超鏈接等信息。今天我們也來實現(xiàn)一個這樣的功能,用戶注冊成功之后,就將用戶的注冊信息以Email的形式發(fā)送到用戶的注冊郵箱當中,實現(xiàn)發(fā)送郵件功能就得借助于JavaMail了。

一、搭建開發(fā)環(huán)境

1.1、創(chuàng)建Web項目

  

1.2、用戶注冊的Jsp頁面

register.jsp

<%@ page language="java" pageEncoding="UTF-8"%>
<!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-8"%>
<!DOCTYPE HTML>
<html>
 <head>
  <title>消息提示頁面</title>
 </head>
 
 <body>
    ${message}
 </body>
</html>

二、編寫處理用戶注冊處理程序
2.1、開發(fā)封裝用戶注冊信息的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、編寫郵件發(fā)送功能

  發(fā)送郵件是一件非常耗時的事情,因此這里設計一個線程類來發(fā)送郵件

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就是一個線程類,這個線程類用于給指定的用戶發(fā)送Email
* @author: 孤傲蒼狼
* @date: 2015-1-12 下午10:43:48
*
*/ 
public class Sendmail extends Thread {
    //用于給用戶發(fā)送郵件的郵箱
  private String from = "gacl@sohu.com";
    //郵箱的用戶名
  private String username = "gacl";
    //郵箱的密碼
  private String password = "郵箱密碼";
    //發(fā)送郵件的服務器地址
  private String host = "smtp.sohu.com";
  
  private User user;
  public Sendmail(User user){
    this.user = user;
  }
  
  /* 重寫run方法的實現(xiàn),在run方法中發(fā)送郵件給指定的用戶
   * @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: 創(chuàng)建要發(fā)送的郵件
  * @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() + ",請妥善保管,如有問題請聯(lián)系網(wǎng)站客服!!";
    message.setContent(info, "text/html;charset=UTF-8");
    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("把用戶信息注冊到數(shù)據(jù)庫中");
      //用戶注冊成功之后就使用用戶注冊時的郵箱給用戶發(fā)送一封Email
      //發(fā)送郵件是一件非常耗時的事情,因此這里開辟了另一個線程來專門發(fā)送郵件
      Sendmail send = new Sendmail(user);
      //啟動線程,線程啟動之后就會執(zhí)行run方法來發(fā)送郵件
      send.start();
      
      //注冊用戶
      //new UserService().registerUser(user);
      request.setAttribute("message", "恭喜您,注冊成功,我們已經(jīng)發(fā)了一封帶了注冊信息的電子郵件,請查收,如果沒有收到,可能是網(wǎng)絡原因,過一會兒就收到了??!");
      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);
  }
}

程序運行效果如下:

  現(xiàn)在很多網(wǎng)站都有這樣的功能,用戶注冊完成之后,網(wǎng)站根據(jù)我們注冊時填寫的郵箱給我們一封Email,然后點擊Email中的超鏈接去激活我們的用戶。這種功能就是這樣實現(xiàn)的。

  在總結(jié)使用JavaMail發(fā)送郵件時發(fā)現(xiàn),將郵件發(fā)送到sina或者sohu的郵箱時,不一定能夠馬上收取得到郵件,總是有延遲,有時甚至會延遲很長的時間,甚至會被當成垃圾郵件來處理掉,或者干脆就拒絕接收,有時候為了看到郵件發(fā)送成功的效果,要等半天,實屬無奈啊。

相關(guān)文章

  • spring如何快速穩(wěn)定解決循環(huán)依賴問題

    spring如何快速穩(wěn)定解決循環(huán)依賴問題

    這篇文章主要介紹了spring如何快速穩(wěn)定解決循環(huán)依賴問題,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • Java負載均衡服務器實現(xiàn)上傳文件同步

    Java負載均衡服務器實現(xiàn)上傳文件同步

    這篇文章主要介紹了Java負載均衡服務器實現(xiàn)上傳文件同步,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09
  • spring?cloud?gateway中配置uri三種方式

    spring?cloud?gateway中配置uri三種方式

    gateway?組件是SpringCloud?組件中的網(wǎng)關(guān)組件,主要是解決路由轉(zhuǎn)發(fā)的問題,跟nginx有點類似,區(qū)別是nginx多用在前端上,gateway用在后端上,本文給大家介紹的非常詳細,需要的朋友參考下吧
    2023-08-08
  • 一文學會如何在SpringBoot中使用線程池執(zhí)行定時任務

    一文學會如何在SpringBoot中使用線程池執(zhí)行定時任務

    在開發(fā)現(xiàn)代應用程序時,定時任務是一項常見的需求,SpringBoot提供了一個強大的定時任務框架,可以輕松地執(zhí)行各種定時任務,結(jié)合線程池的使用,可以更好地管理任務的執(zhí)行,提高系統(tǒng)的性能和穩(wěn)定性,本文將介紹如何在Spring Boot中使用線程池執(zhí)行定時任務
    2023-06-06
  • 如何用Stream解決兩層List屬性求和問題

    如何用Stream解決兩層List屬性求和問題

    這篇文章主要介紹了如何用Stream解決兩層List屬性求和問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Java線程并發(fā)工具類CountDownLatch原理及用法

    Java線程并發(fā)工具類CountDownLatch原理及用法

    這篇文章主要介紹了Java線程并發(fā)工具類CountDownLatch原理及用法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • 詳解spring boot實現(xiàn)多數(shù)據(jù)源代碼實戰(zhàn)

    詳解spring boot實現(xiàn)多數(shù)據(jù)源代碼實戰(zhàn)

    本篇文章主要介紹了詳解spring boot實現(xiàn)多數(shù)據(jù)源代碼實戰(zhàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • SpringBoot項目實戰(zhàn)之數(shù)據(jù)交互篇

    SpringBoot項目實戰(zhàn)之數(shù)據(jù)交互篇

    這篇文章主要給大家介紹了關(guān)于SpringBoot項目實戰(zhàn)之數(shù)據(jù)交互篇的相關(guān)資料,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-03-03
  • Mybatis中isNotNull與isNotEmpty的使用心得

    Mybatis中isNotNull與isNotEmpty的使用心得

    這篇文章主要介紹了Mybatis中isNotNull與isNotEmpty的使用心得,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java實現(xiàn)發(fā)送手機短信語音驗證功能代碼實例

    Java實現(xiàn)發(fā)送手機短信語音驗證功能代碼實例

    這篇文章主要介紹了Java實現(xiàn)發(fā)送手機短信語音驗證功能代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09

最新評論

衡东县| 桦甸市| 凤山市| 泰州市| 湄潭县| 邵东县| 宣威市| 扎赉特旗| 潞西市| 福安市| 镇康县| 扎囊县| 焦作市| 彭泽县| 昂仁县| 郁南县| 古交市| 玉树县| 甘孜县| 澜沧| 安徽省| 东台市| 攀枝花市| 雷山县| 仪征市| 阳山县| 聂拉木县| 营口市| 涟源市| 滦平县| 宁阳县| 东阿县| 岫岩| 壶关县| 焉耆| 贵阳市| 昔阳县| 平邑县| 乐昌市| 精河县| 金门县|