




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 郵件系統(tǒng)優(yōu)化文檔整理學(xué)習(xí)目的:提高自身能力,增強(qiáng)解決問(wèn)題的能力,養(yǎng)成獨(dú)立思考的習(xí)慣學(xué)習(xí)內(nèi)容:學(xué)習(xí)郵件系統(tǒng)開(kāi)發(fā)的基礎(chǔ)知識(shí)并對(duì)現(xiàn)有的一個(gè)郵件系統(tǒng)優(yōu)化,實(shí)現(xiàn)郵件發(fā)送圖片時(shí)將圖片資源內(nèi)嵌到郵件內(nèi)容中去學(xué)習(xí)過(guò)程:1、 熟悉郵件系統(tǒng)的基礎(chǔ)知識(shí),了解郵件傳輸協(xié)議(SMTP協(xié)議、POP3協(xié)議等)(1) SMTP(Simple Mail Transfer Protocol,簡(jiǎn)單郵件傳輸協(xié)議)定義了郵件客戶(hù)端軟件與SMTP服務(wù)器之間以及兩臺(tái)SMTP服務(wù)器之間的通信規(guī)則。SMTP協(xié)議的通信雙方采用一問(wèn)一答的命令/響應(yīng)形式進(jìn)行對(duì)話(huà)。(2) POP3協(xié)議定義了郵件客戶(hù)端程序與POP3服務(wù)器進(jìn)行通信的具體規(guī)則和細(xì)節(jié)。用
2、戶(hù)要從郵件服務(wù)器提供商提供的電子郵箱來(lái)獲取自己的電子郵件,需要通過(guò)郵件服務(wù)提供商的POP3郵件服務(wù)器來(lái)幫助完成。2、 了解電子郵件的工作原理(假設(shè)lyk向lhl發(fā)送郵件)(1) lyk的郵件客戶(hù)端程序與對(duì)應(yīng)的SMTP服務(wù)器建立網(wǎng)絡(luò)連接,并以其用戶(hù)名和密碼登錄后使用SMTP協(xié)議把郵件發(fā)送到sina的SMTP服務(wù)器(2) Sina的SMTP服務(wù)器收到lyk提交的電子郵件后,首先根據(jù)收件人的得知后綴判斷接收者的郵件地址是否屬于該SMTP服務(wù)器的管轄范圍,如果是就直接把郵件存儲(chǔ)到收件人的郵箱中,否則sina的SMTP服務(wù)器想DNS服務(wù)器查詢(xún)收件人的郵件地址后綴所表示的域名的MX記錄,與163的SMTP
3、服務(wù)器建立連接并采用SMTP協(xié)議吧郵件發(fā)送給163的SMTP服務(wù)器。(3) 163的SMTP服務(wù)器收到sina的SMTP服務(wù)器發(fā)來(lái)的電子郵件后,也將根據(jù)收件人的地址判斷該郵件是否屬于該SMTP服務(wù)器的管轄范圍,如果是就直接把郵件存儲(chǔ)到收件人的郵箱中,否則163的SMTP服務(wù)器可能繼續(xù)轉(zhuǎn)發(fā)這封電子郵件,也可能丟棄這封電子郵件。(4) 用戶(hù)lhl通過(guò)郵件客戶(hù)端與163的POP3/IMAP服務(wù)器建立網(wǎng)絡(luò)連接,登錄后就可以通過(guò)POP3或IMAP協(xié)議瞎看郵箱中是否有新郵件。如果有,則用POP3或IMAP協(xié)議讀取郵箱中的郵件。3、 創(chuàng)建HTML格式的郵件在發(fā)送郵件的過(guò)程中可能會(huì)發(fā)送圖片,但是由于java自
4、帶的編輯器是純文本框,無(wú)法插入圖片,所以需要?jiǎng)?chuàng)建HTML格式的郵件。郵件正文用HTML文本表示時(shí),可以使用HTML文件的特性來(lái)豐富郵件正文,加入一些圖片和聲音等。4、 包含內(nèi)嵌圖片的復(fù)雜郵件如上所說(shuō),創(chuàng)建HTML格式的郵件能夠添加圖片等,在html頁(yè)面中直接嵌入圖片數(shù)據(jù)通常是在html頁(yè)面中應(yīng)用圖片的鏈接,如:<img src=" 但是,這樣的前提是我們需要將圖片先上傳到指定的網(wǎng)站,然后獲取外鏈。一方面 略麻煩,最主要的是存儲(chǔ)圖片的網(wǎng)站是否持續(xù)的支持外鏈引用。所以,將圖片直接插入到html頁(yè)面中。如<img src="data:image/png;base64,
5、.">其中base64逗號(hào)之后的就是將圖片經(jīng)過(guò)base64編碼后的數(shù)據(jù)。5、 如何實(shí)現(xiàn)圖片的嵌入實(shí)現(xiàn)郵件正文中圖片的嵌入,其實(shí)就是從郵件的html文件中將圖片的絕對(duì)URL解析出來(lái)再用base64編碼,將所得編碼以上訴的<img src="data:image/png;base64,.">形式替換原來(lái)的img標(biāo)簽的src屬性值操作過(guò)程1. 由前面的學(xué)習(xí)可知實(shí)現(xiàn)郵件正文的圖片嵌入,需要以<img src="data:image/png;base64,.">形式插入圖片。其中要將圖片進(jìn)行base64編碼,base64方法
6、如下:import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder;public static String GetImageStr() /將圖片文件轉(zhuǎn)化為字節(jié)數(shù)組字符串,并對(duì)其進(jìn)行Base64編碼處理 String imgFile = "111.jpg"/待處理的圖片 /File f=new File(imgFile); f.length() FileInputStream in = null; byte data = null; FileChannel fc= null; /讀取圖片字節(jié)數(shù)組 try in = n
7、ew FileInputStream(imgFile); fc=in.getChannel(); data = new byte(int)fc.size();/in.available(); in.read(data); in.close(); catch (IOException e) e.printStackTrace(); /對(duì)字節(jié)數(shù)組Base64編碼 BASE64Encoder encoder = new BASE64Encoder(); return "data:image/jpg;base64," + encoder.encode(data);/返回Base64
8、編碼過(guò)的字節(jié)數(shù)組字符串 2. 對(duì)于網(wǎng)絡(luò)圖片和本地圖片,需要先通過(guò)圖片網(wǎng)址或者本地目錄打開(kāi)圖片,讀取圖片數(shù)據(jù),才能實(shí)現(xiàn)對(duì)圖片的base64編碼。從本地讀取圖片的方法:public static String GetImageStr(String imgFile)/imgFile 為本地圖片的目錄 /將圖片文件轉(zhuǎn)化為字節(jié)數(shù)組字符串,并對(duì)其進(jìn)行Base64編碼處理 /String imgFile = "111.jpg"/待處理的圖片 /File f=new File(imgFile); f.length() FileInputStream in = null; byte data
9、 = null; FileChannel fc= null; /讀取圖片字節(jié)數(shù)組 try in = new FileInputStream(imgFile);/imgFile 為本地圖片的目錄 fc=in.getChannel(); data = new byte(int)fc.size();/in.available(); in.read(data); in.close(); catch (IOException e) e.printStackTrace(); 從網(wǎng)絡(luò)通過(guò)URL讀取圖片:FileOutputStream fos = null;BufferedInputStream bis =
10、 null;HttpURLConnection httpUrl = null;URL url = null;int BUFFER_SIZE = 1024;byte buf = new byteBUFFER_SIZE;int size = 0;try url = new URL(destUrl);httpUrl = (HttpURLConnection) url.openConnection();httpUrl.connect();bis = new BufferedInputStream(httpUrl.getInputStream();fos = new FileOutputStream(&
11、quot;f:haha.jpg");while (size = bis.read(buf) != -1) fos.write(buf, 0, size);3. 通過(guò)以上對(duì)郵件系統(tǒng)開(kāi)發(fā)基礎(chǔ)知識(shí)的學(xué)習(xí),初步了解了郵件發(fā)送的原理和圖片嵌入的方式。實(shí)現(xiàn)圖片的嵌入,就是解析郵件HTML文件的img標(biāo)簽的src屬性。可采取兩種方式對(duì)html解析:htmlparser或者jsoup用htmlparser解析: Parser parser = new Parser();parser.createParser(strline, "UTF-8");/strline是要解析的html文
12、件內(nèi)容/ parser.setURL(url);NodeFilter filter = new TagNameFilter("img");NodeListnodes=(NodeList)parser.extractAllNodesThatMatch(filter); if (nodes != null) for (int i = 0; i < nodes.getLength(); i+) Node textnode = (Node) nodes.item(i);if (textnode instanceof ImageTag) ImageTag imageTag =
13、(ImageTag) textnode;url = imageTag.getAttribute("src"); / 獲得html文本的 原來(lái)的src屬性URL ur = new URL(url);if (ur.getProtocol() = "http") s.imge = url;imageTag.setImageURL(s.save(s.imge);/對(duì)圖片編碼并替換原src的URL else local.strImg = url;imageTag.setImageURL(local.GetImageStr(local.strImg);/對(duì)圖片編碼并
14、替換原src的URL 用jsoup解析:Document doc = Jsoup.parse(strbuf);/創(chuàng)建Document對(duì)象解析html文檔內(nèi)容Elements jpg = doc.select("imgsrc");/建立對(duì)象查找doc中的img標(biāo)簽的src屬性String imgUrl = jpg.attr("src");/獲取img標(biāo)簽的src屬性 /System.out.println(imgUrl);/如果src的值是以http開(kāi)頭則說(shuō)明該圖片為網(wǎng)絡(luò)圖片,調(diào)用savepicture對(duì)圖片進(jìn)行bsae64編碼if (imgUrl.tri
15、m().startsWith("http") String change = s.save(imgUrl);/ System.out.println(change);/jpg.removeattr(jpg.attr("src"), change);jpg.attr("src", change);/將base64編碼后的地址替換掉原來(lái)的src的值System.out.println(doc);FileOutputStream fos = new FileOutputStream("doc", false);Outpu
16、tStreamWriter osw = new OutputStreamWriter(fos, "utf-8");osw.write(doc.html();/將更改過(guò)img標(biāo)簽的src屬性的html文檔保存在當(dāng)前目錄的doc.html文件中osw.close();/src為本地目錄,則調(diào)用base64對(duì)本地圖片進(jìn)行編碼else String change = local.GetImageStr(imgUrl);/ System.out.println(change);/jpg.removeattr(jpg.attr("src"), change);jpg
17、.attr("src", change);/將base64編碼后的地址替換掉原來(lái)的src的值System.out.println(doc);FileOutputStream fos = new FileOutputStream("doc", false);OutputStreamWriter osw = new OutputStreamWriter(fos, "utf-8");osw.write(doc.html();/將更改過(guò)img標(biāo)簽的src屬性的html文檔保存在當(dāng)前目錄的doc.html文件中osw.close();4. 實(shí)現(xiàn)
18、郵件圖片嵌入的代碼:package html;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileOutputStream;import java.io.FileReader;import java.io.FileWriter;import java.io.OutputStreamWriter;import org.jsoup.nodes.Document;import org.jsoup.Jsoup;import org.jsoup.select.Elements;public clas
19、s htmlparser public static void main(String args) savepicture s = new savepicture();base64 local = new base64();try FileReader fr = new FileReader("f:/in.html");/ 打開(kāi)本地的html文檔BufferedReader br = new BufferedReader(fr);FileWriter fw = new FileWriter("f:/change.html");BufferedWriter
20、 bw = new BufferedWriter(fw);String strline = ""String strbuf = ""/ 緩存文檔內(nèi)容while (br.ready() strline = br.readLine();strbuf += strline;bw.write(strline);bw.newLine();Document doc = Jsoup.parse(strbuf);/ 創(chuàng)建Document對(duì)象解析html文檔內(nèi)容Elements jpg = doc.select("imgsrc");/ 建立對(duì)象查找do
21、c中的img標(biāo)簽的src屬性String imgUrl = jpg.attr("src");/ 獲取img標(biāo)簽的src屬性/ System.out.println(imgUrl);/ 如果src的值是以http開(kāi)頭則說(shuō)明該圖片為網(wǎng)絡(luò)圖片,調(diào)用savepicture對(duì)圖片進(jìn)行bsae64編碼if (imgUrl.trim().startsWith("http") String change = s.save(imgUrl);/ System.out.println(change);/ jpg.removeattr(jpg.attr("src&qu
22、ot;), change);jpg.attr("src", change);/ 將base64編碼后的地址替換掉原來(lái)的src的值System.out.println(doc);FileOutputStream fos = new FileOutputStream("doc", false);OutputStreamWriter osw = new OutputStreamWriter(fos, "utf-8");osw.write(doc.html();osw.close();/ src為本地目錄,則調(diào)用base64對(duì)本地圖片進(jìn)行編碼
23、else String change = local.GetImageStr(imgUrl);/ System.out.println(change);/ jpg.removeattr(jpg.attr("src"), change);jpg.attr("src", change);/ 將base64編碼后的地址替換掉原來(lái)的src的值System.out.println(doc);FileOutputStream fos = new FileOutputStream("doc", false);OutputStreamWriter osw = new OutputStreamWriter(fos, "utf-8");osw.write(doc.html();osw.close();/ System.out.println(strbuf);bw.flush();bw.close();br.close();fw.close();br.close();fr.close(); catch (Exception e) e.printStackTrace();private static void attr(String imgUrl, String change) / TODO
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 貼墻布合同范本
- 箱式變壓器租賃合同范本
- 樣板間設(shè)計(jì)合同范本
- 管理軟件系統(tǒng)項(xiàng)目合作協(xié)議書(shū)范本
- 校企合作實(shí)踐教學(xué)基地協(xié)議書(shū)范本
- 第三單元第15課《Python的圖形界面設(shè)計(jì)》教學(xué)設(shè)計(jì) 2023-2024學(xué)年浙教版(2020)初中信息技術(shù)八年級(jí)上冊(cè)
- 醫(yī)療設(shè)備購(gòu)銷(xiāo)合同
- 酒店員工勞動(dòng)合同
- 電視機(jī)銷(xiāo)售協(xié)議
- 找次品(教學(xué)設(shè)計(jì))-2023-2024學(xué)年五年級(jí)下冊(cè)數(shù)學(xué)人教版
- 安徽省歷年中考語(yǔ)文現(xiàn)代文閱讀之非連續(xù)性文本閱讀6篇(截至2024年)
- GB/T 23694-2024風(fēng)險(xiǎn)管理術(shù)語(yǔ)
- 2025年北京青年政治學(xué)院高職單招高職單招英語(yǔ)2016-2024年參考題庫(kù)含答案解析
- 《典型的光器件AWG》課件
- 出血熱知識(shí)培訓(xùn)課件
- 廣東省汕頭市潮南區(qū)2024-2025學(xué)年高一上學(xué)期期末教學(xué)質(zhì)量監(jiān)測(cè)英語(yǔ)試卷(無(wú)答案)
- 2024年度工業(yè)自動(dòng)化設(shè)備維護(hù)保養(yǎng)及上門(mén)維修合同3篇
- 2025年公司總經(jīng)理年終總結(jié)工作報(bào)告
- 安徽省“江淮十校”2024屆高考化學(xué)一模試卷含解析
- 圖書(shū)外借服務(wù)計(jì)劃
- 軟考系統(tǒng)集成項(xiàng)目管理工程師教程完整版
評(píng)論
0/150
提交評(píng)論