Engraçado. Essa Função já zanzou aqui na lista umas 4 vezes e nunca
funcionava. Agora esta daí funciona :)

[]s

Walter Alves Chagas Junior
Projeto e desenvolvimento
Telemont Engenharia de telecomunicações
Belo Horizonte - MG - Brazil
[EMAIL PROTECTED]
Fone: (31) 3389-8215 Fax: (31) 3389-8200


-----Mensagem original-----
De: delphi-br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED]
nome de Moacir (gmail)
Enviada em: sexta-feira, 17 de fevereiro de 2006 22:26
Para: delphi-br@yahoogrupos.com.br
Assunto: Re: RES: [delphi-br] Enviando e-mail


Walter,

Ja usei esta função sem ter problemas. Atualmente uso a Indy pra isto..

Function  SendMail( pTo,
                    pCC,
                    pCCo,
                    pAssunto,
                    pTexto: pChar;
                    aFiles: Array Of PChar ) : String;
var
  iRetorno : cardinal;
  sTo, sCC, sCCo, sAux: String;
  MapiMessage: TMapiMessage;
  pRecipiente: PMapiRecipDesc ;
  aRecipiente :array of TMapiRecipDesc ;
  aArquivoEnvio: array of  TMapiFileDesc ;
  i, iRecip, iFiles:integer;
Const
   ERRO_MAPI_AMBIGUOUS_RECIPIENT= 'O destinatário não pode ser resolvido!!';
   ERRO_MAPI_FAILURE            = 'Ocorreram erros não 
especificados!'+#13+'Verifique se o Outlook Express é o sistema de 
mensagens padrão.';
   ERRO_MAPI_INSUFFICIENT_MEMORY= 'Memória insuficiente!!';
   ERRO_MAPI_NOT_SUPPORTED      = 'Operação não suportada pelo sistema 
de mensagens!';
begin
  iRecip := 0;
  //  Define destinatários 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 destinatários 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 destinatários 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
      iRetorno                      := MAPIResolveName( 0, 0, PChar( 
Copy( sTo, 1, Pos(';', sTo) - 1 ) ), 0, 0, pRecipiente );

    // VERIFICA  SE NÃO OCORREU ERROS
    If (iRetorno <> SUCCESS_SUCCESS) Then
    begin
       Case iRetorno Of
         MAPI_E_AMBIGUOUS_RECIPIENT: Result:= ERRO_MAPI_AMBIGUOUS_RECIPIENT;
         MAPI_E_FAILURE            : Result:= ERRO_MAPI_FAILURE            ;
         MAPI_E_INSUFFICIENT_MEMORY: Result:= ERRO_MAPI_INSUFFICIENT_MEMORY;
         MAPI_E_NOT_SUPPORTED      : Result:= ERRO_MAPI_NOT_SUPPORTED      ;
       else
         Result:= 'Erro ('+IntToStr(iRetorno)+') desconhecido !';
       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
    iRetorno := MAPIResolveName( 0, 0, PChar( Copy( sCC, 1, Pos(';', 
sCC) - 1 ) ), 0, 0, pRecipiente );
    // VERIFICA  SE NÃO OCORREU ERROS
    If (iRetorno <> SUCCESS_SUCCESS) Then
    begin
       Case iRetorno Of
         MAPI_E_AMBIGUOUS_RECIPIENT: Result:= ERRO_MAPI_AMBIGUOUS_RECIPIENT;
         MAPI_E_FAILURE            : Result:= ERRO_MAPI_FAILURE            ;
         MAPI_E_INSUFFICIENT_MEMORY: Result:= ERRO_MAPI_INSUFFICIENT_MEMORY;
         MAPI_E_NOT_SUPPORTED      : Result:= ERRO_MAPI_NOT_SUPPORTED      ;
       else
         Result:= 'Erro ('+IntToStr(iRetorno)+') desconhecido !';
       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
    iRetorno := MAPIResolveName( 0, 0, PChar( Copy( sCCo, 1, Pos(';', 
sCCo) - 1 ) ), 0, 0, pRecipiente );
    // VERIFICA  SE NÃO OCORREU ERROS
    If (iRetorno <> SUCCESS_SUCCESS) Then
    begin
       Case iRetorno Of
         MAPI_E_AMBIGUOUS_RECIPIENT: Result:= ERRO_MAPI_AMBIGUOUS_RECIPIENT;
         MAPI_E_FAILURE            : Result:= ERRO_MAPI_FAILURE            ;
         MAPI_E_INSUFFICIENT_MEMORY: Result:= ERRO_MAPI_INSUFFICIENT_MEMORY;
         MAPI_E_NOT_SUPPORTED      : Result:= ERRO_MAPI_NOT_SUPPORTED      ;
       else
         Result:= 'Erro ('+IntToStr(iRetorno)+') desconhecido !';
       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 parâmetros 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;

  // ativo o e-mail usado pelo usuário e coloca o destinatário, 
Assunto,corpo do e-mail e anexos
  //  Result := MapiSendMail(0, 0, MapiMessage, MAPI_DIALOG or 
MAPI_LOGON_UI or MAPI_NEW_SESSION, 0);

  //   caso você queira que não seja ativado o e-mail, apenas enviando a 
mensagem use a linha abaixo no lugar da linha acima.
  iRetorno := MapiSendMail( 0, 0, MapiMessage, 0, 0 );

  If iRetorno <> 0 Then
     Result:='Erro no envio ('+IntToStr(iRetorno)+')';

  // libera a memória alocada para o Recipiente
  MAPIFreeBuffer( pRecipiente );
End;

Exemplo de uso:

    SendMail(pChar('Pontual Cargas - Matriz <'+EMAIL_MATRIZ+'>'),
                   nil,
                   nil,
                   pChar('[PONTUAL CARGAS] AGENCIA '+sIDLocal+' 
Movimento de '+DEmovimento.EditText),
                   pChar('Enviado em 
'+FormatDateTime('dd'+DateSeparator+'mm'+DateSeparator+'yyyy" as 
"hh:nn',Now)+'         >> '+SIS_VER),
                   aAnexos);


[ ]´s
Moacir

Walter Alves Chagas Junior escreveu:
> E pelo Outlook (não é SMTP, é E-mail corporativo), alguém aí tem algum
> exemplo?
>
>
> []s
>
> Walter Alves Chagas Junior
> Projeto e desenvolvimento
> Telemont Engenharia de telecomunicações
> Belo Horizonte - MG - Brazil
> [EMAIL PROTECTED]
> Fone: (31) 3389-8215 Fax: (31) 3389-8200
>
>
> -----Mensagem original-----
> De: delphi-br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED]
> nome de Marco Aurélio
> Enviada em: quinta-feira, 16 de fevereiro de 2006 11:13
> Para: delphi-br@yahoogrupos.com.br
> Assunto: [delphi-br] Enviando e-mail
>
>
> Boa Tarde,
>
> Segue abaixo um passo-a-passo de como mandar email em DELPHI, sem ser um
> tutorial, mas sim detalhando passo a passo como pode utilizar, as funções.
O
> que gostaria do grupo é que analisa-se e falassem como poderia melhorar e
se
> essa 'receitinha'  funcionaria normalmente em um programa de envio de
email?
>
> Como criar um programa para envio de email
>
>  
>
> 1º Passo: Colocar dois componentes no formulário:
>
>  
>
>                         -IdSMTP(Paleta IndyClients)
>
>                         -IdMessage (palheta Indy Misc);
>
>  
>
> 2º Passo: Incluir no Formulário componentes(Edit,Label), dados que deseja
> ser configurado manualmente.
>
>  
>
>             Exemplo: Para(To), Assunto(Subject), Corpo da Mensagem(Body);
>
>  
>
> 3º Passo: Configurar o componente que irá enviar as mensagens:
>
>  
>
>             -IdSMTP
>
>                         -->[nomedoIdSmtp].Host := 'servidor.smtp.com.br';
>
>                         -->[nomedoIdSmtp].UserName := '[EMAIL PROTECTED]';
>
>                         -->[nomedoIdSmtp].Password := 'senhadelogin';
>
>                         //A linha abaixo é utilizada quando o usuário
> necessita fazer o login no servidor de email
>
>                         -->[nomedoIdSmtp].AuthenticationType := atLogin; 
>
>  
>
> 4º Passo: Terá de conectar no servidor de email:
>
>             -->[nomedoIdSmtp].Connect;
>
>  
>
> 5º Passo: Inserir um bloco de tentativa/exceções(try);
>
>  
>
>             Try
>
>                 {dentro deste bloco conterá o código para montar e tentar
> enviar a mensagem}
>
>                  //Inserir os próximos passos aqui.
>
>                
>
>             Finally
>
>               -->[nomedoIdSmtp].disconnect;
>
>             End;
>
>  
>
> 6º Passo: Configurar a mensagem a ser enviada:
>
>             //Configura o endereço que está enviando o email
>
>             -->[nomedoIdMessage].From.Address := nome ou componente que
> contenha o nome;
>
>             //Configura o nome de envio
>
> -->[nomedoIdMessage].From.Name := nome ou componente que contenha o nome;
>
> //Configura para qual e-mail será enviada a mensagem;
>
>             -->[nomedoIdMessage].Recipients.EmailAdresses := nome ou
> componente que contenha o nome;
>
> //Configurar a prioridade desejada
>
>             -->[nomedoIdMessage].priority := nome ou componente que
contenha
> as prioridades;
>
>             
>
> //Configura o assunto da mensagem
>
> -->[nomedoIdMessage].Subject := assunto ou nome do componente que contenha
o
> asssunto;
>
> //Configura o corpo da mensagem
>
> -->[nomedoIdMessage].Body := nomedocomponente ou corpodotextodamensagem;
>
> //Configura a mensagem para aceitar ou não text/html
>
> -->[nomedoIdMessage].ContentType := 'text/html';
>
>  
>
> 7º Passo: Enviar a Mensagem
>
>             -->[nomedoIdSmtp].Send(nomedoIdMessage);
>
>             
>
> Um forte abraço a todos.
>
> Ass: 
>
> Marco Aurélio
>
>
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>
>
>
>
>   



-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>


 
Links do Yahoo! Grupos




 




[As partes desta mensagem que não continham texto foram removidas]



-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

<*> Para ver as mensagens antigas, acesse:
    http://br.groups.yahoo.com/group/delphi-br/messages

<*> Para falar com o moderador, envie um e-mail para:
    [EMAIL PROTECTED]
 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 


Responder a