Ver Mensaje Individual
  #1  
Antiguo 14-09-2007
Avatar de maxvera
maxvera maxvera is offline
Miembro
 
Registrado: jun 2006
Posts: 21
Reputación: 0
maxvera Va por buen camino
Ocultar destinatarios

Saludos para el Foro.

Tengo esta función para enviar e-mails desde mi aplicación:

Código Delphi [-]
  function SendMail(Handle: THandle; Mail: TStrings): 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;
  begin
    dwRet := MapiLogon(Handle,
      PChar(''),
      PChar(''),
      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(PChar(Mail.Values['to']));
        Receip.lpszAddress := StrNew(PChar('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(PChar(FileName));
          Attachments[i1].lpszFileName :=
                          StrNew(PChar(ExtractFileName(FileName)));
          Attachments[i1].lpFileType := nil;
        end;
        MapiMessage.nFileCount := AttachCount;
        MapiMessage.lpFiles := @Attachments^;
      end;
      if Mail.Values['subject'] <> ''
      then MapiMessage.lpszSubject := StrNew(PChar(Mail.Values['subject']));
      if Mail.Values['body'] <> ''
      then MapiMessage.lpszNoteText := StrNew(PChar(Mail.Values['body']));
      WndList := DisableTaskWindows(0);
      try
      Result := MapiSendMail(MAPI_Session, Handle,
                             MapiMessage, MAPI_DIALOG, 0);
      finally
        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;

Funciona de maravilla, pero me gustaría poder ocultar la lista completa de destinatarios a cada destinatario individual.



Sé que tengo que utilizar algo relacionado con cc (carbon copy) pero no tengo ni idea de cómo implementarlo.

Agradecería cualquier ayuda de expertos en MAPI
__________________
El colmo del inmovilismo es el 0 absoluto.

Última edición por maxvera fecha: 17-09-2007 a las 09:13:43.
Responder Con Cita