Problemas com Body ao receber o email.

Delphi

11/07/2006

Boa noite pessoal;

Estou com um problema que não consigo receber o body do email.
Estou usando o seguinte método.

for j := 0 to Pred(Msg.MessageParts.Count) do
begin
if Msg.MessageParts.Items[j] is TIdText then
begin
Memo1.Clear;
Memo1.Lines.AddStrings(TIdText(Msg.MessageParts.Items[j]).Body);
end;
end;

e tb uso o componente TidPOP3 da paleta Indy.

Alguém sabe me dizer o que pode estar acontecendo.

Obrigado.


Dumbas

Dumbas

Curtidas 0

Respostas

Massuda

Massuda

11/07/2006

As mensagens de email podem ser codificadas de diversos modos. Existem mensagens que contem unicamente texto outras possuem vários anexos e estão divididas em diversas partes.

Dependendo de como a mensagem foi codificada, o conteúdo pode vir no TIdMessage.Body ou nas partes da mensagem (que é o código que você postou).


GOSTEI 0
Dumbas

Dumbas

11/07/2006

Bom dia;

E como eu faço para poder pegar todas as possibilidades do body. Estou precisando muito que venha o conteudo do body no email e ele ta vindo sempre vazio.

Obrigado.


GOSTEI 0
Massuda

Massuda

11/07/2006

// Msg é um TIdMessage

Memo1.Clear; 
if Msg.ContentType = ´text/plain´ then begin

  // conteúdo da mensagem está em Msg.Body

  Memo1.Lines.AddStrings(Msg.Body); 
end
else begin
  // ContentType deve ser ´multipart/alguma.coisa´

  for j := 0 to Pred(Msg.MessageParts.Count) do begin 
    if Msg.MessageParts.Items[j] is TIdText then begin 
      Memo1.Lines.AddStrings(TIdText(Msg.MessageParts.Items[j]).Body); 
    end; 
  end;
end;



GOSTEI 0
Dumbas

Dumbas

11/07/2006

Mussuda;

Eu fiz o que vc me passou mas ele sempre entra no else, mas não entra no for.

Eu ja tentei colocar direto o body no Memo mas tb esta vindo nulo.

Vc sabe mais alguma possibilidade?

Obrigado.


GOSTEI 0
Massuda

Massuda

11/07/2006

Vou assumir que você está usando a versão mais recente do Indy 9.

Você está lendo o email usando TIdPOP3.Retrieve? Algumas pessoas usam TIdPOP3.RetrieveHeader para ler os cabeçalhos e se esquecem de usar TIdPOP3.Retrieve para pegar o resto da mensagem.

Tem certeza que o email lido tem realmente um conteúdo/body? Se sim, que tipo de conteúdo tem no email?


GOSTEI 0
Dumbas

Dumbas

11/07/2006

Mussuba.

Estou usando o RetriveHeader, mas quando uso somente o Retrive, apos algum tempo baixando ele me retorna um erro de ´Uneven size in DecodeToStream´. Sabe o que pode ser isso?


Obrigado.


GOSTEI 0
Dumbas

Dumbas

11/07/2006

Mussuba

Coloquei a parde de NoDecode e NoEncode do TidMessage com true e funcionou, mas tenho um erro que ele me retorna quando esta quase terminando ´Max Line Lengh exeeded´. Não estou conseguindo intender como ele esta exedendo o tamanho a quantidade de mensagem exitente.


Obriagdo.


GOSTEI 0
Massuda

Massuda

11/07/2006

Estou usando o RetriveHeader...
RetrieveHeader baixa apenas os cabeçalhos da mensagem (rementente, data, assunto, etc) mas não baixa a mensagem, por isso você não está visualizando o corpo da mensagem.

...erro de ´Uneven size in DecodeToStream´.
Pode ser um problema com a mensagem que você está tentando ler ou um bug do Indy. Se você consegue ler essa mensagem em outro programa de email e está usando o Indy que veio com seu Delphi, seria aconselhável atualizar seu Indy; veja [url=http://forum.clubedelphi.net/viewtopic.php?t=57069]este tópico[/url] sobre como atualizar o Indy (no site do Indy tem a versão 10, mas não recomendo utilizar essa versão).


GOSTEI 0
Dumbas

Dumbas

11/07/2006

Massuda;

E sobre essa questão do ´Max exeeded...´? Sober a questão do Decode eu ja consegui.


Obrigado.


GOSTEI 0
Massuda

Massuda

11/07/2006

E sobre essa questão do ´Max exeeded...´?
Não faço idéia. Mas pelo funcionamento do protocolo, talvez seja consequencia de você não estar decodificando o conteúdo da mensagem.

Se tiver tempo, seria recomendável você atualizar seu Indy, como já citei num post anterior.


GOSTEI 0
POSTAR