Einzelnen Beitrag anzeigen

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, 15: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