將富文本插件 UEditor 的內容(文本+圖片+附件)發送郵件

主要思路如下:

  (1)文本的內容可以直接調用API 的方法即可, var html=UE.getEditor('editor').getContent();

  (2)獲取圖片。由於同事已經做過該插件的集成,用戶上傳圖片保存到本地的功能已實現。我們只需要將第一步獲取到的html內容的 img 部分的src 替換。

替換 content 的 <img src=""> src值的部分。


Set imgSet = newMap.entrySet();
Iterator imgIteraotr = imgSet.iterator();
while (imgIteraotr.hasNext()) {
	Entry entry = (Entry) imgIteraotr.next();
        //content爲第一步獲取的html內容
        //設置的cid和下面代碼的cid一致
	content = content.replace(entry.getKey().toString(), "cid:" + entry.getKey().toString());
}

構建郵件 MimeMessage 部分

MimeBodyPart image = new MimeBodyPart();
//文件地址
DataHandler img = new DataHandler(new FileDataSource(entry.getValue().toString()));
image.setDataHandler(img);
//設置cid,和上面的代碼設置的一致
image.setContentID(entry.getKey().toString());

  (3)獲取附件。將選擇的附件上傳到本地的部分,之前也已經寫好了,但是有個問題。UEditor上傳附件後,會在編輯器生成對應的附件圖標和附件名稱。如下圖所示(文件名稱的uuid部分是自己加的,防止文件名稱衝突):

        這樣的話在第一步獲取html內容的時候,會連這些一起獲取,然後變成郵件主文的一部分發送到收件人。這不是我們想要的。所以需要想辦法將這部分內容去掉。

//所有的附件圖標
List<String> list = new ArrayList<>();
list.add("<img src=\"/polarion/ueditor/dialogs/attachment/fileTypeImages/icon_chm.gif\"/>");
list.add("<img src=\"/polarion/ueditor/dialogs/attachment/fileTypeImages/icon_default.png\"/>");
list.add("<img src=\"/polarion/ueditor/dialogs/attachment/fileTypeImages/icon_doc.gif\"/>");
list.add("<img src=\"/polarion/ueditor/dialogs/attachment/fileTypeImages/icon_exe.gif\"/>");
list.add("<img src=\"/polarion/ueditor/dialogs/attachment/fileTypeImages/icon_jpg.gif\"/>");
list.add("<img src=\"/polarion/ueditor/dialogs/attachment/fileTypeImages/icon_mp3.gif\"/>");
list.add("<img src=\"/polarion/ueditor/dialogs/attachment/fileTypeImages/icon_mv.gif\"/>");
list.add("<img src=\"/polarion/ueditor/dialogs/attachment/fileTypeImages/icon_pdf.gif\"/>");
list.add("<img src=\"/polarion/ueditor/dialogs/attachment/fileTypeImages/icon_ppt.gif\"/>");
list.add("<img src=\"/polarion/ueditor/dialogs/attachment/fileTypeImages/icon_psd.gif\"/>");
list.add("<img src=\"/polarion/ueditor/dialogs/attachment/fileTypeImages/icon_rar.gif\"/>");
list.add("<img src=\"/polarion/ueditor/dialogs/attachment/fileTypeImages/icon_txt.gif\"/>");
list.add("<img src=\"/polarion/ueditor/dialogs/attachment/fileTypeImages/icon_xls.gif\"/>");
//需要保證附件圖標出現在htmlCotent的最後部分,也就是附件圖標後面不能用郵件主文了,因爲圖標後面的內容將全部去掉
//去掉富文本中附件的圖標和文件
for (String str : list) {
		if (htmlContent.contains(str) && nameAndPath != null && nameAndPath.size() > 0) {
			int index = htmlContent.indexOf(str);
			htmlContent = htmlContent.substring(0, index);
		}
}

構建郵件附件部分

MimeMultipart mp2 = new MimeMultipart();
if (nameAndPath != null && nameAndPath.size() > 0) {
    //nameAndPath 附件Map
    Set set = nameAndPath.entrySet();
    Iterator iterator = set.iterator();
    while(iterator.hasNext()) {
	    Entry entry = (Entry)iterator.next();
	    //拆分
	    String[] fileName = entry.getKey().toString().split("\\\\");
	    String file = fileName[fileName.length - 1];
	    //再拆分
	    int index = file.indexOf("_");
            //附件名稱
	    String name = file.substring(index+1,file.length());
	    MimeBodyPart attach = new MimeBodyPart();
            //entry.getValue() 附件路徑
	    DataHandler dh = new DataHandler(new FileDataSource(entry.getValue().toString()));
	    attach.setDataHandler(dh);
	    attach.setFileName(MimeUtility.encodeWord(name));
            mp2.addBodyPart(attach);
    }
}

這樣就完成了 獲取富文本插件 UEditor 的內容(文本+圖片+附件)併發送郵件。測試截圖如下:

UEditor

收到的郵件

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章