Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Colaboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-09-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.142
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Pues lamento decirte que yo nunca he usado MAPI, y no parece algo como para ponerse en un rato... sin embargo, buscando en Google, el primer resultado (actualmente) es el artículo How to send email using the MAPI en Delphi 3000 (requiere registro gratuito, probablemente). Y me he parado ahí, porque, en el artículo se presenta un componente que hace de "envoltorio" a MAPI, y, entre otras cosas, dicho componente permite el envío del correo a múltiples destinatarios...

No lo he mirado sino hasta ahí. He pensado que tal vez podrías estudiar el funcionamiento de dicho componente, y, o bien usarlo sin más, o bien adaptar su código o parte de él a tus necesidades. Ya te digo que yo ahora mismo poco o nada puedo decir sobre MAPI y su funcionamiento. Lo siento.

Cita:
Respecto a Seoane, he estado en su página, pero no he visto ningún artículo sobre el particular.
Je, je, je... bueno. En realidad la referencia está en mi firma, no es que te lo dijera a ti expresamente. Además, tal vez no sobre MAPI (aún), pero, seguro que puedes encontrar cosas muy curiosas en la Web de Seoane.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #2  
Antiguo 17-09-2007
Avatar de maxvera
maxvera maxvera is offline
Miembro
 
Registrado: jun 2006
Posts: 21
Poder: 0
maxvera Va por buen camino
Allá voy.

Muchas gracias por tu interés.

Si lo soluciono haré otro post con el código final (por si a alguien pudiera interesar).

Saludos.
__________________
El colmo del inmovilismo es el 0 absoluto.
Responder Con Cita
  #3  
Antiguo 17-09-2007
Avatar de maxvera
maxvera maxvera is offline
Miembro
 
Registrado: jun 2006
Posts: 21
Poder: 0
maxvera Va por buen camino
Bien. La función (que funciona) queda así:

(Añadir la unidad MAPI al uses del formulario);

Código Delphi [-]
  function SendMail(Handle: THandle; Mail: TStrings): Cardinal;
  type
    TAttachAccessArray = array [0..0] of TMapiFileDesc;
    PAttachAccessArray = ^TAttachAccessArray;
    TDirecAccessArray = array [0..0] of TMapiRecipDesc;
    PDirecAccessArray = ^TDirecAccessArray;
  var
    MapiMessage: TMapiMessage;
    Receip: PDirecAccessArray;
    Attachments: PAttachAccessArray;
    AttachCount, DireccionesCount: 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;
      Receip := nil;
      DireccionesCount := 0;
      for i1 := 0 to MaxInt do begin
        if Mail.Values['bcc' + IntToStr(i1)] = ''
        then Break;
        Inc(DireccionesCount);
      end;
      if DireccionesCount > 0 then
      begin
        GetMem(Receip, SizeOf(TMapiRecipDesc) * DireccionesCount);
        for i1 := 0 to DireccionesCount - 1 do begin
          Receip[i1].ulReserved := 0;
          Receip[i1].ulRecipClass := MAPI_BCC;
          Receip[i1].lpszName := StrNew(PChar(Mail.Values['bcc' + IntToStr(i1)]));
          Receip[i1].lpszAddress := StrNew(PChar('SMTP:' +
                                    Mail.Values['bcc' + IntToStr(i1)]));
          Receip[i1].ulEIDSize := 0;
        end;
        MapiMessage.nRecipCount := DireccionesCount;
        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 DireccionesCount - 1 do
      begin
        if Assigned(Receip[i1].lpszAddress)
        then StrDispose(Receip[i1].lpszAddress);
        if Assigned(Receip[i1].lpszName)
        then StrDispose(Receip[i1].lpszName);
      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);
      MapiLogOff(MAPI_Session, Handle, 0, 0);
    end;
  end;

Y el código para los archivos adjuntos y los destinatarios podría ser este:

Código Delphi [-]
    maillist := TStringList.Create;
    direcciones := TStringList.Create;
    with DM.QrMailSelect do begin
      First;
      while not eof do begin
        if Trim(DM.QrMailSelectFnE_mail.Value) <> ''
        then direcciones.Append(DM.QrMailSelectFnE_mail.Value);
        Next;
      end;
    end;
    for i := 0 to direcciones.Count - 1
    do maillist.values['bcc' + IntToStr(i)] := direcciones.Strings[i];
    try
      maillist.values['subject'] := _('Document sending.');
      for i := 0 to documentos.Count - 1
      do maillist.values['attachment' + IntToStr(i)] := documentos.Strings[i];
      sendMail(Application.Handle, maillist);
    finally
      maillist.Free;
      direcciones.Free;
    end;

Donde documentos es un stringlist que le paso en otro procedimiento.

Funciona perfectamente con todos los destinatarios ocultos, aunque se podría completar incluyendo también destinatarios 'to' y 'cc'.

Los grupos '_(' en el código forman parte del gnugettext. En el caso de no estar usando tal soporte, basta con eliminarlos.

Gracias a dec por su apoyo.
__________________
El colmo del inmovilismo es el 0 absoluto.

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


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ocultar tu aplicacion sergio_015 Varios 11 14-05-2008 21:22:20
... sin nada que ocultar ... Jure Humor 0 25-05-2004 17:21:01
Ocultar Iconos Nathan API de Windows 9 24-03-2004 16:23:11
Ocultar Nathan Varios 2 11-03-2004 17:32:14
ocultar botones67 Varios 3 04-10-2003 15:35:37


La franja horaria es GMT +2. Ahora son las 04:40:22.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi