2 Stimmen

Extrahieren/Exportieren von Anhängen aus Lotus Notes Email mit C#

Ich brauche, um zu extrahieren/exportieren die Lotus Notes E-Mail-Anhang in Dateisystem. für, dass ich schrieb folgende Methode, aber jedes Mal, wenn ich einen Fehler in der Zeile foreach (NotesItem nItem in Elemente) erhalten. Kann mir bitte jemand sagen, was ich falsch mache.

Danke Jwalin

    public void GetAttachments()
    {
        NotesSession session = new NotesSession();
        //NotesDocument notesDoc = new NotesDocument();
        session.Initialize("");

        NotesDatabase NotesDb = session.GetDatabase("", "C:\\temps\\lotus\\sss11.nsf", false); //Open Notes Database
        NotesView inbox = NotesDb.GetView("By _Author");
        NotesDocument docInbox = inbox.GetFirstDocument();
        object[] items = (object[])docInbox.Items;
        **foreach (NotesItem nItem in items)**
        {

            //NotesItem nItem = (NotesItem)o1;
            if (nItem.Name == "$FILE")
            {
                NotesItem file = docInbox.GetFirstItem("$File");
                string fileName = ((object[])nItem.Values)[0].ToString();
                NotesEmbeddedObject attachfile = (NotesEmbeddedObject)docInbox.GetAttachment(fileName);

                if (attachfile != null)
                {
                    attachfile.ExtractFile("C:\\temps\\export\\" + fileName);
                }
            }
        }

2voto

Ed Schembor Punkte 7450

Sie brauchen das Element $File nicht zu verwenden, um den/die Namen des Anhangs zu erhalten. Stattdessen können Sie die Eigenschaften HasEmbedded und EmbeddedObject der NotesDocument-Klasse verwenden.

public void GetAttachments()
    {
    NotesSession session = new NotesSession();
    //NotesDocument notesDoc = new NotesDocument();
    session.Initialize("");

    NotesDatabase NotesDb = session.GetDatabase("", "C:\\temps\\lotus\\sss11.nsf", false); //Open Notes Database
    NotesView inbox = NotesDb.GetView("By _Author");
    NotesDocument docInbox = inbox.GetFirstDocument();

    // Check if any attachments
    if (docInbox.hasEmbedded)
    {
        NotesEmbeddedObject attachfile = (NotesEmbeddedObject)docInbox.embeddedObjects[0];

        if (attachfile != null)
        {
            attachfile.ExtractFile("C:\\temps\\export\\" + attachfile.name);
        }
    }

1voto

Gary Cliff Punkte 11

Die Lösung von Ed hat bei mir nicht funktioniert. Irgendetwas an meinem Notes db Design scheint die EmbeddedObjects Eigenschaft null zu lassen, selbst wenn das HasEmbedded Flag true ist. Also habe ich die Lösungen von Ed und Jwalin kombiniert und sie so modifiziert, dass sie alle Anhänge aus einem Notes-Dokument holen.

        NotesDocument doc = viewItems.GetNthEntry(rowCount).Document;
        if (doc.HasEmbedded)
        {
           object[] items = (object[])doc.Items;
           foreach (NotesItem item in items)
           {
              if(item.Name.Equals("$FILE"))
              {
                 object[] values = (object[])item.Values;
                 doc.GetAttachment(values[0].ToString()).ExtractFile(fileSavePath + values[0].ToString());
              }
           }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X