Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Indy 10 Email anhang speichern (outlook indy) (https://www.delphipraxis.net/117023-indy-10-email-anhang-speichern-outlook-indy.html)

itashadow 10. Jul 2008 08:22


Indy 10 Email anhang speichern (outlook indy)
 
Hi.
schreib grad ein programm mit dem es unteranderem möglich sein soll emails mit anhang zu senden und zu empfangen.
beim empfang soll dann nur der anhang gespeichert werden (welcher immer eine txt datei ist).

Soweit so gut.
Versende ich von meinem Programm eine E-Mail mit einer text datei als anhang, so kann ich die mit meinem Programm empfangen und den anhang speichern.
Will ich sie mit Outlook 2003 empfangen klappt das auch ordnungsgemäß.
Aber verschicke ich eine Email die genauso aufgebaut ist mit outlook und packe die selbe datei in den anhang.
bekomme ich in folgender codezeile eine Exception:
Delphi-Quellcode:
TIdAttachmentMemory(hintergrundform.HintergrundForm1.IDMessage1.MessageParts.Items[0]).SaveToFile(pfad + hintergrundform.HintergrundForm1.IDMessage1.Subject);
Zum Test habe ich dann mit meinem programm und mit oulook eine email verschickt und sie in meinem programm beim herunterladen als .msg gespeichert.
Abgesehen davon das sie sehr unterschiedlich aussehen habe ich noch festgestellt das mein programm den email anhang verschlüsselt.
bei ihr steht: Content-Transfer-Encoding: base64
bei outlook: Content-Transfer-Encoding: quoted-printable


hat jemand eine lösung wie ich mit meinem programm alle emails abrufen kann und jeden dateianhang abspeichere???

itashadow 11. Jul 2008 07:39

Re: Indy 10 Email anhang speichern (outlook indy)
 
hat den keiner
ne lösung oder zumindest einen tip?

itashadow 11. Jul 2008 08:37

Re: Indy 10 Email anhang speichern (outlook indy)
 
hat sich erledigt...

outlook hängt anscheinend noch daten als messagepart ran...

so klappts:

Delphi-Quellcode:
 
try
  for y := 0 to HintergrundForm1.IDMessage1.MessageParts.Count -1do
  if (HintergrundForm1.IDMessage1.MessageParts[y] is TIdAttachment) then begin
    TIdAttachmentMemory(HintergrundForm1.IDMessage1.MessageParts.Items[y]).SaveToFile(pfad + HintergrundForm1.IDMessage1.Subject);
  end ;
  except
end;

itashadow 11. Jul 2008 10:47

Re: Indy 10 Email anhang speichern (outlook indy)
 
klappt doch nich so ganz...

hätte mal in die textdatei reinschauen sollen.

der speichert mir da irgendwelchen wilden hex code :(


edit:
ok den wilden hex speichert er nur wenn es sich um eine html mail handelt und zb ein image drin ist (signatur);
wenn in der html mail reiner text ist speichert er die txt korrekt ebenso wenn es sich um eine textmail handelt.

wie kann ich das abfangen?

marabu 11. Jul 2008 11:35

Re: Indy 10 Email anhang speichern (outlook indy)
 
Hallo,

leider habe ich INDY9 installiert, also nur damit du nicht zum Alleinunterhalter entartest: Jeder MessagePart hat eine Eigenschaft IsEncoded, die Aufschluss darüber geben sollte, ob der entsprechende Part MIME-kodiert wurde oder nicht.

Freundliche Grüße

itashadow 11. Jul 2008 11:48

Re: Indy 10 Email anhang speichern (outlook indy)
 
juhu ne antwort:)

danke

hab ich vorhin auch schon probiert
hab mir bei jedem msg part ausgeben lassen ob es encodet is
Delphi-Quellcode:
showmessage(booltostr(hintergrundform1.idmessage1.IsBodyEncodingRequired));
jedesmal hat der mir nen false rausgehauen O_o

marabu 11. Jul 2008 19:53

Re: Indy 10 Email anhang speichern (outlook indy)
 
Und noch eine Antwort: Dein Text und dein Code passen irgendwie nicht zusammen.

Ich hatte eher sowas gemeint:

Delphi-Quellcode:
var
  msg: TIdMessage;
  part: TIdMessagePart;
  i: Integer;
begin
  // ...
  for i := 0 to Pred(msg.MessageParts.Count) do
  begin
    part := msg.MessageParts.Items[i];
    ShowMessage(BoolToStr(part.IsEncoded, True));
    // ...
  end;
  // ...
end;
Ansonsten: Für Indy9 gibt es eine Demo "MailClient" - vielleicht gibt es die auch für Indy10. Wenn nicht, dann ist der Unterschied bestimmt auch nicht so groß, dass man nicht etwas davon lernen könnte.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz