Fórum Problemas com Body ao receber o email. #325165

11/07/2006

0

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

Responder

Posts

11/07/2006

Massuda

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).


Responder

Gostei + 0

12/07/2006

Dumbas

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.


Responder

Gostei + 0

12/07/2006

Massuda

// 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;



Responder

Gostei + 0

12/07/2006

Dumbas

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.


Responder

Gostei + 0

12/07/2006

Massuda

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?


Responder

Gostei + 0

12/07/2006

Dumbas

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.


Responder

Gostei + 0

12/07/2006

Dumbas

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.


Responder

Gostei + 0

12/07/2006

Massuda

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).


Responder

Gostei + 0

12/07/2006

Dumbas

Massuda;

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


Obrigado.


Responder

Gostei + 0

12/07/2006

Massuda

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.


Responder

Gostei + 0

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

Aceitar