AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) MapiSendMail, Festellen welcher Empfänger angegeben wurde

MapiSendMail, Festellen welcher Empfänger angegeben wurde

Ein Thema von norwegen60 · begonnen am 20. Jan 2013 · letzter Beitrag vom 23. Jan 2013
Antwort Antwort
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
504 Beiträge
 
Delphi 12 Athens
 
#1

MapiSendMail, Festellen welcher Empfänger angegeben wurde

  Alt 20. Jan 2013, 16:27
Hallo,

ich verschicke per
Delphi-Quellcode:
function TuHilfs1.SendEMail(Handle: THandle; var Mail: TStringlist): Cardinal;
type
  TAttachAccessArray = array [0..0] of TMapiFileDesc;
  PAttachAccessArray = ^TAttachAccessArray;
var
  MapiMessage: TMapiMessage;
  Receip: TMapiRecipDesc;
  Attachments: PAttachAccessArray;
  AttachCount: Integer;
  i1: integer;
  FileName: string;
  dwRet: Cardinal;
  MAPI_Session: Cardinal;
  WndList: Pointer;
  sTo : PAnsiChar;
begin
  dwRet := MapiLogon(Handle,
    PAnsiChar(''),
    PAnsiChar(''),
    MAPI_LOGON_UI or MAPI_NEW_SESSION,
    0, @MAPI_Session);

  if (dwRet <> SUCCESS_SUCCESS) then
  begin
    MessageBox(Handle,
      PChar('Error while trying to send email'),
      PChar('Error'),
      MB_ICONERROR or MB_OK);
  end
  else
  begin
    FillChar(MapiMessage, SizeOf(MapiMessage), #0);
    Attachments := nil;
    FillChar(Receip, SizeOf(Receip), #0);

    if Mail.Values['to'] <> 'then
    begin
      Receip.ulReserved := 0;
      Receip.ulRecipClass := MAPI_TO;
      Receip.lpszName := StrNew(PAnsiChar(AnsiString(Mail.Values['to'])));
      Receip.lpszAddress := StrNew(PAnsiChar(AnsiString('SMTP:' + Mail.Values['to'])));
      Receip.ulEIDSize := 0;
      MapiMessage.nRecipCount := 1;
      MapiMessage.lpRecips := @Receip;
    end;

    AttachCount := 0;

    for i1 := 0 to MaxInt do
    begin
      if Mail.Values['attachment' + IntToStr(i1)] = 'then
        break;
      Inc(AttachCount);
    end;

    if AttachCount > 0 then
    begin
      GetMem(Attachments, SizeOf(TMapiFileDesc) * AttachCount);

      for i1 := 0 to AttachCount - 1 do
      begin
        FileName := Mail.Values['attachment' + IntToStr(i1)];
        Attachments[i1].ulReserved := 0;
        Attachments[i1].flFlags := 0;
        Attachments[i1].nPosition := ULONG($FFFFFFFF);
        Attachments[i1].lpszPathName := StrNew(PAnsiChar(AnsiString(FileName)));
        Attachments[i1].lpszFileName :=
          StrNew(PAnsiChar(AnsiString(ExtractFileName(FileName))));
        Attachments[i1].lpFileType := nil;
      end;
      MapiMessage.nFileCount := AttachCount;
      MapiMessage.lpFiles := @Attachments^;
    end;

    if Mail.Values['subject'] <> 'then
      MapiMessage.lpszSubject := StrNew(PAnsiChar(AnsiString(Mail.Values['subject'])));
    if Mail.Values['body'] <> 'then
      MapiMessage.lpszNoteText := StrNew(PAnsiChar(AnsiString(Mail.Values['body'])));

    WndList := DisableTaskWindows(0);
    try
    { Achtung MaQMa ist nicht bedienbar, bis die Mail wieder geschlossen ist }
    Result := MapiSendMail(MAPI_Session, Handle, MapiMessage,
        MAPI_DIALOG or MAPI_LOGON_UI or MAPI_NEW_SESSION, 0);
    finally
      sTo := Receip.lpszName; //:= StrNew(PAnsiChar(AnsiString(Mail.Values['to'])));
      Mail.Values['to'] := sTo;
      sTo := Receip.lpszAddress; //:= StrNew(PAnsiChar(AnsiString(Mail.Values['to'])));
      Mail.Values['to'] := sTo;
      EnableTaskWindows( WndList );
    end;

    for i1 := 0 to AttachCount - 1 do
    begin
      StrDispose(Attachments[i1].lpszPathName);
      StrDispose(Attachments[i1].lpszFileName);
    end;

    if Assigned(MapiMessage.lpszSubject) then
      StrDispose(MapiMessage.lpszSubject);
    if Assigned(MapiMessage.lpszNoteText) then
      StrDispose(MapiMessage.lpszNoteText);
    if Assigned(Receip.lpszAddress) then
      StrDispose(Receip.lpszAddress);
    if Assigned(Receip.lpszName) then
      StrDispose(Receip.lpszName);
    MapiLogOff(MAPI_Session, Handle, 0, 0);
  end;
end;
und das funktioniert in so weit auch ganz gut. Durch das Öffnen des Outlook-Fensters hat der Anwender noch die Möglichkeit, weitere Empfänger einzufügen. Wie kann ich jetzt feststellen, welches die letztlich verwendeten Empfänger waren? In Receip.lpszName stehen immer noch nur die, die ich eingefügt habe

Danke für eure Tips
Gerd
  Mit Zitat antworten Zitat
Tyrolean

Registriert seit: 3. Jul 2003
76 Beiträge
 
Delphi 7 Professional
 
#2

AW: MapiSendMail, Festellen welcher Empfänger angegeben wurde

  Alt 23. Jan 2013, 08:59
Hallo!

und das funktioniert in so weit auch ganz gut. Durch das Öffnen des Outlook-Fensters hat der Anwender noch die Möglichkeit, weitere Empfänger einzufügen. Wie kann ich jetzt feststellen, welches die letztlich verwendeten Empfänger waren? In Receip.lpszName stehen immer noch nur die, die ich eingefügt habe

Danke für eure Tips
Gerd
Soweit ich weiss geht das über MAPI alleine nicht (Aussage von Peter Wolters von Rapware.nl). Mit Mapi-Extended sollte das gehen, dass du nach dem übergeben der Mail und nachdem der User Send gedrückt hat du dir die Mail wieder vom Outlook holst und dann deine zusätzlichen Empfänger abfragen kannst.

Falls du das hinbekommst, wäre ich froh um eine kurze Nachricht, den sowas bräuchte ich auch

Gruß aus den Bergen
Günter
  Mit Zitat antworten Zitat
soulies

Registriert seit: 9. Dez 2005
234 Beiträge
 
#3

AW: MapiSendMail, Festellen welcher Empfänger angegeben wurde

  Alt 23. Jan 2013, 15:58
hoi,

du könntest evtl. auch MAPIAddress zusätzlich aufrufen.

Das öffnet den Dialog zum hinzufügen von Empfängern.
Du kannst deine Liste übergeben und anzeigen und erhälst am Ende
eine finale Liste (also falls der User einen Empfänger hinzugefügt hat).

in etwa so ...
Delphi-Quellcode:
    if Mail.Values['to'] <> 'then
    begin
      Receip.ulReserved := 0;
      Receip.ulRecipClass := MAPI_TO;
      Receip.lpszName := StrNew(PAnsiChar(AnsiString(Mail.Values['to'])));
      Receip.lpszAddress := StrNew(PAnsiChar(AnsiString('SMTP:' + Mail.Values['to'])));
      Receip.ulEIDSize := 0;
      MapiMessage.nRecipCount := 1;
      MapiMessage.lpRecips := @Receip;
    end;

    MapiAddress( MAPI_Session,
                 Handle,
                 'Empfänger',
                 1, // ein Textfeld nur fuer "To"
                 '',
                 1, // deine bisherige anzahl
                 Receip, // deine bisherige liste
                 0 ,
                 0 ,
                 @new_count, // neue anzahl
                 new_list ); // neue liste
    MapiMessage.nRecipCount := new_count ;
    MapiMessage.lpRecips := new_list;

    AttachCount := 0;
vielleicht kannst Du damit weiter arbeiten.


cya
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:45 Uhr.
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