Outlook: Markierte eMail
-
Hallo!
Weiß jemand, wie man die aktuell markierte eMail in Outlook auslesen kann?
Ich bräuchte die eMailadresse der aktuell ausgewählten eMail in Outlook. Kann man das irgendwie auslesen?
Ich hab ne Outlook.Application - und dann weiter? Mit "CreateItem" könnte ich eine neue eMail erstellen, ich möchte aber keine neue Mail schreiben, sondern auf die aktuell markierte Mail zugreifen...
tschüss
Robert
-
ola ist das TOutlookApplication-Object
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { ola->Connect(); ns = ola->GetNamespace(WideString("MAPI")); }die Mailadresse aller ungelesenen Mails werden in einer Listbox (lb3) angezeigt
void __fastcall TForm1::Button2Click(TObject *Sender) { FoldersPtr pFolders ; MAPIFolderPtr pFolder, pFolder2; MailItemPtr pMI; ItemsPtr pItms; ns->Logon("", "", False, False); pFolders = ns->Folders; pFolder = ns->GetDefaultFolder(olFolderInbox); pFolder->Display(); int NewMail = 0, UnsentMail = 0; NewMail = pFolder->UnReadItemCount; if (NewMail > 0) { ShowMessage("Ungelesene Mails im Posteingang: " + IntToStr(NewMail)); pItms = pFolder->Items; for (int i=1; i<=pItms->Count; i++) { v = Variant(i); pMI = pItms->Item(v); if (pMI->UnRead) { pMI->UnRead = false; String str = pMI->SenderEmailAddress; lb3->Items->Add(str); } } } pFolder2 = ns->GetDefaultFolder(olFolderOutbox); UnsentMail = pFolder2->Items->Count; if (UnsentMail > 0) ShowMessage("Ungesendete Mails im Postausgang: " + IntToStr(UnsentMail)); ns->Logoff(); ola->Quit(); ola->Disconnect(); }und in den Header:
private: // Anwender-Deklarationen _NameSpacePtr ns;und hier noch einen Link zu den OutlookKomponenten:
http://www.officewiki.org/default.aspx/Outlook.OutlookIndexViel Spaß,
Linnea
-
Hallo Linnea!
Erstmal vielen vielen Dank für die Antwort!
Damit kann ich die nicht gelesenen Objekte herausbekommen, das klappt. Gibt's auch ne Möglichkeit, die aktuell markierten Objekte zu erhalten? (also alle markierten, sozusagen die blau unterlegten)
Zudem _wäre es nicht schlecht_ wenn das ganze mit später Bindung erfolgen könnte, weil ich sonst auf eine bestimmte Version vom Outlook angewiesen bin (stimmt doch, oder??)
Ich habe folgenden Ansatz:
Variant OutlookApp, Explorer, Selection; try { OutlookApp = GetActiveOleObject("Outlook.Application"); } catch (...) { try { OutlookApp = CreateOleObject("Outlook.Application"); } catch (...) { ShowMessage("Outlook nicht installiert"); } } try { Explorer = OutlookApp.OlePropertyGet("Explorers"); //funktioniert nicht: Selection = Explorer.OleFunction("get_Selection"); } __finally { }Würde mich freuen, wenn man mir helfen kann

tschüss
Robert
-
Hallo!
Weiß denn keiner, wie das geht?
In Outlook gibt's da wohl irgendwo die Eigenschaft "Selection", ich weiß aber nicht, wie ich darauf im C++Builder zugreifen kann...Würde mich sehr freuen, wenn jemand ne Lösung anbieten könnte...
tschüss
Robert
-
Hiermit müßte der Zugriff auf die markierten Mails möglich sein
ExplorerPtr pExp; SelectionPtr pSel; Variant v = Variant(1); //ein Outlookfenster auswählen pExp = ola->Explorers->Item(v); //und aktivieren pExp->Activate(); pSel = pExp->Selection; for (int i=1; i<=pSel->Count; i++) { v = Variant(i); pMI = pSel->Item(v); String str = pMI->Subject; lb3->Items->Add(str); }man kann über
ExplorersPtr pExps; ExplorerPtr pExp; pExps = ola->Explorers; for (int i=1; i<=pExps->Count; i++) { if (pExps->Activate()) { Variant v = Variant(i); pExp->Item(v); } }auch nur auf das aktive Outlook-Fenster zugreifen
zur späten Bindung hab ich nur nen Delphi-Link http://www.delphi-source.de/tipps/COM_OLE_DDE/?id=35
Grüße
Linnea
-
Hallo Linnea!
Vielen, vielen Dank!!!
Hat mir sehr geholfen, Danke!!Der Vollständigkeit halber, das ganze nochmal mit später Bindung:
(für den Fall, dass mal irgendjemand über die Suche drauf stoßt...)Variant ola; try { ola = GetActiveOleObject("Outlook.Application"); } catch (...) { try { ola = CreateOleObject("Outlook.Application"); } catch (...) { ShowMessage("Outlook nicht installiert"); } } Variant pExp; Variant pSel; Variant pMI; Variant v = Variant(1); //ein Outlookfenster auswählen pExp = ola.OlePropertyGet("Explorers").OleFunction("Item", v); //und aktivieren pExp.OleFunction("Activate"); pSel = pExp.OlePropertyGet("Selection"); for (int i=1; i<=pSel.OlePropertyGet("Count"); i++) { v = Variant(i); pMI = pSel.OleFunction("Item", v); String str = pMI.OlePropertyGet("SenderName"); lb3->Items->Add(str); }Danke nochmal & tschüss
Robert