Entwickler-Ecke
Sonstiges (Delphi) - Outlook: "Ein Programm versucht .... "
bbfan - Mi 06.04.05 10:02
Titel: Outlook: "Ein Programm versucht .... "
So .... habe es geschafft ein Outlook Addin zu programmieren.
Läuft alles auch so weit ganz gut, doch wenn ich mein Postfach Emailadressen durchsuchen lasse, dann kommt folgende Meldung :
"Ein Programm versucht .... " Ihr kennt das ja.
http://www.outlookcode.com konnte mir nicht helfen. Wie kann ich diese Meldung umgehen, besser: Wie bekomme ich es hin, das mein Code als TrustedCode aufgenommen wird?
Bei den ganzen Hilfen von MS stösst man immer wieder auf VB Codes, aber wie geht das in Delphi?
Sobald ich bei MailItem.sendername oder über .sender.adress gehe, erscheint diese Meldung.
Es muss doch gehen einen trusted Anwendung zuschreiben. PALM Software kann es doch auch und SPAM Software.
Bin jetzt schon 2 Tage auf der Suche und finde nichts gescheites.
Bin um jeden Tip dankbar!
Ich benutze folgenden Code um die Emailaddress auszulesen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| begin objCDO := CreateOLEObject('MAPI.Session'); objCDO.Logon('', '', False, False); objMsg := objCDO.GetMessage(itemOL.EntryID, itemOL.Parent.StoreID);
s := objMsg.Sender.Address; showmessage(s); objMsg := UnAssigned; objCDO := UnAssigned; end |
Moderiert von
Tino: Code- durch Delphi-Tags ersetzt.
Lossy eX - Mi 06.04.05 11:17
Also unter Delphi 5+ gibt es bereits vorgefertigte Serverkomponenten. Mit denen man sehr einfach auf Outlook zuzugreifen kann. Anderfalls würde ich dir mal das Objekt "Outlook.Application" ans Herz legen wollen. Ich denke nämlich mal, dass die Frage ob du das darfst von dem MAPI Objekt stammt.
PS: Du kannst auch eine Outlook Typbiliothek importieren falls du die Serverkomponenten nicht hast.
bbfan - Mi 06.04.05 11:27
Einen Outlook Server benutzt meine Komponente schon.
Im OnConnection Event wird das aktuelle OutlookApplcation Object abgelegt.
Aber wie bekommen ich jetzt zugriff drauf? Es ja OLEVariant....
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TTrebaxaOutlAddin.OnConnection(const Application: IDispatch; ConnectMode: ext_ConnectMode; const AddInInst: IDispatch; var custom: PSafeArray); var i : integer; begin FApplication:=Application; FOutlookApplication:=TOwnOutlookApplicaiton.Create(Application); FOutlookApplication.OnOptionsPagesAdd:=OnOptionsPagesAdd; FInspectors:=TOutlookInspectors.Create(FApplication.Inspectors); FInspectors.OnNewInspector:=OnNewInspector; for i:=1 to FApplication.Inspectors.Count do begin OnNewInspector(FInspectors, IDispatch(FApplication.Inspectors.Item(i)) as _Inspector); end; FExplorers:=TOutlookExplorers.Create(FApplication.Explorers); FExplorers.OnNewExplorer:=OnNewExplorer; for i:=1 to FApplication.Explorers.Count do begin OnNewExplorer(FExplorers, IDispatch(FApplication.Explorers.Item(i)) as _Explorer); end; end; |
Moderiert von
Tino: Code- durch Delphi-Tags ersetzt.
tempme - Mi 06.04.05 11:35
Microsoft hat mit Outlook 2000 SP2 und Outlook 2002/XP SP1 ein Objektschutzmodel eingeführt.
Dieses Model verhindert den ungewollten Zugriff auf sensible Daten wie z.B. Emailadresse.
Mir sind drei Möglichkeiten bekannt um die Meldung nicht aufpoppen zu lassen:
1. Safe MAPI Calls
- Microsoft hat diese Schnittstelle mit dem Objektschutzmodel nicht aktualisiert.
2.
Redemption [
http://www.dimastr.com/redemption]
- Redemption ist ein Wrapper für die oben genannten Safe MAPI Calls. Für privaten Gebrauch kostenlos.
3. Exchange
- Sofern Outlook über Exchange angebunden wird, besteht auch die Möglichkeit ein Zertifikat auf dem Exchange Server freizuschalten und somit dem COM-AddIn einen Trust zu gewähren.
Nähere Information befinden sich im Buch das von
http://www.outlookcode.com angeboten wird.
bbfan - Mi 06.04.05 11:47
Dort habe ich nachgelesen, dass AddIns, die unter Adminrechten installiert werden, trusted addins sind.
Mein Weg wäre:
1. Hole das OutlookApplication object bei dem OnConnection event (=trusted OL Object)
2. Wandele diese um in eine TOutlookApplication
Dann könnte man drüber zugreifen.
Allerdings komme ich damit nicht weit. Die Zuordnung klappt nicht:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| var olll:TOutlookApplication OwnApplication : OLEVariant; olll.Assign((OwnApplication AS TOutlookApplication)); oder olll := (OwnApplication AS TOutlookApplication) |
Moderiert von
raziel: Code- durch Delphi-Tags ersetzt.
tempme - Mi 06.04.05 12:07
Kannst du mal bitte ein Link zu dem Beitrag posten wegen den Adminrechten und dem Trust?
Oder ein Verweis woher du es weisst?
Laut dem Entwickler von Redemption und den Verfasser des Buches "Microsoft Outlook Programming" sind es wirklich nur diese drei Möglichkeiten.
bbfan - Mi 06.04.05 12:12
ja, ich versuche es noch mal zu finden...
Kannst du mir die Hilfe zu "Safe MAPI Calls " geben?
tempme - Mi 06.04.05 12:20
Leider nicht,
ich habe mich für Redemption entschieden.
Dmitry, der Entwickler von Redemption, hat mir für MAPI damals folgendes Buch empfohlen:
ISBN: 1572313129
bbfan - Mi 06.04.05 12:23
Ok. Danke.
Ursprünglich brauchte ich eigentlich nur die reale Absender Email Adresse aus einem Mailitem. Mehr nicht....
Gibt es denn da keine Lösung? Kann doch nicht so schwer sein....
tempme - Mi 06.04.05 12:37
Könntest du bitte mir noch sagen ob Outlook bei dir über Exchange angebunden ist oder als "stand-alone" Client läuft?
Und welche Outlook Version du einsetzt?
bbfan - Mi 06.04.05 13:18
Ich benötige es für beides, also Exchange und Standalone.
Wichtig wäre aber erstmal Standalone.
Benutze Outlook 2002 und 2003
bbfan - Mi 06.04.05 14:14
das ist aus meiner Sicht viel zu aufwendig.
Es sollte doch möglich sein aus einem MailItem die Emailadresse auszulesen, ohne eigene Zertifikate dafür zu erstellen und zu installieren.
Delete - Mi 06.04.05 14:19
bbfan hat folgendes geschrieben: |
das ist aus meiner Sicht viel zu aufwendig.
Es sollte doch möglich sein aus einem MailItem die Emailadresse auszulesen, ohne eigene Zertifikate dafür zu erstellen und zu installieren. |
Microsoft sieht das wohl etwas anders und das mit Recht.
bbfan - Mi 06.04.05 14:39
Das mag sein. ist aber keine Lösung.
Laut MSN ist das die Lösung für VB. Dies Code erzeugt KEINE Warnmeldung!
Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| Sub TrustedCode() Dim olApp As Outlook.Application Set olApp = Application Dim oMail As Outlook.MailItem Set oMail = _ olApp.Session.GetDefaultFolder(olFolderInbox).Items(1) MsgBox oMail.SenderEmailAddress, vbInformation End Sub |
Jetzt brauche ich sowas für Delphi... 1:1 kann man es nicht übernehmen.... klar..
nelle - Do 07.04.05 09:03
@bbfan:
Dein gefundener VB Quellcode funktioniert mit Delphi (getestet mit D7) so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure TrustedCode(); const olFolderInbox = 6; var olApp : OleVariant; oMail : OleVariant; sAddress : String; begin olApp:= GetActiveOleObject('Outlook.Application'); oMail:=olApp.Session.GetDefaultFolder(olFolderInbox).Items.Item(1); sAddress:=oMail.SenderName; Application.MessageBox( PAnsiChar(sAddress), 'Information', Windows.MB_OK+Windows.MB_ICONINFORMATION); oMail:= Variants.Unassigned; olApp:= Variants.Unassigned; end; |
Wie Du feststellen wirst, habe ich
nicht oMail.SenderEmailAddress verwendet. Diese Eigenschaft gibt es (zumindest bei Outlook 2000) nämlich nicht.
Außerdem muss ich Dich enttäuschen: Dies ist
kein "Trusted Code", wie Du angenommen hast. OL meldet sich trotzdem mit dem Warnhinweis.
Du musst Deinen Code wohl oder übel digital signieren... :(
Nelle
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!