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

时间:2014-03-31 13:25:47

标签: java email xpages lotus-notes lotus

Hello Domino程序员!

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

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

所以我有很多问题:

  • 有没有办法复制备忘录文件的正文以存储格式化的电子邮件内容?我有兴趣查看来自XPages的电子邮件。
  • 当我使用FileDownload,FileUpload和RichTextControl时 - 是否建议在后端文档的同一字段中保留邮件和附件的内容?

任何帮助将不胜感激。

// 我使用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);

//更改标题以适合问题。

2 个答案:

答案 0 :(得分:0)

我相信this IBM technote解释了你的问题。对AppendRTItem()的调用不会复制与附件关联的$ File项目。

答案 1 :(得分:0)

我通过多个使用方法NotesDocument.getFirstItem然后使用NotusDocument.AppendItemValue来解决问题,所以我只需复制整个邮件正文。