Mapi by send E-mail

Hello...Weel Im using a function to send a e-mail with more than 1 recept
and file attachment..

im using the function, and Im not able to send more than 1 file attachment,
and thins function is blocking the window to send the e-mail..Someone know
something to do??

Please..I need Help...

Thnks
Gabriel Moricz

Function SendMail( pTo, pCC, pCCo, pAssunto, pTexto:
PChar; aFiles: Array Of PChar; bShowDialog: Boolean )
: Cardinal;
var
  sTo, sCC, sCCo, sAux: String;
  MapiMessage: TMapiMessage;
  pRecipiente: PMapiRecipDesc ;
  aRecipiente :array of TMapiRecipDesc ;
  aArquivoEnvio: array of  TMapiFileDesc ;
  i, iRecip, iFiles:integer;
begin
  iRecip := 0;
  //  Define destinatrios TO
  sTo    := '';
  If Assigned( pTo ) Then Begin
    sAux := pTo;
    If sAux[Length(sAux)] <> ';' Then
      sAux := sAux + ';';
    While Pos( ';', sAux ) > 0 Do Begin
      Inc( iRecip );
      sTo := sTo + Copy( sAux, 1, Pos( ';', sAux ) );
      Delete( sAux, 1, Pos( ';', sAux ) );
    End;
  End;
  //  Define destinatrios CC
  sCC    := '';
  If Assigned( pCC ) Then Begin
    sAux := pCC;
    If sAux[Length(sAux)] <> ';' Then
      sAux := sAux + ';';
    While Pos( ';', sAux ) > 0 Do Begin
      Inc( iRecip );
      sCC := sCC + Copy( sAux, 1, Pos( ';', sAux ) );
      Delete( sAux, 1, Pos( ';', sAux ) );
    End;
  End;
  //  Define destinatrios CCo
  sCCo    := '';
  If Assigned( pCCo ) Then Begin
    sAux := pCCo;
    If sAux[Length(sAux)] <> ';' Then
      sAux := sAux + ';';
    While Pos( ';', sAux ) > 0 Do Begin
      Inc( iRecip );
      sCCo := sCCo + Copy( sAux, 1, Pos( ';', sAux ));
      Delete( sAux, 1, Pos( ';', sAux ) );
    End;
  End;
  // cria  o tamanho do array de recipiente
  SetLength(aRecipiente, iRecip);
  I := 0;
  // Define recipientes TO
  While sTO <> '' Do Begin
    Result := MAPIResolveName( 0, 0, PChar( Copy( sTo, 1, Pos(';', sTo) -
1 ) ), 0, 0, pRecipiente );
    // VERIFICA  SE N?O OCORREU ERROS
    If (Result <> SUCCESS_SUCCESS) Then begin
      Case Result Of
        MAPI_E_AMBIGUOUS_RECIPIENT: MessageDlg('O destinatrio n?o pode ser
resolvido!!',MtError,[MBok],0);
        MAPI_E_FAILURE: MessageDlg('Ocorreram um ou mais erros n?o
especificados!',MtError,[MBOK],0);
        MAPI_E_INSUFFICIENT_MEMORY: MessageDlg('Memria
insuficiente!!',MtError,[MBOK],0);
        MAPI_E_NOT_SUPPORTED: MessageDlg('Opera??o n?o suportada pelo
sistema de mensagens!',MtError,[MBOK],0);
      else
        MessageDlg('Erro desconhecido!',MtError,[MBOK],0);
      end;
        Exit;
    end;
    aRecipiente[i].ulReserved := pRecipiente.ulReserved;
    aRecipiente[i].lpszName := pRecipiente.lpszName;
    aRecipiente[i].lpszAddress := pRecipiente.lpszAddress;
    aRecipiente[i].ulEIDSize := pRecipiente.ulEIDSize;
    aRecipiente[i].lpEntryID := pRecipiente.lpEntryID;
    aRecipiente[i].ulRecipClass := MAPI_TO;
    Delete( sTO, 1, Pos( ';', sTO ) );
    Inc( I );
  End;
  // Define recipientes CC
  While sCC <> '' Do Begin
    Result := MAPIResolveName( 0, 0, PChar( Copy( sCC,
    1, Pos(';', sCC) - 1 ) ), 0, 0, pRecipiente );
    // VERIFICA  SE N?O OCORREU ERROS
    If (Result <> SUCCESS_SUCCESS) Then begin
      Case Result Of
        MAPI_E_AMBIGUOUS_RECIPIENT: MessageDlg('O destinatrio n?o pode ser
resolvido!!',MtError,[MBok],0);
        MAPI_E_FAILURE: MessageDlg('Ocorreram um ou mais erros n?o
especificados!',MtError,[MBOK],0);
        MAPI_E_INSUFFICIENT_MEMORY: MessageDlg('Memria
insuficiente!!',MtError,[MBOK],0);
        MAPI_E_NOT_SUPPORTED: MessageDlg('Opera??o n?o suportada pelo
sistema de mensagens!',MtError,[MBOK],0);
      else
        MessageDlg('Erro desconhecido!',MtError,[MBOK],0);
      end;
      Exit;
    end;
    aRecipiente[i].ulReserved := pRecipiente.ulReserved;
    aRecipiente[i].lpszName := pRecipiente.lpszName;
    aRecipiente[i].lpszAddress := pRecipiente.lpszAddress;
    aRecipiente[i].ulEIDSize := pRecipiente.ulEIDSize;
    aRecipiente[i].lpEntryID := pRecipiente.lpEntryID;
    aRecipiente[i].ulRecipClass := MAPI_CC;
    Delete( sCC, 1, Pos( ';', sCC ) );
    Inc( I );
  End;
  // Define recipientes BCC
  While sCCo <> '' Do Begin
    Result := MAPIResolveName( 0, 0, PChar( Copy(sCCo, 1, Pos(';', sCCo) -
1 ) ), 0, 0, pRecipiente );
    // VERIFICA  SE N?O OCORREU ERROS
    If (Result <> SUCCESS_SUCCESS) Then begin
      Case Result Of
        MAPI_E_AMBIGUOUS_RECIPIENT: MessageDlg('O destinatrio n?o pode ser
resolvido!!',MtError,[MBok],0);
        MAPI_E_FAILURE: MessageDlg('Ocorreram um ou mais erros n?o
especificados!',MtError,[MBOK],0);
        MAPI_E_INSUFFICIENT_MEMORY: MessageDlg('Memria
insuficiente!!',MtError,[MBOK],0);
        MAPI_E_NOT_SUPPORTED: MessageDlg('Opera??o n?o suportada pelo
sistema de mensagens!',MtError,[MBOK],0);
      else
        MessageDlg('Erro desconhecido!',MtError,[MBOK],0);
      end;
        Exit;
    end;
    aRecipiente[i].ulReserved := pRecipiente.ulReserved;
    aRecipiente[i].lpszName := pRecipiente.lpszName;
    aRecipiente[i].lpszAddress := pRecipiente.lpszAddress;
    aRecipiente[i].ulEIDSize := pRecipiente.ulEIDSize;
    aRecipiente[i].lpEntryID := pRecipiente.lpEntryID;
    aRecipiente[i].ulRecipClass := MAPI_BCC;
    Delete( sCCo, 1, Pos( ';', sCCo ) );
    Inc( I );
  End;
  iFiles := Length( aFiles );
  // cria o tamanho do array de anexos
  SetLength(aArquivoEnvio, iFiles);
  // indica os parametros para cada recepiente de anexos
  For I := 0 To High(aArquivoEnvio) Do Begin
    aArquivoEnvio[i].ulReserved   := 0;
    aArquivoEnvio[i].flFlags      := 0;
    aArquivoEnvio[i].nPosition    := 0;
    aArquivoEnvio[i].lpszPathName := aFiles[I];
    aArquivoEnvio[i].lpszFileName := Nil;
    aArquivoEnvio[i].lpFileType   := Nil;
  End;
  //  configura o MapiMessage  para ser usando pelo MapiSendMail
  With MapiMessage Do Begin
    ulReserved         := 0;
    lpszSubject        := pAssunto;
    lpszNoteText       := pTexto;
    lpszMessageType    := Nil;
    lpszDateReceived   := Nil;
    lpszConversationID := Nil;
    flFlags            := 0;
    lpOriginator       := Nil;
    nRecipCount        := iRecip;
    lpRecips           := @aRecipiente[0];
    nFileCount         := iFiles;
    lpFiles            := @aArquivoEnvio[0];
  end;
  If bShowDialog Then
    // ativo o e-mail usado pelo usurio e coloca o destinatrio,
Assunto,corpo do e-mail e anexos
    Result := MapiSendMail(0, 0, MapiMessage, MAPI_DIALOG Or MAPI_LOGON_UI
Or MAPI_NEW_SESSION, 0)
  Else
    //   caso voc queira que n?o seja ativado o e-mail, apenas enviando a
mensagem use a linha abaixo no lugar da linha acima.
    Result := MapiSendMail(0, 0, MapiMessage, 0, 0 );
  If Result <> 0 Then
    MessageDlg('Erro no envio',MtError,[MBOK],0);
  // libera a memria alocada para o Recipiente
  MAPIFreeBuffer( pRecipiente );
End;
__________________________________________________________________ G@briel
Moricz ICQ#: 4824537 Current ICQ status: + More ways to contact me i See
more about me:
__________________________________________________________________