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