2011-12-09 36 views
3

Lotus Notesのメールをエクスポート(保存)する必要があります。 添付ファイルをHDDに保存する方法を理解しましたが、メール全体を保存する方法を理解できません。Lotus Notes - メール全体を保存するeml c#

以下のコードは、添付ファイルのエクスポート方法を示しています。あなたは電子メールを保存するためにそれを変更する方法を提案できますか? PS-プログラミングに慣れていません。 Bob Babalanによって

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using Domino; 
using System.Collections; 

namespace ExportLotusAttachments 
{ 
    class Class1 
    { 
    public void ScanForEmails() 
    { 
     String textBox1 = "c:\\1"; 
     NotesSession session = new NotesSession(); 
     session.Initialize(""); 
     NotesDbDirectory dir = null; 
     dir = session.GetDbDirectory(""); 
     NotesDatabase db = null; 
     db = dir.OpenMailDatabase(); 
     NotesDatabase NDb = dir.OpenMailDatabase(); //Database connection 

     //ArrayList that will hold names of the folders 
     ArrayList LotusViews2 = new ArrayList(); 

     foreach (NotesView V in NDb.Views) 
     { 
     if (V.IsFolder && !(V.Name.Equals("($All)"))) 
     { 
      NotesView getS = V; 
      LotusViews2.Add(getS.Name); 
     } 
     } 

     foreach (String obj in LotusViews2) 
     { 
     NotesDocument NDoc; 
     NotesView nInboxDocs = NDb.GetView(obj); 
     NDoc = nInboxDocs.GetFirstDocument(); 
     String pAttachment; 

     while (NDoc != null) 
     { 
      if (NDoc.HasEmbedded && NDoc.HasItem("$File")) 
      { 
      object[] AllDocItems = (object[])NDoc.Items; 
      foreach (object CurItem in AllDocItems) 
      { 
       NotesItem nItem = (NotesItem)CurItem; 
       if (IT_TYPE.ATTACHMENT == nItem.type) 
       { 
       String path = textBox1; 
       pAttachment = ((object[])nItem.Values)[0].ToString(); 

       if (!System.IO.Directory.Exists(path)) 
       { 
        System.IO.Directory.CreateDirectory(textBox1); 
       } 

       try 
       { 
        NDoc.GetAttachment(pAttachment).ExtractFile(@path + pAttachment); 
       } 
       catch { } 
       } 
      } 
      } 
      NDoc = nInboxDocs.GetNextDocument(NDoc); 
     } 
     } 
    } 
    } 
} 
+0

投稿する前に、フォーマットするためにコードをプレビューしてください(入力した領域の下を見てください)。あなたの質問をより読みやすくするだけでなく、他の人がそれを修正するのに費やす必要がないため、時間を節約できます。 :)人々が読んで理解することが簡単になればなるほど、答えが得られる可能性が高くなります。ありがとう。 –

答えて

3

Thisポストは、Javaを使用した蓮の文書をエクスポートする方法について説明します。同じ原理がC#またはVBで動作するはずです。ドキュメントはMIMEに変換され、ディスクに書き込まれます。

バージョン8.5.3(私はそれが8.5.1で始まったと思います)では、メールファイルからファイルシステムにドラッグアンドドロップすることができます。

+1

残念ながら、.eml機能へのドラッグ&ドロップはAPIを介して公開されていません。 – leyrer

+0

電子メールを取得してHDDに保存する方法はまったくありません。 – Andrew

+0

確かにありますが、上記のようなプログラミングが必要な場合があります。結果は電子メールのhtmlファイルになります。 –

0

私はそれが少し遅れていることを知っていますが、これは、私がしたことです。 (Bob Babalanに基づいて) Bobs SolutionはNotesMIMEEntitiesを理解するのに大変助かりましたが、彼の解決策では、彼はMIME-Treeを2番目の「レイヤー」にしかトラバースしませんでした。これは複数のレイヤーを横断します。

public void GetMIME(StreamWriter writer, NotesMIMEEntity mimeEntity) 
{ 
    try 
    { 
     string contentType = null; 
     string headers = null; 
     string content = null; 
     string preamble = null; 
     MIME_ENCODING encoding; 

     contentType = mimeEntity.ContentType; 
     headers = mimeEntity.Headers; 
     encoding = mimeEntity.Encoding; 

     // message envelope. If no MIME-Version header, add one 
     if (!headers.Contains("MIME-Version:")) 
      writer.WriteLine("MIME-Version: 1.0"); 
     writer.WriteLine(headers); 

     // for multipart, usually no main-msg content... 
     content = mimeEntity.ContentAsText; 
     if (content != null && content.Trim().Length > 0) 
      writer.WriteLine(content); 
     writer.Flush(); 

     if (contentType.StartsWith("multipart")) 
     { 
      preamble = mimeEntity.Preamble; 
      NotesMIMEEntity mimeChild = mimeEntity.GetFirstChildEntity(); 

      while (mimeChild != null) 
      { 
       GetMimeChild(writer, mimeChild); 
       mimeChild = mimeChild.GetNextSibling(); 
      } 
     } 

     writer.WriteLine(mimeEntity.BoundaryEnd); 
     writer.Flush(); 
    } 
    catch (Exception ex) 
    { 
     Logging.Log(ex.ToString()); 
    } 
} 

private void GetMimeChild(StreamWriter writer, NotesMIMEEntity mimeEntity) 
{ 
    string contentType = null; 
    string headers = null; 
    string content = null; 
    string preamble = null; 
    MIME_ENCODING encoding; 

    contentType = mimeEntity.ContentType; 
    headers = mimeEntity.Headers; 
    encoding = mimeEntity.Encoding; 

    if (encoding == MIME_ENCODING.ENC_IDENTITY_BINARY) 
    { 
     mimeEntity.EncodeContent(MIME_ENCODING.ENC_BASE64); 
     headers = mimeEntity.Headers; 
    } 

    preamble = mimeEntity.Preamble; 
    writer.Write(mimeEntity.BoundaryStart); 

    if (!content.EndsWith("\n")) 
     writer.WriteLine(""); 

    writer.WriteLine(headers); 
    writer.WriteLine(); 

    writer.Write(mimeEntity.ContentAsText); 

    if (contentType.StartsWith("multipart")) 
    { 
     preamble = mimeEntity.Preamble; 
     NotesMIMEEntity mimeChild = mimeEntity.GetFirstChildEntity(); 

     while (mimeChild != null) 
     { 
      GetMimeChild(writer, mimeChild); 
      mimeChild = mimeChild.GetNextSibling(); 
     } 
    } 

    writer.Write(mimeEntity.BoundaryEnd); 
    writer.Flush(); 
} 

EMLファイルを指定のパスに保存するには、この方法をこのように呼びます。

using (FileStream fs = new FileStream (path,FileMode.Create,FileAccess.ReadWrite,FileShare.None)) 
{ 
    using (StreamWriter writer = new StreamWriter(fs)) 
    { 
    NotesMimeEntity mimeEntity = notesDocument.GetMIMEEntity(); 
    if (mimeEntity != null) 
     email.GetMIME(writer, mimeEntity); 
    } 
}