Problemas com Body ao receber o email.
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.
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
Curtidas 0
Respostas
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).
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
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.
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
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
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.
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
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?
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
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.
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
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.
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
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
11/07/2006
Massuda;
E sobre essa questão do ´Max exeeded...´? Sober a questão do Decode eu ja consegui.
Obrigado.
E sobre essa questão do ´Max exeeded...´? Sober a questão do Decode eu ja consegui.
Obrigado.
GOSTEI 0
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