JavaWeb中使用JavaMail實(shí)現(xiàn)發(fā)送郵件功能實(shí)例詳解
現(xiàn)在很多的網(wǎng)站都提供有用戶注冊(cè)功能, 通常我們注冊(cè)成功之后就會(huì)收到一封來自注冊(cè)網(wǎng)站的郵件。郵件里面的內(nèi)容可能包含了我們的注冊(cè)的用戶名和密碼以及一個(gè)激活賬戶的超鏈接等信息。今天我們也來實(shí)現(xiàn)一個(gè)這樣的功能,用戶注冊(cè)成功之后,就將用戶的注冊(cè)信息以Email的形式發(fā)送到用戶的注冊(cè)郵箱當(dāng)中,實(shí)現(xiàn)發(fā)送郵件功能就得借助于JavaMail了。
一、搭建開發(fā)環(huán)境
1.1、創(chuàng)建Web項(xiàng)目

1.2、用戶注冊(cè)的Jsp頁(yè)面
register.jsp
<%@ page language="java" pageEncoding="UTF-"%>
<!DOCTYPE HTML>
<html>
<head>
<title>注冊(cè)頁(yè)面</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="注冊(cè)">
</form>
</body>
</html>
1.3、消息提示頁(yè)面
message.jsp
<%@ page language="java" pageEncoding="UTF-"%>
<!DOCTYPE HTML>
<html>
<head>
<title>消息提示頁(yè)面</title>
</head>
<body>
${message}
</body>
</html>
二、編寫處理用戶注冊(cè)處理程序
2.1、開發(fā)封裝用戶注冊(cè)信息的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ā)送郵件是一件非常耗時(shí)的事情,因此這里設(shè)計(jì)一個(gè)線程類來發(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就是一個(gè)線程類,這個(gè)線程類用于給指定的用戶發(fā)送Email
* @author: 孤傲蒼狼
* @date: -- 下午::
*
*/
public class Sendmail extends Thread {
//用于給用戶發(fā)送郵件的郵箱
private String from = "gacl@sohu.com";
//郵箱的用戶名
private String username = "gacl";
//郵箱的密碼
private String password = "郵箱密碼";
//發(fā)送郵件的服務(wù)器地址
private String host = "smtp.sohu.com";
private User user;
public Sendmail(User user){
this.user = user;
}
/* 重寫run方法的實(shí)現(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("用戶注冊(cè)郵件");
String info = "恭喜您注冊(cè)成功,您的用戶名:" + user.getUsername() + ",您的密碼:" + user.getPassword() + ",請(qǐng)妥善保管,如有問題請(qǐng)聯(lián)系網(wǎng)站客服!!";
message.setContent(info, "text/html;charset=UTF-");
message.saveChanges();
return message;
}
}
2.3、編寫處理用戶注冊(cè)的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("把用戶信息注冊(cè)到數(shù)據(jù)庫(kù)中");
//用戶注冊(cè)成功之后就使用用戶注冊(cè)時(shí)的郵箱給用戶發(fā)送一封Email
//發(fā)送郵件是一件非常耗時(shí)的事情,因此這里開辟了另一個(gè)線程來專門發(fā)送郵件
Sendmail send = new Sendmail(user);
//啟動(dòng)線程,線程啟動(dòng)之后就會(huì)執(zhí)行run方法來發(fā)送郵件
send.start();
//注冊(cè)用戶
//new UserService().registerUser(user);
request.setAttribute("message", "恭喜您,注冊(cè)成功,我們已經(jīng)發(fā)了一封帶了注冊(cè)信息的電子郵件,請(qǐng)查收,如果沒有收到,可能是網(wǎng)絡(luò)原因,過一會(huì)兒就收到了??!");
request.getRequestDispatcher("/message.jsp").forward(request, response);
}catch (Exception e) {
e.printStackTrace();
request.setAttribute("message", "注冊(cè)失敗!!");
request.getRequestDispatcher("/message.jsp").forward(request, response);
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
程序運(yùn)行效果如下:

現(xiàn)在很多網(wǎng)站都有這樣的功能,用戶注冊(cè)完成之后,網(wǎng)站根據(jù)我們注冊(cè)時(shí)填寫的郵箱給我們一封Email,然后點(diǎn)擊Email中的超鏈接去激活我們的用戶。這種功能就是這樣實(shí)現(xiàn)的。
在總結(jié)使用JavaMail發(fā)送郵件時(shí)發(fā)現(xiàn),將郵件發(fā)送到sina或者sohu的郵箱時(shí),不一定能夠馬上收取得到郵件,總是有延遲,有時(shí)甚至?xí)舆t很長(zhǎng)的時(shí)間,甚至?xí)划?dāng)成垃圾郵件來處理掉,或者干脆就拒絕接收,有時(shí)候?yàn)榱丝吹洁]件發(fā)送成功的效果,要等半天,實(shí)屬無奈啊。
以上所述是小編給大家介紹的java mail 發(fā)送郵件功能的實(shí)例代碼,希望對(duì)大家有所幫助!
- Java基于JavaMail實(shí)現(xiàn)向QQ郵箱發(fā)送郵件
- java中javamail發(fā)送帶附件的郵件實(shí)現(xiàn)方法
- java中javamail收發(fā)郵件實(shí)現(xiàn)方法
- Java程序中使用JavaMail發(fā)送帶圖片和附件的郵件
- 基于JavaMail的Java實(shí)現(xiàn)簡(jiǎn)單郵件發(fā)送功能
- 基于SSM框架+Javamail發(fā)送郵件的代碼實(shí)例
- Spring框架JavaMailSender發(fā)送郵件工具類詳解
- Java使用JavaMail API發(fā)送和接收郵件的代碼示例
- JavaMail實(shí)現(xiàn)發(fā)送超文本(html)格式郵件的方法
- 輕松學(xué)會(huì)使用JavaMail?API發(fā)送郵件
相關(guān)文章
Java 如何使用@Autowired注解自動(dòng)注入bean
這篇文章主要介紹了Java 使用@Autowired注解自動(dòng)注入bean的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
將java程序打成jar包在cmd命令行下執(zhí)行的方法
這篇文章主要給大家介紹了關(guān)于將java程序打成jar包在cmd命令行下執(zhí)行的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01
Java基礎(chǔ)將Bean屬性值放入Map中的實(shí)例
這篇文章主要介紹了Java基礎(chǔ)將Bean屬性值放入Map中的實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-07-07
Java 圖解Spring啟動(dòng)時(shí)的后置處理器工作流程是怎樣的
spring的后置處理器有兩類,bean后置處理器,bf(BeanFactory)后置處理器。bean后置處理器作用于bean的生命周期,bf的后置處理器作用于bean工廠的生命周期2021-10-10
Spring自帶的校驗(yàn)框架Validation的使用實(shí)例
今天小編就為大家分享一篇關(guān)于Spring自帶的校驗(yàn)框架Validation的使用實(shí)例,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-03-03
淺談Java中的n種隨機(jī)數(shù)產(chǎn)生辦法
眾所周知,隨機(jī)數(shù)是任何一種編程語言最基本的特征之一。而生成隨機(jī)數(shù)的基本方式也是相同的:產(chǎn)生一個(gè)0到1之間的隨機(jī)數(shù)??此坪?jiǎn)單,但有時(shí)我們也會(huì)忽略了一些有趣的功能。2015-09-09
Mybatis之映射實(shí)體類中不區(qū)分大小寫的解決
這篇文章主要介紹了Mybatis之映射實(shí)體類中不區(qū)分大小寫的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11

