JavaXPages:将MIME多部分从邮件复制到另一个Richtext文档
试图通过将邮件正文保存到richtext项目中来从电子邮件创建新的XPages文档,我的文档已正确创建attachmentBody也已创建,但文档中所有嵌入的图像都已替换为ImagePlaceHolder,下面是创建附件和图像的方法
private static void parseMimeEntity(RichTextItem attachmentBody, MIMEEntity entity,Session session,File tmpFolder,String fileSeparator,long attachmentNumber) {
MIMEEntity child;
try{
if(!entity.getContentType().equalsIgnoreCase("text")){
String filename = null;
MIMEHeader header = null;
header = entity.getNthHeader("Content-Disposition");
if (header != null) {
filename = header.getParamVal("filename");
filename = filename.replace("\"", "");
if ("".equals(filename)) filename = null;
}
if (filename == null) {
// when filename is null
filename = "Attachment" + attachmentNumber++ + ".txt";
}
String contentDisposition = entity.getNthHeader("Content-Disposition").getHeaderVal();
if(contentDisposition.equalsIgnoreCase("inline")){
String contentType = entity.getNthHeader("Content-Type").getHeaderVal();
Stream stream = session.createStream();
if (stream.open(file.getAbsolutePath(), "binary")) {
entity.setContentFromBytes(stream, contentType, MIMEEntity.ENC_IDENTITY_BINARY);
stream.close();
}
}else{
Stream stream = session.createStream();
if (stream.open(file.getAbsolutePath(), "binary")) {
entity.getContentAsBytes(stream);
stream.close();
}
attachmentBody.embedObject(EmbeddedObject.EMBED_ATTACHMENT, "", file.getAbsolutePath(), filename);
}
file.delete();
}
}
catch(Exception ex){
System.out.println("NO FILE");
}
child = entity.getFirstChildEntity();
if (child != null) {
parseMimeEntity(attachmentBody, child,session,tmpFolder,fileSeparator,attachmentNumber);
}
child = entity.getNextSibling();
if (child != null) {
parseMimeEntity(attachmentBody, child,session,tmpFolder,fileSeparator,attachmentNumber);
}
}
# 1 楼答案
一种解决方案是对嵌入的图像进行Base64编码,而不是将嵌入的图像添加为附件。请看我的答案:https://stackoverflow.com/a/19328276/785061
# 2 楼答案
当您创建一个新的mime条目时,您将获得新的边界字符串,作为嵌入图像的键。检查传入图像的
src
属性以了解确切的格式您需要调整这些属性以使图像正确显示。清理HTML并不是一件有趣的事情,请参考本文中的一些要点:
https://wissel.net/blog/2017/04/from-blogsphere-to-a-static-site-part-2-cleaning-up-the-html.html
最终(需要检查,我不知道),您可以指定边界并保存HTML清理