Enviar Email pelo Delphi usando o Outlook

Delphi

01/07/2010

boa Tarde Pessoal
estou com um problema e gostaria que voces me ajudassem

estou tentando enviar um email pelo delphi usando o outllook,

consegui abrir o outlook e preecher os campos PARA, ASSUNTO e MENSAGEM
só que tem um detalhe..

na MENSAGEM nao consigo quebrar linha, portanto o Outlook quando abre, aparece a mensagem corrente.

Eu preciso que seja assim:
PARA: teste@teste.com.br
ASSUNTO: Teste Envio
MENSAGEM: teste 1
                    teste 2
                    e assim por diante.

só que sai assim
MENSAGEM: teste1teste2e assim por diante

já tentei usar #13 e/ou #10 e nada funcionou

aki esta o codigo que estou usando

procedure TfrmPRINCIPAL.SpeedButton1Click(Sender: TObject);
var mensagem: String;
var m1:string;                        
begin
m1:=' TESTE MENSAGEM   '+#13#10+''
+'teste 1'+#13+''
+'teste 2 ';      

    completo:= 'mailto:teste@teste.com.br'+
    '?subject=teste assunto '+
    '&body= '+m1+'   ';


    ShellExecute(GetDesktopWindow,'open',pchar(mensagem),nil,nil,sw_ShowNormal);


Obrigado



Rodrigo

Rodrigo

Curtidas 0

Respostas

Fábio Cruz

Fábio Cruz

01/07/2010

tentou utilizar a TAG html para quebra de linha?  <br />
GOSTEI 0
Euclides Cunha

Euclides Cunha

01/07/2010

Posso te ajudar, mas utilizando os componetes socket ou mesmo Indy, pra enviar e-mail.. e anexos tbm.. se te ajuda posso postar isso.. aqui.. mas só amanhã ou depois.. flw
GOSTEI 0
Marco Salles

Marco Salles

01/07/2010

Bem ,depende do Sistema Operacional o #13#10 não irá funcionar Use a Constante sLineBreak Definida na Uses System; Veja a definiççao desta Constante  
const
   sLineBreak = {$IFDEF LINUX} AnsiChar(#10) {$ENDIF}
      {$IFDEF MSWINDOWS} AnsiString(#13#10) {$ENDIF}
      {$IFDEF MACOSX} AnsiChar(#10) {$ENDIF};
  Esta Constante independe do Sistema Operacional ) Pois esta protegida pelas directivas de Compilação
GOSTEI 0
Marco Salles

Marco Salles

01/07/2010

Bem ,depende do Sistema Operacional o #13#10 não irá funcionar Use a Constante sLineBreak Definida na Uses System; Veja a definiççao desta Constante  
const
   sLineBreak = {$IFDEF LINUX} AnsiChar(#10) {$ENDIF}
      {$IFDEF MSWINDOWS} AnsiString(#13#10) {$ENDIF}
      {$IFDEF MACOSX} AnsiChar(#10) {$ENDIF};
  Esta Constante independe do Sistema Operacional ) Pois esta protegida pelas directivas de Compilação
GOSTEI 0
Rodrigo

Rodrigo

01/07/2010

Rafael se possivel, poste o codigo por favor pra ver se consigo fazer

Muito Obrigado
GOSTEI 0
Rodrigo

Rodrigo

01/07/2010

Euclides, por favor se possivel poste o codigo

Obrigado
GOSTEI 0
Rodrigo

Rodrigo

01/07/2010

Marco, eu nao entendi muito bem estes codigo, sou iniciante
agradecei se voce pudess postar os codigos certinho ou entao me mandar no email rodrigoantonioli@hotmail.com

Muito Grato
GOSTEI 0
Marco Salles

Marco Salles

01/07/2010

Bem ,depende do Sistema Operacional o #13#10 não irá funcionar Use a Constante sLineBreak Definida na Uses System; Veja a definiççao desta Constante  
const
   sLineBreak = {$IFDEF LINUX} AnsiChar(#10) {$ENDIF}
      {$IFDEF MSWINDOWS} AnsiString(#13#10) {$ENDIF}
      {$IFDEF MACOSX} AnsiChar(#10) {$ENDIF};
  Esta Constante independe do Sistema Operacional ) Pois esta protegida pelas directivas de Compilação
Eu não estou lhe passando codigo. Eu estou lhe passando um Dica Pelo que se percebe vc ja consegui enviar emails So que sua mensagem não sai com quebra de linha Vc disse tb que ja tentou quebrar a Linha com #13 e com #10 e nada Adiantou   Ai que entra a dica . O Correto para quebra a Linha é usar sLineBreak ( Pq independe do Sistema Operacional) Se vc tiver no Linux o SlineBreak correposnde ao #10 , se tiver no MSWINDOWS a quebra de Linha é 13#10
se tiver no  MACOSX será 10 .. E futuramente Outros Sistemas   Para Quebrar Linha  
Recomendável
Showmessage('Quebrar'+sLineBreak+'Linha');
Mais Usual

Showmessage('Quebrar'+#13#10+'Linha');
     
GOSTEI 0
Euclides Cunha

Euclides Cunha

01/07/2010

Essa é uma rotina que funciona num programa q fiz .. apenas de envio de e-mail.. Para funcionar, primeiramente me conecto ao servidor pop3 e posteriormente ao SMTP , envio o e-mail e por fim desconecto dos dois... simples .. claro no caso so Yahoo.. tem q ativar na sua conta de e-mail a opção de trabalhar com os servidores POP e SMTP do Yahoo.. opções de E-mail...
Mas pelo o que entendi do seu problema é que esta concatenando todas suas string, transformando-as em uma só.., ai da problema mesmo.. no corpo do e-mail.. pode concatenar e utilizar a função "quebra de linha".. mas o assunto é um paramentro a parte.. poste toda sua rotina para dar uma olhada...
    IdPOP3.Host := 'pop.mail.yahoo.com.br';   IdPOP3.Password := 'suasenha';   IdPOP3.UserId := 'usuario';   IdPOP3.Port   := 110;   IdPOP3.Connect;     // Mensagem   IdMessage1.Subject := 'assunto';   IdMessage1.Body.Text := 'Corpo do e-mail';     // Remetente   IdMessage1.From.Address := 'usuario@yahoo.com.br';   IdMessage1.From.Name := SysComputerName(); //captura o nome da máquina   //IdMsgSend.ReplyTo.EMailAddresses := 'from@ficticio.com.br'; //não precisa    // Anexo   IdMessage1.MessageParts.Clear;   TIdAttachment.create(idmessage1.MessageParts, TFileName('nomearquivo.ext'));      // Destinatario   IdMessage1.Recipients.EMailAddresses := 'usuario@yahoo.com.br';   // Autenticacao - Use apenas quando o servidor exigir   IdSMTP.AuthenticationType := atLogin;   IdSMTP.UserId := 'usuario';   IdSMTP.Password := 'senha';     // Dados do Servidor   IdSMTP.Host := 'smtp.mail.yahoo.com.br';   IdSMTP.Port := 25;     IdSMTP.Connect;     try     IdSMTP.Send(IdMessage1);     //ShowMessage('Enviado com Sucesso');   finally     IdSMTP.Disconnect;     end;     IdPOP3.Disconnect;
GOSTEI 0
Rodrigo

Rodrigo

01/07/2010

boa tarde Euclides..

pois aki esta a codificação

procedure TfrmPRINCIPAL.SpeedButton1Click(Sender: TObject);
var completo: String;
var m1:string;                       
begin
      m1:=' ABERTURA DE CHAMADO TECNICO   '+#13#10+''
      +'teste 1'+#13+''
      +'teste 2 ';      

    completo:= 'mailto:dwi@com4.com.br'+
    '?subject=Abertura de Chamado Técnico '+
    '&body= '+m1+'   ';


    ShellExecute(GetDesktopWindow,'open',pchar(completo),nil,nil,sw_ShowNormal);
end;

e o que aparece é assim:





Agradeço desde já.




GOSTEI 0
Marco Salles

Marco Salles

01/07/2010

Ha agora deu para entender o que vc quer   Mas desde jeito que vc esta fazendo existem duas limitações Não é permitido o envio de anexos com esta solução    As quebras de linha não são respeitadas.   Então acho que vc deve tentar uma das Tantas outras soluçoes disponiveis
GOSTEI 0
Rodrigo

Rodrigo

01/07/2010

muito obrigado,
consegui fazer do jeito do Euclides
valeu mesmo!

abraço!
GOSTEI 0
Marco Salles

Marco Salles

01/07/2010

Beleza , coloque concuido
GOSTEI 0
Rafael

Rafael

01/07/2010

muito obrigado,
consegui fazer do jeito do Euclides
valeu mesmo!

abraço!



Sei que já conseguiu mas para outros que chegarem a esse post informo que é possível quebrar linha colocando o caractere %0A após a sua string. Não esqueça de concatenar-> QueryConsultaNOME.Text+%0A
GOSTEI 0
POSTAR