java網(wǎng)上商城開發(fā)之郵件發(fā)送功能(全)
最近在學(xué)習(xí)網(wǎng)上商城時,接觸到了一個郵件發(fā)送的功能。之前一直在使用郵箱進行發(fā)送郵件,但是其中的具體如何運轉(zhuǎn)的卻不知道是怎么回事。那么郵件發(fā)送究竟是怎么一回事呢?
郵件發(fā)送過程:
過程描述:首先是發(fā)送人將郵件通過客戶端軟件發(fā)送到特定的服務(wù)器上,然后通過電子郵件簡單傳輸協(xié)議(SMTP)來進行傳輸,收件人通過POP3協(xié)議將郵件從服務(wù)器上接受回來。這樣就實現(xiàn)了郵件之間的相互傳送。
實現(xiàn)過程:
在有網(wǎng)絡(luò)的情況下,我們可以直接使用搜狐、網(wǎng)易等郵箱進行發(fā)送。那么如何在沒有網(wǎng)絡(luò)的情況下,實現(xiàn)內(nèi)部之間的發(fā)送呢?
首先需要安裝配置一個服務(wù)器,視頻中使用的是易郵郵件服務(wù)器,該軟件的安裝比較簡單,安裝成功之后會有一個失敗提示,如下:
該問題沒有影響(暫時還沒有遇到什么問題)我們的功能,可以忽略。安裝完成之后需要對其進行一些配置。先進行服務(wù)器設(shè)置,打開工具——>服務(wù)器設(shè)置:設(shè)置自己服務(wù)器地址的域名(類似于我們使用的網(wǎng)易郵箱的域名@后的163.com)
然后添加新賬號:設(shè)置名稱和密碼
添加之后的效果如下:
服務(wù)器配置完成之后,進行客戶端的安裝與配置,因為本機已經(jīng)安裝了foxmail的最新版本,為了不造成混亂,所以用foxmail6.5進行設(shè)置,其中安裝過程不再敘述。
首先要新添加用戶賬戶(如果在安裝過程中已經(jīng)設(shè)置了測試的用戶就不用再添加),填入測試的賬戶,如下:
點擊下一步,設(shè)置服務(wù)類型和服務(wù)器,這里需要注意服務(wù)器的配置,由于自己是在本地進行郵件傳送,所以發(fā)、送郵件服務(wù)器都設(shè)置為本地:localhost。
設(shè)置好之后,下一步,進行測試:
成功之后即可關(guān)閉配置,此時配置基本上就完成了
在此次配置過程中需要注意:
1、配置服務(wù)器的域名,并且添加一些賬戶
2、配置客戶端時,注意接收服務(wù)器地址的設(shè)置、服務(wù)器類型等問題。
至此,我們發(fā)送郵件所需要的環(huán)境已經(jīng)配置完成,具體的代碼實現(xiàn)過程,將在下篇進行詳細介紹。通過這次的學(xué)習(xí),了解了郵件服務(wù)的基本原理,知道了我們平常發(fā)送郵件的過程。同時,也讓自己對一些服務(wù)器設(shè)置、域名及類型有了新的認識,之前也曾遇到過foxmail無法工作的問題,現(xiàn)在基本上知道其問題處在何處了。知識,總是在不斷的實踐中獲得的,而且是需要不斷的反復(fù)學(xué)習(xí)和鍛煉。
以上基本上將發(fā)送的原理說了一下,以及如何進行配置郵件服務(wù)。下面主要說一下發(fā)送郵件的一些具體的實現(xiàn)過程。
代碼實現(xiàn)發(fā)送過程主要分為三個步驟:
第一步是獲得連接,通過java中的Properties類來進行讀取配置文件,調(diào)用基類的一些方法進行基礎(chǔ)的設(shè)置以及連接設(shè)置。
// 1、獲得連接 Properties props=new Properties();//Properties是java中的一個重要的類,主要用于讀取java的配置文件 //設(shè)置連接的服務(wù)器 props.setProperty("mail.host", "localhost");//調(diào)用Hashtable的方法put,通過調(diào)用基類的put方法來設(shè)置鍵值對 Session session=Session.getInstance(props, new Authenticator(){ @Override protected PasswordAuthentication getPasswordAuthentication() { // TODO Auto-generated method stub //設(shè)置自己的服務(wù)郵件地址和密碼 return new PasswordAuthentication("service@pengbo.com","1"); } });
第二步是進行創(chuàng)建郵件對象,主要是通過Message這個載體進行封裝信息,Message是一個抽象類,已知的實現(xiàn)類有MimeMessage。
// 2、創(chuàng)建郵件對象 Message message=new MimeMessage(session); // 設(shè)置發(fā)送人 try { //設(shè)置服務(wù)端 message.setFrom(new InternetAddress("service@pengbo.com")); // 設(shè)置收件人 message.addRecipient(RecipientType.TO, new InternetAddress(to)); // 設(shè)置標(biāo)題 message.setSubject("購物激活郵件"); // 設(shè)置郵件正文 message.setContent("<h1>購物激活郵件,點下面鏈接完成激活操作!</h1><h3><a >http://192.168.21.84:8080/shop/user_active.action?code="+code+"</a></h3>", "text/html;charset=UTF-8");
第三步是發(fā)送郵件
// 3、發(fā)送郵件 Transport.send(message); 這樣發(fā)送郵件的主要流程就實現(xiàn)了,然后在此類中定義主方法: public static void main(String[] args){ //要發(fā)送的對象及驗證碼 sendMail("a@pengbo.com","11111111"); } 在Service層進行調(diào)用郵件發(fā)送的方法即可: // 發(fā)送激活郵件 MailUitls.sendMail(user.getEmail(), code);
具體的知識積累:
1、Properties 主要獲取配置文件信息,主要的方法有g(shù)etProperty ( String key)、load ( InputStream inStream)、setProperty ( String key, String value)、store ( OutputStream out, String comments)、clear ()
2、Session 是一對配置信息的集合,主要作用是接收各種配置屬性信息,初始化JavaMail環(huán)境
3、Message 是一個抽象類,它實現(xiàn)接口Part,并定義了一些屬性
4、transport是指傳輸郵件,與之對應(yīng)的是store存儲功能。
功能雖然實現(xiàn)了,但是其中用到的一些類還需要進行深入的學(xué)習(xí)和研究。就目前而言,僅僅有了一個入門,知道了在JavaMail中,有Properties、Session、Message這幾個重要的類。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助。
相關(guān)文章
eclipse+myeclipse 環(huán)境配置方法
eclipse+myeclipse配置環(huán)境2009-07-07基于kafka實現(xiàn)Spring Cloud Bus消息總線
消息總線是一種通信工具,可以在機器之間互相傳輸消息、文件等,這篇文章主要介紹了如何利用kafka實現(xiàn)SpringCloud Bus消息總線,感興趣的可以學(xué)習(xí)一下2022-04-04基于hibernate實現(xiàn)的分頁技術(shù)實例分析
這篇文章主要介紹了基于hibernate實現(xiàn)的分頁技術(shù),結(jié)合實例形式分析了Hibernate分頁技術(shù)的原理,實現(xiàn)步驟與相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2016-03-03SpringBoot3中數(shù)據(jù)庫集成實踐詳解
項目工程中,集成數(shù)據(jù)庫實現(xiàn)對數(shù)據(jù)的增曬改查管理,是最基礎(chǔ)的能力,所以下面小編就來和大家講講SpringBoot3如何實現(xiàn)數(shù)據(jù)庫集成,需要的可以參考下2023-08-08如何在Java SpringBoot項目中配置動態(tài)數(shù)據(jù)源你知道嗎
這篇文章主要介紹了SpringBoot如何在運行時動態(tài)添加數(shù)據(jù)源,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2021-09-09NetBeans安裝提示neatbeans cannot find java 1.8 or higher
今天小編就為大家分享一篇關(guān)于NetBeans安裝提示neatbeans cannot find java 1.8 or higher,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-04-04Java8使用Stream流實現(xiàn)List列表查詢、統(tǒng)計、排序以及分組
List的Stream流操作可以簡化我們的代碼,減少程序運行的壓力,應(yīng)對上面的問題,下面這篇文章主要給大家介紹了關(guān)于Java8使用Stream流實現(xiàn)List列表查詢、統(tǒng)計、排序以及分組的相關(guān)資料,需要的朋友可以參考下2023-06-06SpringBoot集成ElaticJob定時器的實現(xiàn)代碼
這篇文章主要介紹了SpringBoot集成ElaticJob定時器的實現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-06-06Win10系統(tǒng)下配置java環(huán)境變量的全過程
這篇文章主要給大家介紹了關(guān)于Win10系統(tǒng)下配置java環(huán)境變量的相關(guān)資料,文中通過圖文介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11被遺忘的Java關(guān)鍵字transient的使用詳解
在 Java 中,transient 是一個關(guān)鍵字,用于指定一個類的字段(成員變量)在序列化時應(yīng)該被忽略。本文將通過示例為大家簡單講講transient的使用,需要的可以參考一下2023-04-04