![]() |
Email Adresse des Senders über MAPI holen
Etwas ganz einfaches und doch so kompliziert...
Ich hab auf meinem System XP und OL2002 installiert. Über MAPI kann ich auf alle Mails zugreifen, die Inhalte holen, etc. Über SentOnBehalfOfName oder ReplyRecipients komme ich sogar an den Sender er Email ran, SOFERN dieser nicht im Adressbuch steht. Da kommt jetzt mein Problemchen. Sobald der Sender im Adressbuch steht, ist ReplyRecipients leer und in SentOnBehalfOfName steht nur der Name des Senders drin, nicht aber seine Email Adresse. Warscheinlich muss ich jetzt die Email Adresse aus den Kontakten auslesen oder sowas... Hat jemand einen Beispielcode zur Hand, wie ich an die Email Adresse des Senders komme? Thx! |
Re: Email Adresse des Senders über MAPI holen
Hi.
Sieht fast so aus, als wärst auch du ein Opfer des OL Object Model Guard - und damit ein Fall für ![]() Grüße vom marabu |
Re: Email Adresse des Senders über MAPI holen
Danke, stimmt, ich gehe über die "Outlook.Application" Ole, habs aber auch über MAPI versucht. Im Netz finden sich dutzende von Beispielen, aber die meisten taugen nichts, oder bringen denselben Effekt.
Ok, Redemption scheint ein Lösungsansatz zu sein. Behalt ihn mir mal als Notnagel in Gedanken. Aber wie macht zum Beispiel der Google Desktopsearch den Zugriff? Der liest aus meinem Outlook2002 die Mails inklusive den Senderemailadressen raus, ohne eine Sicherheitsabfrage oder ähnliches zu generieren. Einzige Voraussetzung, Outlook muss gestartet sein. Wenn Google das schafft, müssen wir das doch auch können, oder ned? |
Re: Email Adresse des Senders über MAPI holen
Google wird das wahrscheinlich genauso machen, wie Redemption - über Extended MAPI. Das ist der Weg, den MS empfiehlt, kompromisslos sicher und versionsunabhängig.
marabu |
Re: Email Adresse des Senders über MAPI holen
Yeah, das war das Stichwort! Extended MAPI! Ich depp...
Ich hab mir die neusten MAPI Headers runtergeladen: ![]() Und dann noch die MAPI Services von Evocorp ![]() Wenn man das ganze nicht als Service ausführen möchte, so muss man noch in den Sources der MAPI Services folgendes ändern: Bei der Funktion MapiServicesLogOn nur das Flag MAPI_EXTENDED sein lassen, die restlichen löschen. Und schon kann ich auf alle Daten von Outlook zugreifen, ohne eine Sicherheitsabfrage von Outlook. Beispielcode:
Delphi-Quellcode:
Und wenn man nun mit GetSender (oder MailItem.Sender) lieber die Email statt den Namen haben möchte, so ersetzt man einfach in der GetSender Funktion den Wert PR_SENDER_NAME mit PR_SENDER_EMAIL_ADDRESS.
uses
MapiServices; procedure DisplayMyMailItems; var InBox: TInbox; MailItem: TMapiMailItem; begin // Insert your actual account name in place // of MyAccountName, for instance "Bloggs, Joe" InBox := TInBox.Create('MyAccountName'); try MailItem := InBox.GetFirst; while Assigned(MailItem) do begin ShowMessage('From: ' + MailItem.Sender + #13#10 + 'Subject: ' + MailItem.Subject); // Do what you need to do here // ... // and then release MailItem. MailItem.Free; MailItem := InBox.GetNext; end; finally InBox.Free; end; end; Das ganze hab ich jetzt aber so schlecht hingeschlurft, dass ich noch kein Codebeispiel von mir uppe. Aber ich säubere mal meinen Code und dann gibts den Code später noch dazu. Danke marabu, du hast mich auf den richtigen Weg gebracht. |
Re: Email Adresse des Senders über MAPI holen
Liste der Anhänge anzeigen (Anzahl: 1)
So, hier die versprochene Version:
Zuerst die ![]() Dann, anstelle der MapiServices gibts jetzt die leicht modifizierte MapiWrapper.pas dazu. Und zum Schluss eine Testunit für das ganze:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Math; type TForm1 = class(TForm) bGetMails: TButton; mMails: TMemo; procedure bGetMailsClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} uses MapiWrap; procedure TForm1.bGetMailsClick(Sender: TObject); var InBox: TInbox; MailItem: TMapiMailItem; begin InBox := TInBox.Create('Doe, John'); try MailItem := InBox.GetFirst; while Assigned(MailItem) do begin mMails.Lines.Add(Format('From: %s <%s>'#13#10'Subject: %s'#13#10'%s'#13#10, [MailItem.Sender, MailItem.SenderEmail, MailItem.Subject, Copy(MailItem.Body, 1, Min(50, Pos(#13, MailItem.Body)))])); MailItem.Free; MailItem := InBox.GetNext; end; finally InBox.Free; end; end; end. |
Re: Email Adresse des Senders über MAPI holen
hey echt toll was du hier gepostest hast, nur leider kommt bei mir immer eine Fehlermeldung, das ein Fehler beim einloggen in die extended MAPI aufgetreten ist
Soweit ich das gesehen habe hängt das mit dem falschen InBox := TInBox.Create('...'); Eintrag zusammen (also da wo die Punkte sin hab ich wahrscheinlich des falsche reingeschrieben) Was muss ich da für einen Namen eintragen? Und wie kann ich da vielleicht eine größere Kombalibilität erreichen, auch ohne diesem Kontonamen oder was immer das ist eintragen zu müssen? gruß meg |
Re: Email Adresse des Senders über MAPI holen
Tja, in was für eine Art Konto versuchst du dich denn einzuloggen? Outlook? Wenn ja, dann ist dort der Login (also der '...' Ersatz) meistens mit dem Kontonamen identisch. Sprich beim User Beat Muster wäre das meistens "Muster, Beat".
Und um den Kontonamen kommst du nicht herum. Schliesslich muss die Extended Mapi ja wissen, wo sie sich anmelden soll. |
Re: Email Adresse des Senders über MAPI holen
hab das ganze auch mal ausprobiert
nur bei mir muss da Outlook immer an sein sonst kommt ne Fehlermeldung kann man das auch machen , ohne das Outlook gestartet sein muss? |
Re: Email Adresse des Senders über MAPI holen
Da begebe ich mich jetzt auf dünnes Eis, aber ich behaupte mal, dass ohne laufendes Outlook kein Zugriff per Extended Mapi möglich ist. imho stellt Outlook selber die Ressourcen für Login, Abruf, etc. zur Verfügung. GDS (GoogleDesktopSearch) verlangt ebenfalls, dass die Standardmailapplikation gestartet sein muss. Wohl nicht ohne Grund.
Was aber sicher möglich ist, wäre das automatische starten von Outlook vor dem Zugriff. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz