Lotus Notes / Domino Sonstiges > Java und .NET mit Notes/Domino

Absender einer Mail in einem Java Agenten auslesen

(1/5) > >>

ans:
Hallo, habe mich heute das erste mal an einen Java Notes Agenten gewagt.... g*
Jetzt hab ich ein Problem,
ich habe absolut keine Ahnung wie ich aus einer eingehenden Mail den Namen des Absenders bekomme...
(Später will ich einen Antwortmail schicken in der dann im Body z.B. "Hallo " +Absender+ steht.
Kann mir da jemand eine Tip geben?

Vielen Dank!
ans

Axel Janssen temp:
Hi,

du hast mit dem Mail nicht die Maildatenbank erweitert, oder?
Davon kann ich dringend abraten. Man sollte nicht die Funktionalität der Notes-Mailschablone erweitern, es sei denn man weiss wirklich ganz genau was man tut und weiss v.a. auch was man tut, wenn Lotus eine neue Mail-Schablone rausgibt.

Nein. Du hast bestimmt von einer anderen Datenbank auf die Maildatenbank zugegriffen und willst von dort lesen, welche neue Mails eingetroffen sind.

Das Absenderfeld der einkommenden Mail ist das Feld mit dem Namen "From".
Ich würde darauf zugreifen mit:

--- Zitat ---String aValue = Document.getItemValueString("From");

--- Ende Zitat ---
Solche reinen Notes-Zugriffe sind von der API her sehr ähnlich wie Lotus-Script.

Gruß Axel

ans:
hi axel_janssen_,

danke für deine antwort. im moment weiß ich noch nicht so richtig was ich hier tue. g*
hab den code meines notes-agenten mal kopiert...
irgendwie funktioniert er noch nicht so wie ich mir das vorstelle.


--- Code: ---Hallo CN=Anja Schröbel/OU=active-logistics/O=rzsc, Ihr Betreff: 55555555

--- Ende Code ---

Er schreibt alles in eine Zeile und das "From" gefällt mir nicht so richtig. Außerdem hatte ich eher daran gedacht das dort der richtige Name steht oder der erste Teil der absender email adresse...
Geht das?
Wenn ja, kann mir jemand einen Tip geben.

Über gute Notes Javabuchtipps würde ich mich auch freuen.

vielen dank!
ans


--- Code: ---/*
import lotus.domino.*;                                             //Java Packet importieren

public class Colliinfo extends AgentBase {                              //abgeleitete Agentenklasse


   public void NotesMain() {                                       //Hauptmethode

      try
      {                                                      //Fehlerschutzblock
         Session mySession = getSession();                           //Hole Session
         AgentContext myAgentContext = mySession.getAgentContext();         //Hole Ausführungsumgebung

         Database myDatabase = myAgentContext.getCurrentDatabase();
         DocumentCollection myDocCollection = myAgentContext.getUnprocessedDocuments();
         
         Document myDocument = myDocCollection.getFirstDocument();  
         
         Document myMailDocument;
         //RichTextItem rti;
         String myMailSubjectFrom, myMailSubject, myMailSenderName, myMailBody, myMailRecipient, tmp_MyName ;
         
         while (myDocument != null) {
           
            myMailSenderName = myDocument.getItemValueString("From");
            myMailSubjectFrom = myDocument.getItemValueString("Subject");

            myMailRecipient = myDocument.getItemValueString("INetFrom");
            myMailSubject = "Antwort vom ColliInfoAgenten";
            myMailBody = "Hallo " + myMailSenderName + ", \n"  + "Ihr Betreff: \n" + myMailSubjectFrom;
           
            //RichTextItem myBody = myDocument.createRichTextItem(myMailBody);
           
            myMailDocument = myDatabase.createDocument();                //Mail-Nachricht anlegen
            myMailDocument.replaceItemValue("From","Memo");               //Form Feld anlegen
            myMailDocument.replaceItemValue("Subject",myMailSubject);      //Subject Feld anlegen
            myMailDocument.replaceItemValue("Body",myMailBody);         //Body Feld anlegen
           
            myMailDocument.send(myMailRecipient);                           //an Empfänger senden
           
            System.out.println("Nachricht " + myMailSubject + "weitergeleitet an " + myMailRecipient); //Log Eintrag machen
           
            myAgentContext.updateProcessedDoc(myDocument);               //Dokument als bearbeitet markieren
            myDocument = myDocCollection.getNextDocument(myDocument);                  //hole nächstes Document
         }
         
      } catch(Exception e) {                                       //evtl. Exceptions auffangen
         e.printStackTrace();                                    //Meldungsstack ausgeben
      }
   }
}
--- Ende Code ---

Axel_Janssen:
Hi,

für solche Agenten-Aufgaben ist Java sicherlich z.Zt. kein first class citizen von Lotus-Notes.

Die Nachteile gegenüber Lotus-Script sind:
- kein Debugger
- keine Frontend - Klassen
- um sicher zu sein, dass die Objekte wirklich aufgeräumt werden, mußt du eigentlich auf die richtigen Objekte .recycle() aufrufen. Später mehr dazu in diesem Theater. Der Java-default-Objekt Entsorgungs Mechanismus namens Garbage Collector läuft immer noch nicht richtig. Hat was damit zu tun, dass die Java-Objekte ein JNI-Wrapper um Lotus-RPC code ist und IBM hat immer noch keine Lösung, die entsprechenden RPC-stubs konkret zu entsorgen. (angeblich gilt das auch für Eclipse3 basierte Workplace-Clients, was ich für langsam echt albern halte...) :-X
 
Java in Notes Bücher? Manning hat einen alten Titel im Angebot.
http://www.manning.com/patton2
Ich hab ehrlichgesagt noch nicht mal das, obwohl ich von den sonstigen Manning Java Sachen ca. 30% besitze.

Eine Menge gibts bei notes.net. Die ersten 40 Artikel könnten ganz interessant sein:
206 hits
Vielleicht 06/30/2000   Java mail forwarding agent für deinen speziellen Fall. Auf jeden Fall:
08/04/2003   Java access to the Domino Objects, Part 1 und 2
Da dürften aber noch andere interessante Sachen sein.

Gute Notes-Entwicklungs-Bücher wie das von Rocky Oliver haben ein Java-Kapitel, dass vermutlich brauchbar ist.

Java in Notes wird vornehmlich für eng eingegrenzte Spezialaufgaben benutzt: Va.: Integration zu anderen Daten-Sourcen. Hier beliebt: URL Connection + xml-stream. Manche setzen auch gerne Swing-Applets ein. Wir selbst haben erfolgreich eine eigene asynchrone Webservice Integration mit Tomcat geschrieben (ehrlichgesagt, nicht so schwierig).  

Das gute an Java ist, dass man dadurch unabhängig von Notes wird (Tomcat, Websphere, Weblogic, etc.).
Außerdem macht OO-Programmierung sowieso mehr Spaß.
... und es ist als Java Programmierer sehr einfach .net Konzepte zu verstehen, weil das in weiten Bereichen ein Java clone ist.
... und es gibt eine sehr große open Source community.
... und konkurrierende Anbieter
... und nicht so viele Spinner, die sich als Experten verkaufen, aber nur ein bischen an der Oberfläche gekrazt haben und ständig durch eine ziemlich generische agressiv-neurotische Verhaltensstruktur langweilen und nerven.  
... und moderne IDEs (www.eclipse.org)

Für die Zukunft ist eine stärkere Integration von Java und Notes zu erwarten. So arbeitet IBM an einer neuen Version des Notes Clients, die auf einer abgespeckten Version der open Source IDE Eclipse basieren wird.  

zu deinem konkreten Problem:
Du kannst den kannonischen Namen, den du über

--- Code: --- myMailSenderName = myDocument.getItemValueString("From");

--- Ende Code ---
erhälst, mit Hilfe der Klasse lotus.domino.Name auslesen.

--- Code: ---try {
     Name notesName = mySession.createUserName(myMailSender);
     myMailSenderName = notesName.getCommon();
} catch (NotesException e) {}

--- Ende Code ---

Das extrem unschöne catch für Fälle, in denen sich der Wert des from Feldes nicht in einen Notes-Namen konvertieren lässt. Vermute ich zum Beispiel bei Mails, die aus dem Internet kommen. Habs aber nicht ausprobiert.

Zur Stärkung unserer kollektiven OO-Durchschlagskraft hab ich aus Quatsch angefangen eine Lösung mit late-Binding Polymorphismus und einer Art abstract Factory zu schreiben. Ist aber noch nicht fertig und ein bischen overdesign.

korrigiert mich, wo ich falsch liege

Axel

eknori (retired):

--- Zitat ---Zur Stärkung unserer kollektiven OO-Durchschlagskraft hab ich aus Quatsch angefangen eine Lösung mit late-Binding Polymorphismus und einer Art abstract Factory zu schreiben. Ist aber noch nicht fertig und ein bischen overdesign.

--- Ende Zitat ---

und das nennt sich dann JAVA für Anfänger; kannst e das auch mal eindeutschen ??

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln