GARANTIR DESCONTO

Fórum Não consigo jogar o conteúdo de um Memo dentro do E-mail Outlook Express com quebra de linha. #393157

29/12/2010

0

Prezados, boa noite. Venho humildemente mais uma vez pedir uma ajuda aos colegas que puderem contribuir com o seu tempo.   Estou com um problema para enviar um E-mail pelo Outlook express usando o delphi 7. Antes de qualquer coisa, preciso avisar que não quero usar Indy, já sei enviar e-mail com indy9 e inclusive quem estiver precisando pode me pedir os fontes que está funcionando perfeitamente.   Mas voltando, uma parte do programa se encarrega de varrer a tabela coletando os e-mails e depois abre a janela de e-mail do Outlook já com o campo "Para" preenchido com os destinatários, o campo "Assunto" e o Body com o corpo da mensagem que também vem da base de dados. O problema está no corpo de e-mail pois ele não adquire as quebras de linhas que havia no memo. Abaixo mostro como queria que ficasse:     Agora vou mostrar como está ficando (da forma errada):         Agora vou mostrar os fontes:   Primeiro chamao a procedure abaixo:   [CODE] procedure TFEmails.btnVisualizarEmailClick(Sender: TObject);
begin
  if CBDBTodosGrupos.Text = '' then begin //CBDBTodosGrupos é um DBlookupComboBox alimentado com grupos de emails
    ShowMessage('Você deve escolher um grupo de e-mails antes de enviar!');
    CBDBTodosGrupos.SetFocus; end
  else
    try
      ColetaEmails; //ColetaEmails é uma procedure que coleta todos os emails de uma tabela e os armazena na variável "Emails".
      if RGTipoEmail.ItemIndex = 0 then begin // RGTipoEmail é um radiogroup, se = 0 ele chama a procedure EnviaEmailChamadosDistintos;
        EnviaEmailChamadosDistintos;//essa procedure está destrinchada mais abaixo.
        PrepararEmail(Emails, 'Falhas', MemoDetalhesEmail.Text); end; //essa procedure está explicada por último. ela prepara o Outlook para envio.
    except     end;
end; [CODE]   Depois vem a procedure que irá montar os dados do email:   [CODE] procedure TFEmails.EnviaEmailChamadosDistintos;
var
X, Registros : Integer;
begin
  X := 0;
  Registros := 0;
  DM.QSelecFrutas.Close;
  DM.QSelecFrutas.Parameters.ParamByName('SELECAO').Value := '1';
  DM.QSelecFrutas.Open;
  DM.QSelecFrutas.First;
  Registros := DM.QSelecFrutas.RecordCount;
  //ShowMessage(IntToStr(Registros));
  if not DM.QSelecFrutas.IsEmpty then
    begin
      while X < Registros do
        if X < Registros then begin           MemoDetalhesEmail.Lines.Add('Maçã: '+DM.QSelecFrutasFruta1.Text+';');
          MemoDetalhesEmail.Lines.Add('Laranja: '+DM.QSelecFrutasFruta2.Text+';');
          MemoDetalhesEmail.Lines.Add('Início: '+DM.QSelecFrutasHORAINICIO.Text+'h'+';');
          MemoDetalhesEmail.Lines.Add('Término: '+DM.QSelecFrutasTermino.Text+';');
          MemoDetalhesEmail.Lines.Add('--------------------------------------------------------'+
          '----------------------------------------------------------------------------------');
          X := X + 1;
          DM.QSelecFrutas.Next; end;
    end;
    if X = Registros then begin
      //ShowMessage('X = '+IntToStr(X));
      end;
  end; [CODE]   E por último, a procedure que irá abrir o e-mail do Outlook já com os dados preenchidos:   [CODE] procedure TFEmails.PrepararEmail(Para, Assunto, Msg: string);
var
S: string;
begin
   S := 'mailto:' + Para + '?subject=' + Assunto +'&body=' + Msg;//dentro desse Msg é que tem o  MemoDetalhesEmail.Text com o conteúdeo do Memo e deve ficar no Body do e-mail.
   ShellExecute(0, 'open', PChar(S), nil, nil, SW_SHOW);
end; [CODE]   Bom pessoal, este é o meu problema. Se alguém já enfrentou algo parecido e puder ajudar agradeço imensamente.   Obs: Já tentei usar #13#10 e não funcionou, me parece que esse comando de quebra de linha só funcionava em outras versões do Outlook mas no Express não funciona.   A última coisa que eu vi foi algum código usando ReplaceAll substituindo o #13#10 no final de cada linha do memo por um caracter especial que o Outlook entendia como quebra de linha mas não entendi muito bem e a informação parecia estar incompleta.   Muito grato a todos! Será que me enrrolei muito? Abs.  
Rafael

Rafael

Responder

Posts

30/12/2010

Wesley Yamazack

Olá Rafael,


Eu nunca usei com o Outlook. Porém uma dica que tenho para lhe passar.
Tente usar texto no formato HTML, o componente não aceita isso ? Igual ao Indy onde podemos colocar várias partes do e-mail como text, html, image, e por ai vai ? É apenas uma dica.

Um abraço

Wesley Y
Responder

Gostei + 0

30/12/2010

Rafael

Wesley, obrigado pela dica mas tentei usar tags html e mesmo assim ele não aceita.
Se você ou alguém mais souber como faço então para colocar um texto formatado em html no corpo de email do outlook via programação pode ser uma solução pra mim. Entendo de HTML mas o que eu não sei é fazer o outlook express aceitar essa formatação. Obrigado.
Responder

Gostei + 0

31/12/2010

Marcos Iwazaki

da uma olhada neste post... não sei se vc tentou pesquisar antes... mas sempre é bom.
https://www.devmedia.com.br/forum/viewtopic.asp?id=380491
 

a maneira como funcionou é o que o euclides_jc postou... da uma olhada la....
flw.
Responder

Gostei + 0

31/12/2010

Rafael

Já tinha pesquisado no forum e inclusive já tinha lido esse post, só que a solução do euclides eu já sei fazer, assim como eu já tinha dito no início do post. Com o componente INDY eu não tenho problemas já tenho um programa que envia e-mails sem problema usando essa tecnologia.

O Meu problema é diferente porque não posso usar Indy, sendo assim não poderei fazer da forma que o Euclides mencionou. Estou preso ao Outlook e ainda por cima é o Express pois o de versão anterior já vi que é possível fazer o que quero. Acho que dessa vez realmente vai ser difícil conseguir isso. Minha última esperança é conseguir pelo menos passar o texto já formatado em HTML para o Body do outlook via programação, coisa que tbm não sei como fazer.

De qualquer forma agradeço muito por sua ajuda meu amigo Marcos. Obrigado por postar!
Responder

Gostei + 0

31/12/2010

Rafael

Já tinha pesquisado no forum e inclusive já tinha lido esse post, só que a solução do euclides eu já sei fazer, assim como eu já tinha dito no início do post. Com o componente INDY eu não tenho problemas já tenho um programa que envia e-mails sem problema usando essa tecnologia.

O Meu problema é diferente porque não posso usar Indy, sendo assim não poderei fazer da forma que o Euclides mencionou. Estou preso ao Outlook e ainda por cima é o Express pois o de versão anterior já vi que é possível fazer o que quero. Acho que dessa vez realmente vai ser difícil conseguir isso. Minha última esperança é conseguir pelo menos passar o texto já formatado em HTML para o Body do outlook via programação, coisa que tbm não sei como fazer.

De qualquer forma agradeço muito por sua ajuda meu amigo Marcos. Obrigado por postar!



Marcos não! Desculpa, Muito obrigado Socram!!! Não sei da onde tirei esse nome, marcos.
Responder

Gostei + 0

01/01/2011

Rafael

Alguém mais tem alguma dica?
Responder

Gostei + 0

17/12/2011

Rafael

Pessoal, já consegui resolver o meu problema. O código que devemos usar para o outlook entender quebra de linha é colocando "%0A" na parte que se deseja quebrar linha. Foi um sufoco muito grande conseguir achar isso na net, uma pena eu não me lembrar do link ou da pessoa que postou mas fica aí para quem tiver o mesmo problema.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar