Não consigo jogar o conteúdo de um Memo dentro do E-mail Outlook Express com quebra de linha.
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.
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
Curtidas 0
Respostas
Wesley Yamazack
29/12/2010
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
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
GOSTEI 0
Rafael
29/12/2010
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.
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.
GOSTEI 0
Marcos Iwazaki
29/12/2010
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.
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.
GOSTEI 0
Rafael
29/12/2010
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!
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!
GOSTEI 0
Rafael
29/12/2010
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!
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.
GOSTEI 0
Rafael
29/12/2010
Alguém mais tem alguma dica?
GOSTEI 0
Rafael
29/12/2010
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.
GOSTEI 0