将富文本插件 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

收到的邮件

 

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