Fórum savetofile do TIdMessage nao funciona #310762

26/01/2006

0

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.. :?


Saint

Saint

Responder

Posts

26/01/2006

Massuda

usei este código para salvar uma mensagem...
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;
...e deopis li de volta com este código...
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;
...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].


Responder

Gostei + 0

26/01/2006

Massuda

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.


Responder

Gostei + 0

27/01/2006

Saint

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


Responder

Gostei + 0

27/01/2006

Massuda

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...
1
2
3
4
...
Msg.NoDecode := True;
APOP.Retrieve(N, Msg);
...
...mas não sei se isso resolve.


Responder

Gostei + 0

27/01/2006

Saint

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


Responder

Gostei + 0

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

Aceitar