Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Email Adresse des Senders über MAPI holen (https://www.delphipraxis.net/61157-email-adresse-des-senders-ueber-mapi-holen.html)

ken_jones 17. Jan 2006 16:39


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!

marabu 17. Jan 2006 17:38

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 REDEMPTION. Du schreibst zwar MAPI, aber alles deutet daraufhin, dass du die Outlook Automatisierung verwendest.

Grüße vom marabu

ken_jones 17. Jan 2006 20:25

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?

marabu 17. Jan 2006 20:55

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

ken_jones 17. Jan 2006 22:42

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

Und dann noch die MAPI Services von Evocorp
MAPI Services

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

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.

ken_jones 18. Jan 2006 09:22

Re: Email Adresse des Senders über MAPI holen
 
Liste der Anhänge anzeigen (Anzahl: 1)
So, hier die versprochene Version:

Zuerst die MAPI Headers herunterladen.

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.

meg 5. Apr 2006 15:13

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

ken_jones 5. Apr 2006 20:49

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.

meg91 25. Apr 2006 18:17

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?

ken_jones 25. Apr 2006 21:32

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 17:21 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz