savetofile do TIdMessage nao funciona
Boas..
alguem ja tentou baixar um email de um servidor, dar um savetofile com o tidmessage e depois tentar carregar esse email?
se for um email texto ou html apenas, tudo bem..
mas se o email tiver anexos, nenhum deles eh listado ao dar um loadfromfile, quer dizer..os anexos estao ali, mas ficam como texto..
parece que ao dar um retrieve do server pro tidmessage ele funciona bem, mas depois de salvar esse email como arquivo ele perde toda a referencia de suas partes, o TIdAttachment por exemplo vira TIdText..
alguem ja teve esse problema? nao sei como resolver isso.. :?
alguem ja tentou baixar um email de um servidor, dar um savetofile com o tidmessage e depois tentar carregar esse email?
se for um email texto ou html apenas, tudo bem..
mas se o email tiver anexos, nenhum deles eh listado ao dar um loadfromfile, quer dizer..os anexos estao ali, mas ficam como texto..
parece que ao dar um retrieve do server pro tidmessage ele funciona bem, mas depois de salvar esse email como arquivo ele perde toda a referencia de suas partes, o TIdAttachment por exemplo vira TIdText..
alguem ja teve esse problema? nao sei como resolver isso.. :?

Saint
Curtidas 0
Respostas

Massuda
26/01/2006
usei este código para salvar uma mensagem......e deopis li de volta com este código......mas não encontrei problema algum; talvez meu teste tenha sido muito simples, por isso não deu problema.
Outra coisa, procure sempre usar a versão mais recente do Indy; eu estou usando Indy 9.0.18, que é a versão mais recente do Indy que vem com o D7. Para obter os fontes do Indy, visite o [url=http://www.IndyProject.org/]site oficial[/url]. Para instalar uma versão mais recente do Indy no lugar da que veio com o Delphi, leia [url=http://forum.clubedelphi.net/viewtopic.php?t=57069]este tópico[/url].
var Email: TIdMessage; begin Email := TIdMessage.Create(nil); try Email.From.Address := ´fulano@example.com´; Email.Recipients.EMailAddresses := ´beltrano@example.com´; Email.Subject := ´Teste´; Email.Date := Now; Email.Body.Text := ´Mensagem de teste´; TIdAttachment.Create(Email.MessageParts, ´algum.arquivo´); Email.SaveToFile(´teste.eml´); finally Email.Free; end; end;
var Email: TIdMessage; Text: TIdText; Attachment: TIdAttachment; I: Integer; begin Email := TIdMessage.Create(nil); try Email.LoadFromFile(´teste.eml´); for I := 0 to Pred(Email.MessageParts.Count) do begin if Email.MessageParts[I] is TIdText then begin Text := TIdText(Email.MessageParts[I]); // Text.Body.Text contem ´Mensagem de teste´ end else if Email.MessageParts[I] is TIdAttachment then begin Attachment := TIdAttachment(Email.MessageParts[I]); Attachment.SaveToFile(´outro.nome.de.arquivo´); // o arquivo gravado é igual ao original end; end; finally Email.Free; end; end;
Outra coisa, procure sempre usar a versão mais recente do Indy; eu estou usando Indy 9.0.18, que é a versão mais recente do Indy que vem com o D7. Para obter os fontes do Indy, visite o [url=http://www.IndyProject.org/]site oficial[/url]. Para instalar uma versão mais recente do Indy no lugar da que veio com o Delphi, leia [url=http://forum.clubedelphi.net/viewtopic.php?t=57069]este tópico[/url].
GOSTEI 0

Massuda
26/01/2006
Uma outra coisa... testando agora percebi que TIdMessage.SaveToFile tem um bug (ao menos na versão 9) que gera uma exceção depois de terminada a gravação do arquivo; esse bug não causa problema e você pode contornar o erro colocando um try..finally/try..except para engulir a exceção gerada na chamada a TIdMessage.SaveToFile.
GOSTEI 0

Saint
26/01/2006
boas massuda, blza??
entao cara, eu ja tinha testado algo desse tipo e realmente funciona..
eu copiei e colei esse exemplo que vc fez e funciona blza, mas o que parece eh que se o tidmessage for carregado do pop, ja nao funciona mais..
nao sei se eh o tipo da mensagem, se tem alguma outra propriedade do tidmessage que eh alterado e na hora de dar o savetofile ele perde a referencia..realmente nao sei, to perdido
entao cara, eu ja tinha testado algo desse tipo e realmente funciona..
eu copiei e colei esse exemplo que vc fez e funciona blza, mas o que parece eh que se o tidmessage for carregado do pop, ja nao funciona mais..
nao sei se eh o tipo da mensagem, se tem alguma outra propriedade do tidmessage que eh alterado e na hora de dar o savetofile ele perde a referencia..realmente nao sei, to perdido
GOSTEI 0

Massuda
26/01/2006
Experimente salvar como .EML e abrir o arquivo no Outlook (pode ser o Express).
Se você vai ler do servidor e gravar em arquivo e na hora de mostrar ler desse arquivo, experimente mudar TIdMessage.NoDecode para True antes de recuperar a mensagem do servidor......mas não sei se isso resolve.
Se você vai ler do servidor e gravar em arquivo e na hora de mostrar ler desse arquivo, experimente mudar TIdMessage.NoDecode para True antes de recuperar a mensagem do servidor...
... Msg.NoDecode := True; APOP.Retrieve(N, Msg); ...
GOSTEI 0

Saint
26/01/2006
Massuda, vou dar um beijo na sua boca heheh..
cara, eu tava tao bitolado nas partes da msg em si que acabei nao dando a real importancia as propriedades do tidmessage...
O que vc falou do outlook eu ja tinha feito e refeito, mas setar o nodecode pra true resolveu o problema..
valeu mesmo..
cara, eu tava tao bitolado nas partes da msg em si que acabei nao dando a real importancia as propriedades do tidmessage...
O que vc falou do outlook eu ja tinha feito e refeito, mas setar o nodecode pra true resolveu o problema..
valeu mesmo..
GOSTEI 0