java發(fā)送javax.mail郵件實(shí)例講解
平時(shí)我們網(wǎng)上逛網(wǎng)站的時(shí)候,經(jīng)常會(huì)用到網(wǎng)站的注冊(cè)。有很多方法,比如發(fā)短信驗(yàn)證,發(fā)郵箱驗(yàn)證。最近在SSH框架下,做了一個(gè)簡(jiǎn)單的郵件發(fā)送激活鏈接到郵箱,然后激活注冊(cè)用戶的一個(gè)功能。我用到的MailServer是易郵郵件服務(wù)器,引用的是javax.mail.jar包。javamail顧名思義,提供給開(kāi)發(fā)者處理電子郵件相關(guān)的編程接口。它是Sun發(fā)布的用來(lái)處理email的API。它可以方便地執(zhí)行一些常用的郵件傳輸。
【常用類介紹】
下面有一些常用的類,給大家介紹一下:
【Authenticator】
這個(gè)是一個(gè)抽象類,通過(guò)用戶名和密碼訪問(wèn)受保護(hù)的資源,這些資源就是郵件服務(wù)器。創(chuàng)建完成后,必須向 session 注冊(cè) Authenticator。然后,在需要認(rèn)證的時(shí)候,就會(huì)通知 Authenticator。
【Message】
這是一個(gè)抽象類用來(lái)創(chuàng)建要發(fā)送的消息,比如主題,內(nèi)容啊。必須有一個(gè)子類來(lái)實(shí)現(xiàn)方法。
【Session】
Session類定義了一個(gè)基本郵件會(huì)話(session),是Java Mail API最高層入口類。所有其它類都是經(jīng)由這個(gè)session才得以生效。Session對(duì)象用Java.util.Properties對(duì)象獲取信息,如郵件服務(wù)器、用戶名、密碼及整個(gè)應(yīng)用程序中共享的其它信息。這個(gè)Session類代表JavaMail中的一個(gè)郵件session。每一個(gè)基于JavaMail的應(yīng)用程序至少有一個(gè)session但是可以有任意多的session。
Session sendMailSession;
sendMailSession = Session.getInstance(props, null);
【Transport】
消息發(fā)送的最后一部分是使用Transport類。這個(gè)類用協(xié)議指定的語(yǔ)言發(fā)送消息(通常是SMTP)。它是抽象類,它的工作方式與Session有些類似。僅調(diào)用靜態(tài)send() 方法,就能使用類的缺省版本:Transport.send(message)。或者,讀者也可以從針對(duì)自己的協(xié)議的會(huì)話中獲得一個(gè)特定的實(shí)例,傳遞用戶名和密碼(如果不必要就不傳),發(fā)送消息,然后關(guān)閉連接。
【代碼實(shí)現(xiàn)】
mail工具類:
package cn.itcast.shop.utils;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
/**
* 郵件發(fā)送工具類
* @author Zhouzhou
* @date 2016-1-1
* @time 上午08:52:47
*/
public class MailUitls {
public static void sendMail(String to,String code){
/**
* 1.獲取session
* 2.創(chuàng)建一個(gè)代碼郵件的對(duì)象message
* 3.發(fā)送郵件Transport
*/
/**
* 1.獲得連接對(duì)象
*/
Properties props=new Properties();
props.setProperty("mail.host","localhost");
Session session=Session.getDefaultInstance(props, new Authenticator(){
@Override
protected PasswordAuthentication getPasswordAuthentication() {
// TODO Auto-generated method stub
return new PasswordAuthentication("service@azz.com","111");
}
});
//2.創(chuàng)建郵件發(fā)送對(duì)象
Message message=new MimeMessage(session);
//3.設(shè)置發(fā)件人
try {
message.setFrom(new InternetAddress("service@azz.com"));
//設(shè)置收件人
message.addRecipient(RecipientType.TO, new InternetAddress(to));
//標(biāo)題
message.setSubject("來(lái)自周洲商城的官方激活郵件");
message.setContent("<h1>AZZ商城官方激活郵件!點(diǎn)下面鏈接完成激活操作!</h1><h3><a text/html;charset=UTF-8");
// 3.發(fā)送郵件:
Transport.send(message);
} catch (AddressException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
sendMail("aaa@azz.com","你的激活碼是azz19931016");
}
}
User的業(yè)務(wù)層在注冊(cè)的時(shí)候調(diào)用這個(gè)類,使用sendmail方法。
package cn.itcast.shop.user.service;
import org.springframework.transaction.annotation.Transactional;
import cn.itcast.shop.user.dao.UserDao;
import cn.itcast.shop.user.vo.User;
import cn.itcast.shop.utils.MailUitls;
import cn.itcast.shop.utils.UUIDUtils;
//業(yè)務(wù)層
@Transactional
public class UserService {
//安裝用戶名查詢用戶的方法
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public User findByUsername(String username){
return userDao.findByUsername(username);
}
//業(yè)務(wù)層:完成 用戶注冊(cè)
public void save(User user) {
// TODO Auto-generated method stub
//將數(shù)據(jù)存入數(shù)據(jù)庫(kù)
user.setState(0);//1已經(jīng)激活,0沒(méi)有激活
String code=UUIDUtils.getUUID()+UUIDUtils.getUUID();
user.setCode(code);
userDao.save(user);
// 發(fā)送激活郵件;
MailUitls.sendMail(user.getEmail(), code);
}
// 業(yè)務(wù)層根據(jù)激活碼查詢用戶
public User findByCode(String code) {
return userDao.findByCode(code);
}
// 修改用戶的狀態(tài)的方法
public void update(User existUser) {
userDao.update(existUser);
}
// 用戶登錄的方法
public User login(User user) {
return userDao.login(user);
}
}
最后實(shí)現(xiàn)了這樣的效果:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。
相關(guān)文章
詳解Java消息隊(duì)列-Spring整合ActiveMq
本篇文章主要介紹了詳解Java消息隊(duì)列-Spring整合ActiveMq ,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02
Mybatis動(dòng)態(tài)調(diào)用表名和字段名的解決方法
今天在項(xiàng)目開(kāi)發(fā)中有個(gè)業(yè)務(wù)是需要限制各個(gè)用戶對(duì)某些表里的字段查詢以及某些字段是否顯示,這種情況下,就需要構(gòu)建sql來(lái)動(dòng)態(tài)傳入表名、字段名了,下面給大家介紹mybatis動(dòng)態(tài)調(diào)用表名和字段名的解決方法,一起看看吧2016-10-10
java 方法泛型入?yún)和String的重載關(guān)系詳解
這篇文章主要介紹了java 方法泛型入?yún)和String的重載關(guān)系詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
java selenium教程之selenium詳細(xì)介紹
本文主要介紹Java selenium,這里整理了selenium的一些基本資料,此軟件主要用于Web UI自動(dòng)測(cè)試框架,有興趣的同學(xué)可以看一下2016-08-08
springboot使用自定義注解實(shí)現(xiàn)aop切面日志
這篇文章主要為大家詳細(xì)介紹了springboot使用自定義注解實(shí)現(xiàn)aop切面日志,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-09-09
MybatisPlus字段自動(dòng)填充失效,填充值為null的解決方案
這篇文章主要介紹了MybatisPlus字段自動(dòng)填充失效,填充值為null的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
SpringBoot使用MyBatis實(shí)現(xiàn)數(shù)據(jù)的CRUD
MyBatis是一個(gè)輕量級(jí)的對(duì)象關(guān)系映射(Object-Relational Mapping,ORM)框架,它允許開(kāi)發(fā)者通過(guò)編寫(xiě)SQL動(dòng)態(tài)查詢數(shù)據(jù)庫(kù),而無(wú)需顯式地操作JDBC,對(duì)于增刪改查操作,MyBatis提供了一種基于XML或注解的方式來(lái)進(jìn)行,本文介紹了SpringBoot使用MyBatis實(shí)現(xiàn)數(shù)據(jù)的CRUD2024-11-11
IDEA Project不顯示/缺失文件問(wèn)題及解決
在側(cè)邊欄的project模式下,如果發(fā)現(xiàn)缺少部分文件,可以嘗試關(guān)閉項(xiàng)目,打開(kāi)項(xiàng)目所在目錄,刪除目錄下的.idea文件夾,然后重新打開(kāi)項(xiàng)目即可解決2024-11-11
詳解如何為SpringBoot Web應(yīng)用的日志方便追蹤
在Web應(yīng)用程序領(lǐng)域,有效的請(qǐng)求監(jiān)控和可追溯性對(duì)于維護(hù)系統(tǒng)完整性和診斷問(wèn)題至關(guān)重要,SpringBoot是一種用于構(gòu)建Java應(yīng)用程序的流行框架,在本文中,我們探討了在SpringBoot中向日志添加唯一ID的重要性,需要的朋友可以參考下2023-11-11

