Fórum savetofile do TIdMessage nao funciona #310762
26/01/2006
0
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
Curtir tópico
+ 0Posts
26/01/2006
Massuda
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 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
26/01/2006
Massuda
Gostei + 0
27/01/2006
Saint
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
27/01/2006
Massuda
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...
1 2 3 4 | ... Msg.NoDecode := True; APOP.Retrieve(N, Msg); ... |
Gostei + 0
27/01/2006
Saint
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
Clique aqui para fazer login e interagir na Comunidade :)