EMails versenden in Java

KaffeeFan

Bekanntes Mitglied
Hey Leute,

ich soll mich gerade darüber informieren, wie ich in Java mittels "MAPI" Emails versenden kann.
Habe jetzt schon einiges gelesen, aber alle Beiträge sind uralt...
Hat jemand damit schon gearbeitet? Gibt es MAPI noch? Hat jemand vielleicht eine Dokumentation oder ähnliches? ...

Vielen Dank im Voraus
Gruß
Luk
 
Wieso willst Du unbedingt MAPI verwenden?

Üblich ist es, dass Emails per SMTP versendet werden. Der benötigt zwar gewisse Konfigurationen aber es nutzt den Standard für den Versand von Emails. Und da wäre dann wohl die JavaMail API der bevorzugte Kandidat wenn es um eine Java Library geht.

Konrad
 
ok, Chef austauschen 🙂

Also Mapi war mal etwas, das damals viel benutzt wurde und mir manches graues Haar beschert hat. Nach meinen Erkenntnissen ist es aber eigentlich nicht mehr aktuell.

Evtl. macht es Sinn, den Chef nach den eigentlichen Anforderungen zu fragen. Es ist immer schlecht, wenn so technische Lösungen mit vorgegeben werden statt die eigentlichen Anforderungen zu benennen. Freundlich nach den Hintergründen zu fragen kostet hoffentlich nichts ....
 
Also ich soll recherchieren wie ich mittels Java Emails versenden kann, d.h. in Java werden Betreff, Empfänger, Anhänge, Emailtext etc. festgelegt und beim Ausführen soll sich das "Neue Email schreiben"-Fenster von Outlook öffnen mit den Betreff etc. schon ausgefüllt...

Gruß
Luk
 
also über IMAP und SMTP machen wir das schon, allerdings soll ich eine Lösung finden die über MAPI läuft...
Habe gerade JACOB heruntergeladen und teste es gerade mal an...

Danke für die bisherigen Antworten!

Gruß
Luk
 
Aber wie es gesendet wird, ist doch dann von Outlook abhängig und geht eh per Mailserver raus? Wofür soll dann eine Mail-Bibliothek die gleiche Funktionalität bieten, wenn sie eh nicht verwendet wird? Irgendwas stimmt hier nicht.
 
Nunja - der Vorteil soll ja sein, dass eben kein weiterer Server mehr konfiguriert werden muss. Und der Anwender kann die Email noch selbst bearbeiten ehe sie abgesendet wird. Das sind schon durchaus gute Argumente für so eine Lösung.

Ich habe da jetzt auch noch einmal etwas recherchiert und bin da auf etwas gestoßen, zu dem ich eher raten würde. (MAPI ist in meinen Augen sehr veraltet und die Konfiguration war nicht immer trivial in der Vergangenheit wenn ich mich recht erinnere. Meine Erfahrungen damit sind aber schon >15 Jahre zurück!)

Wenn es nicht EIN Mailprogramm sein muss (das eben per MAPI konfiguriert ist) sondern immer Outlook, dann könnte man nutzen, dass Microsoft die Office Produkte eigentlich komplett von außen steuerbar gemacht hat. OLE ist da ein Stichwort, wobei ich jetzt selbst noch nicht tief genug nachgesehen habe. Kann sein, dass da die .Net Schnittstelle das schon abgelöst hat.

Bezüglich OLE hätte ich http://www.vogella.com/tutorials/EclipseMicrosoftIntegration/article.html gefunden. Das könnte evtl. schon weiter helfen. Falls das andere von Interesse ist, dann müsste ich das auch erst weiter recherchieren - da würde aber dann wohl erst einmal eine .Net / Windows Lösung bei raus kommen. Hier wäre es dann notwendig, einen Wrapper für Java zu schreiben per JNI.
Gehen tut das somit auf jeden Fall. Die Frage ist nur, wie viel Arbeit das ggf. werden wird.

Konrad
 
Wow, vielen Dank für deine Ausführung und, dass du ein bisschen recherchiert hast!
Also ich werde es bei nächster Gelegenheit mal ansprechen und mich auch mal in OLE schlaulesen, bis dahin muss ich aber wohl erstmal mit MAPI weitermachen.
Also mein jetziger Stand ist soweit, dass ich über Java via MAPI Emails in Outlook senden kann. Betreff, Text etc. kann ich auch angeben...
Das einzige Problem das noch gelöst werden soll ist, dass die Email beim Starten des Programms direkt verschickt wird, allerdings soll sich nur das Fenster "Neue Email" öffnen mit Betreff etc schon ausgefüllt, sodass ich dann selbst noch auf "Senden" klicken muss. Kenne mich mit dieser Materie (ActiveXComponents etc.) leider noch nicht aus und hab schon etliches gegoogelt, aber nichts gefunden...

Java:
public static void main(String[] args)
  {
    ActiveXComponent outlook = new ActiveXComponent("Outlook.Application");

    Dispatch mail = Dispatch.invoke(outlook.getObject(), "CreateItem", Dispatch.Get,
            new Object[]
            {
              "0"
            }, new int[0]).toDispatch();
    Dispatch.put(mail, "To", "test@test.com");

    Dispatch.put(mail, "Subject", "Test");

    String body = "Test";

    Dispatch.put(mail, "Body", body);

    Dispatch.put(mail, "ReadReceiptRequested", "false");

    Dispatch attachs = Dispatch.get(mail, "Attachments").toDispatch();

    Dispatch.call(attachs, "Add", "Test.txt", 4);

    Dispatch.call(mail, "Send");
  }

Gruß
Luk
 
Super, dass Du es gelöst hast. Aber diese ActiveX Komponente ist aber nach meinem Verständnis nicht die MAPI Schnittstelle sondern der direkte Zugriff auf die Applikation, den ich meinte. Wobei ActiveX mich da etwas verwirrt. Aber das sollte genau das sein, was ich schon meinte (Und super, dass es so einfach funktioniert. Ich hatte Angst, dass man da groß mit JNI anfangen müsste. Daher danke für das Teilen der Lösung!)

MAPI ist eine allgemeine Schnittstelle, die von jedem Mail-Programm unterstützt werden könnte. Hat den großen Vorteil, dass der Anwender ein beliebiges Mail-Programm installiert haben kann.

Aber die Anforderungen des Chefs sind erfüllt und dass es nicht MAPI ist wie gefordert kann man unter den Tisch fallen lassen - so das Produkt nicht damit beworben werden soll. Denn dann könnte es Probleme geben, wenn jemand eben nicht outlook verwendet.

Viele Grüße,

Konrad
 
dass es nicht MAPI ist wie gefordert
Wie meinst du das? Das läuft doch über JACOB und somit alles über MAPI, oder nicht? 😕
Jetzt hat sich allerdings noch das Problem aufgetan, dass ich mit dem Code nur Outlook anspreche.
Es soll aber das Standard-MAPI-Mailprogramm geöffnet werden, dass ich also nicht direkt Outlook ansprechen muss, sondern er mir automatisch den MAPI-Standard übergibt.
Hast du oder hat jemand da eine Idee?

Gruß
Luk
 
Du nutzt nicht Mapi sondern das Outlook COM Objekt. JACOB dient nun einmal dem Zugriff auf COM Objekte. JACOB kann wohl auch genutzt werden, wenn Du statt dem Outlook COM Objekt ein MAPI COM Objekt verwendest.

Aber ein gutes Beispiel habe ich nicht gefunden. In der FAQ sind ein paar Hinweise, dass erst eine Initialisierung erfolgen muss (MTA vs. STA - http://stackoverflow.com/questions/127188/could-you-explain-sta-and-mta), aber ein Beispiel konnte ich jetzt nicht finden. Die Dokumentation auf msdn diesbezüglich war bisher auch nicht hilfreich.

Was ich gefunden habe, ist https://msdn.microsoft.com/en-us/library/cc842378.aspx. Aber ich sehe da so auf Anhieb nichts bezüglich COM Objekte was sich einfach in Java umsetzen liesse.

Daher würde ich an Deiner Stelle erst einmal https://github.com/briandealwis/jmapi ansehen, ob das weiter helfen könnte (bzw. https://java.net/projects/jdic) - ist aber alles recht alt (5 bzw. über 6 Jahre) was nicht gerade sehr zuversichtlich macht.

Konrad
 
Okay, nochmals vielen lieben Dank für deine Bemühungen!
Ich werde mich dann mal weiter schlaulesen, mich mit deinen Links auseinandersetzen und mir eventuell einen Arbeitskollegen zur Seite holen!
Melde mich bestimmt später oder morgen nochmal, falls es was neues gibt.

Gruß
Luk
 
Hallo zusammen,

dieser Beitrag ist schon ein paar Jahre alt, aber ich bin genau an der selben Stelle wie KaffeeFan damals 😀.

Ich schaffe es nicht via JACOB auf MAPI zuzugreifen, länglich auf Outlook. Hat jemand eine Idee oder schon mal versucht mit JACOB und ActiveX auf MAPI zu zugreifen? Ich hab genau die selben vorgaben wie KaffeeFan!

Bin für jede Antwort dankbar.
 

Neue Themen


Zurück
Oben