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è)用戶(hù)的一個(gè)功能。我用到的MailServer是易郵郵件服務(wù)器,引用的是javax.mail.jar包。javamail顧名思義,提供給開(kāi)發(fā)者處理電子郵件相關(guān)的編程接口。它是Sun發(fā)布的用來(lái)處理email的API。它可以方便地執(zhí)行一些常用的郵件傳輸。
【常用類(lèi)介紹】
下面有一些常用的類(lèi),給大家介紹一下:
【Authenticator】
這個(gè)是一個(gè)抽象類(lèi),通過(guò)用戶(hù)名和密碼訪問(wèn)受保護(hù)的資源,這些資源就是郵件服務(wù)器。創(chuàng)建完成后,必須向 session 注冊(cè) Authenticator。然后,在需要認(rèn)證的時(shí)候,就會(huì)通知 Authenticator。
【Message】
這是一個(gè)抽象類(lèi)用來(lái)創(chuàng)建要發(fā)送的消息,比如主題,內(nèi)容啊。必須有一個(gè)子類(lèi)來(lái)實(shí)現(xiàn)方法。
【Session】
Session類(lèi)定義了一個(gè)基本郵件會(huì)話(session),是Java Mail API最高層入口類(lèi)。所有其它類(lèi)都是經(jīng)由這個(gè)session才得以生效。Session對(duì)象用Java.util.Properties對(duì)象獲取信息,如郵件服務(wù)器、用戶(hù)名、密碼及整個(gè)應(yīng)用程序中共享的其它信息。這個(gè)Session類(lèi)代表JavaMail中的一個(gè)郵件session。每一個(gè)基于JavaMail的應(yīng)用程序至少有一個(gè)session但是可以有任意多的session。
Session sendMailSession;
sendMailSession = Session.getInstance(props, null);
【Transport】
消息發(fā)送的最后一部分是使用Transport類(lèi)。這個(gè)類(lèi)用協(xié)議指定的語(yǔ)言發(fā)送消息(通常是SMTP)。它是抽象類(lèi),它的工作方式與Session有些類(lèi)似。僅調(diào)用靜態(tài)send() 方法,就能使用類(lèi)的缺省版本:Transport.send(message)?;蛘撸x者也可以從針對(duì)自己的協(xié)議的會(huì)話中獲得一個(gè)特定的實(shí)例,傳遞用戶(hù)名和密碼(如果不必要就不傳),發(fā)送消息,然后關(guān)閉連接。
【代碼實(shí)現(xiàn)】
mail工具類(lèi):
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ā)送工具類(lèi) * @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è)類(lèi),使用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 { //安裝用戶(hù)名查詢(xún)用戶(hù)的方法 private UserDao userDao; public void setUserDao(UserDao userDao) { this.userDao = userDao; } public User findByUsername(String username){ return userDao.findByUsername(username); } //業(yè)務(wù)層:完成 用戶(hù)注冊(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ù)激活碼查詢(xún)用戶(hù) public User findByCode(String code) { return userDao.findByCode(code); } // 修改用戶(hù)的狀態(tài)的方法 public void update(User existUser) { userDao.update(existUser); } // 用戶(hù)登錄的方法 public User login(User user) { return userDao.login(user); } }
最后實(shí)現(xiàn)了這樣的效果:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。
相關(guān)文章
spring配置文件解析失敗報(bào)”cvc-elt.1: 找不到元素 ''''beans'''' 的聲明”異常解決
這篇文章主要給大家介紹了關(guān)于spring配置文件解析失敗報(bào)”cvc-elt.1: 找不到元素 'beans' 的聲明”異常的解決方法,需要的朋友可以參考下2020-08-08apollo與springboot集成實(shí)現(xiàn)動(dòng)態(tài)刷新配置的教程詳解
這篇文章主要介紹了apollo與springboot集成實(shí)現(xiàn)動(dòng)態(tài)刷新配置,本文分步驟給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06mybatis中orderBy(排序字段)和sort(排序方式)引起的bug及解決
這篇文章主要介紹了mybatis中orderBy(排序字段)和sort(排序方式)引起的bug,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01Java實(shí)現(xiàn)微信網(wǎng)頁(yè)授權(quán)的示例代碼
這篇文章主要介紹了Java實(shí)現(xiàn)微信網(wǎng)頁(yè)授權(quán)的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07java 三種將list轉(zhuǎn)換為map的方法詳解
這篇文章主要介紹了java 三種將list轉(zhuǎn)換為map的方法詳解的相關(guān)資料,需要的朋友可以參考下2017-01-01舉例講解Java的Jackson庫(kù)中ObjectMapper類(lèi)的使用
這篇文章主要介紹了舉例講解Java的Jackson庫(kù)中ObjectMapper類(lèi)的使用,Jackson庫(kù)通常被用來(lái)實(shí)現(xiàn)Java的對(duì)象和JSON之間的轉(zhuǎn)換功能,需要的朋友可以參考下2016-01-01RestTemplate設(shè)置超時(shí)時(shí)間及返回狀態(tài)碼非200處理
這篇文章主要為大家介紹了RestTemplate設(shè)置超時(shí)時(shí)間及返回狀態(tài)碼非200處理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06