主要思路如下:
(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
收到的郵件