Autor Beitrag
bbfan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164



BeitragVerfasst: Mi 06.04.05 10:02 
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.

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:
ausblenden 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 user profile iconTino: Code- durch Delphi-Tags ersetzt.
Lossy eX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: 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.

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
bbfan Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164



BeitragVerfasst: 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....

ausblenden 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; // <- OutlookObject wird geholt
  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 user profile iconTino: Code- durch Delphi-Tags ersetzt.
tempme
Hält's aus hier
Beiträge: 12



BeitragVerfasst: 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
- 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 www.outlookcode.com angeboten wird.
bbfan Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164



BeitragVerfasst: 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:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
var olll:TOutlookApplication
OwnApplication : OLEVariant; // <- kommt aus dem OnConnection event und beinhaltet die trusted OutlookAppl.

olll.Assign((OwnApplication AS TOutlookApplication));
oder 
olll := (OwnApplication AS TOutlookApplication)


Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt.
tempme
Hält's aus hier
Beiträge: 12



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164



BeitragVerfasst: 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
Hält's aus hier
Beiträge: 12



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164



BeitragVerfasst: 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
Hält's aus hier
Beiträge: 12



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164



BeitragVerfasst: 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
nelle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Mi 06.04.05 13:46 
In der Microsoft Developers Network kannst Du den Artikel How to Prevent the VBA Macro Security Warning in Microsoft Outlook 2000 finden. Hier wird beschrieben, dass es auch möglich ist, sich selbst ein Zertifikat auszustellen mit dessen Hilfe ein "trusted" Code signiert werden kann.

Nelle
bbfan Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164



BeitragVerfasst: 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.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 06.04.05 14:19 
user profile iconbbfan 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164



BeitragVerfasst: 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!

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Do 07.04.05 09:03 
@bbfan:
Dein gefundener VB Quellcode funktioniert mit Delphi (getestet mit D7) so:
ausblenden 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;//SenderEmailAddress
  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