Mittlerweile darf ich mich beruflich ja ein wenig mit Lotus Domino Softwareentwicklung auseinandersetzen. Die Dominowelt ist eine ganz ganz eigene Welt – aber schön langsam gewöhne ich mich daran.
Meine ersten Schritte passierten allerdings von ausserhalb, Ziel war der Zugriff auf Dominodatenbanken von Java Programmen (Servlets) aus. Dies funktioniert auch ganz gut, vielleicht veröffentliche ich später einmal ein paar Codeschnipsel.
Heute hab ich mich einmal daran versucht das ganz in C# zu testen, und als Ergebnis gilt es zu sagen, dass das auch viel besser funktioniert, vor allem weil man die COM Klassen ja direkt aus C# raus ansprechen kann.
Dabei ist folgender Codeschnippsel entstanden, der nix anderes macht als die lokale Maildatenbank zu öffnen, alle Mails zu durchwühlen, die Attachments die sich darin befinden an einen „sicheren“ Ort speicher und dann aus dem eigentlichen Mail rauslöscht, aber nicht ohne vorher einen Hinweis zu hinterlassen wo sich denn nun der Anhang befindet.
Vielleicht braucht ja sowas mal wer wirklich. 🙂
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Domino; using System.IO; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { NotesSession session = new NotesSession(); Console.Write("Das Notes Passwort eingeben: "); string sPassword = Console.ReadLine(); session.Initialize(sPassword); NotesDbDirectory dir = session.GetDbDirectory("Local"); NotesDatabase db = dir.OpenMailDatabase(); if (!db.IsOpen) { Console.WriteLine("Unable to open mail db"); } NotesView mailView = db.GetView("($Inbox)"); NotesDocument nDoc = mailView.GetLastDocument(); StreamWriter writer = new StreamWriter("D:/mail.txt", false, Encoding.GetEncoding("ISO-8859-1")); try { while (nDoc != null) { NotesItem item = nDoc.GetFirstItem("From"); if (item != null) { writer.WriteLine("From: " + item.Text); } item = nDoc.GetFirstItem("Subject"); if (item != null) { writer.WriteLine("Subject: " + item.Text); } NotesRichTextItem body = (NotesRichTextItem) nDoc.GetFirstItem("Body"); if (body != null) { writer.WriteLine("Text:"); writer.WriteLine(body.GetUnformattedText()); } if (nDoc.HasEmbedded && body != null) { List attachmentList = getEmbeddedObjectsFromNotesRichTextItem(body); if (attachmentList != null) { foreach (NotesEmbeddedObject attachment in attachmentList.ToArray()) { if (attachment.type == EMBED_TYPE.EMBED_ATTACHMENT) { attachmentList.Add(attachment); string fileName = attachment.Name; attachment.ExtractFile("D:\\test\\" + fileName); attachment.Remove(); body.AddNewLine(2, true); body.AppendText("Attachment saved under path: D:\\test\\" + fileName); body.Update(); nDoc.Save(true, false, false); } } } } writer.WriteLine("\n"); nDoc.Save(true, false, true); // nDoc = mailView.GetPrevDocument(nDoc); nDoc = null; } } catch (Exception e) { Console.WriteLine(e.Message); Console.WriteLine(e.StackTrace); } writer.Close(); Console.WriteLine("hit any key..."); Console.ReadKey(); } private static List getEmbeddedObjectsFromNotesRichTextItem(NotesRichTextItem item) { List result = null; if (item.EmbeddedObjects != null) { Object[] emeddedObjects = (Object[]) item.EmbeddedObjects; result = new List (emeddedObjects.Length); foreach ( NotesEmbeddedObject emeddedObject in emeddedObjects) { result.Add(emeddedObject); } } return result; } } }