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 >>>>> <*> 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