首页 文章

将 MIME 部分从邮件复制到另一个文档-转换 MIME <-> Richtext

提问于
浏览
0

您好 Domino 程序员!

我在 Lotus 数据库 XPages 上工作,遇到以下问题:

我直接以“备忘录”文档的形式接收邮件到我的数据库。我想将附件和邮件正文(带有嵌入式图像)分成两个 RTF 文本字段。为此,我制作了一个 Java 代理。想法对我的解决方案似乎很好,但是每次我尝试将 Richtextitem“正文”从邮件复制到另一个文档时,创建的项目都包含 Richtext 元素而不是 MIME 部分。没关系,但是通过这条消息,整个消息似乎都失去了格式。.我知道有一个“开关”应该防止这种情况的发生-session.setConvertMime(false)。我在访问源文档之前使用了它,但是没有任何效果-我的 Richtext 字段改为空白。

所以我有很多问题:

  • 有没有一种方法可以复制备忘录文档的正文以存储格式化的电子邮件内容?我有兴趣查看 XPages 的电子邮件。

  • 当我使用 FileDownload,FileUpload 和 RichTextControl 时-是否建议将邮件和附件的内容保留在 back-end 文档的同一字段中?

任何帮助将不胜感激。

//我使用 9.0 设计器和 9.0 开发服务器。

//这是我当前使用的代码

Session session = getSession();
          String TMPSAVE_PATH = System.getProperty("java.io.tmpdir");
          Database db = session.getCurrentDatabase();
          View v = db.getView("Inbox");
          ViewEntryCollection vec = v.getAllEntries(); 
          ViewEntry entry = vec.getFirstEntry();
          while(entry!=null)
          {
              Document mailDoc = entry.getDocument();
              Document newDoc = db.createDocument();
              newDoc.replaceItemValue("Form", "Ticket");
              newDoc.replaceItemValue("Title","[MAIL] " + mailDoc.getItemValueString("Subject"));
              newDoc.replaceItemValue("Status", "0");
              newDoc.computeWithForm(true, true);
              newDoc.save(false,true);

              RichTextItem rtiOLD = (RichTextItem)mailDoc.getFirstItem("Body");
              newDoc.removeItem("Description");
              RichTextItem rtiDESC = newDoc.createRichTextItem("Description");
              rtiDESC.appendRTItem(rtiOLD);
              newDoc.removeItem("Attachment");
              RichTextItem rtiATT = newDoc.createRichTextItem("Attachment");
              newDoc.save(false,true);

              List attachmentList = new ArrayList();
              Vector vector = rtiDESC.getEmbeddedObjects();

              if(vector.size()>0)
              {                  
                  for (int i = 1; i <= vector.size(); i++)
                  {
                      String attachmentName = vector.get(i-1).toString();
                      EmbeddedObject obj = (EmbeddedObject)vector.get(i-1);                   
                      if(obj!=null)
                      {
                          attachmentList.add(attachmentName);
                          obj.extractFile(TMPSAVE_PATH + attachmentName);
                          obj.remove();
                      }
                  }
              }

              newDoc.save(false,true); 

              if(attachmentList.size()>0)
              { 
                  for (int i = 0; i < vector.size(); i++) 
                  {
                      rtiATT.embedObject(EmbeddedObject.EMBED_ATTACHMENT, "", TMPSAVE_PATH + attachmentList.get(i), (String)attachmentList.get(i));
                      File file = new File(TMPSAVE_PATH + attachmentList.get(i));
                      file.delete();
                  }
              }
              newDoc.save(false,true);
          }           
          entry = vec.getNextEntry(entry);

//Changed 标题适合该问题。

2 回答

  • 0

    我相信本 IBM 技术说明可以解释您的问题。对 AppendRTItem()的调用不会复制与附件关联的$File 项。

  • 0

    我通过使用方法 NotesDocument.getFirstItem 然后使用 NotusDocument.AppendItemValue 多次解决了问题,所以我可以简单地复制整个邮件正文。

相关问题