Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Colaboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #5  
Antiguo 17-09-2007
Avatar de maxvera
maxvera maxvera is offline
Miembro
 
Registrado: jun 2006
Posts: 21
Poder: 0
maxvera Va por buen camino
Gracias David por tu respuesta.

He comprobado que la función hace su trabajo incluso sin el Receip['to'], pero siempre y cuando sólo haya una dirección de e-mail.

Si hay más de una, el cliente de correo me devuelve un error al intentar enviar el mensaje (con 'to' y sin 'to'). El error dice que no puede enviar a la dirección 'direcciondecorreo1;direcciondecorreo2;...;direcciondecorreoN'.

Es decir, parece como si interpretara la cadena de direcciones como una sola.

Aunque sigo pegao con el problema, me parece entender tras un análisis (?)que la función está preparada para un solo destinatario.

Esto me ha llevado a probarme (cual ciego, dando palos) y he desarrollado este nuevo código para la función:

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);
//        FillChar(Receip, SizeOf(TMapiRecipDesc) * DireccionesCount, #0);
        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;

Con el resultado bastante previsible de que, aunque recorre el código sin error, al final no hace nada. Y digo nada. No abre ni siquiera el cliente de correo.

En cuanto a la línea que está comentada, aclarar que con ella sí que generaba un error. La cambié por la inmediatamente superior (en otro memorable palo de ciego) y el error desapareció.

Lo dicho: estoy más pegao con este tema...

A ver si eres capaz de iluminarme como sueles.

Gracias y saludos.
__________________
El colmo del inmovilismo es el 0 absoluto.
Responder Con Cita
 



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 23:55:53.


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