AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke email-downloader as as service
Thema durchsuchen
Ansicht
Themen-Optionen

email-downloader as as service

Ein Thema von erich.wanker · begonnen am 8. Mai 2017 · letzter Beitrag vom 2. Jun 2017
Antwort Antwort
Seite 2 von 2     12   
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
961 Beiträge
 
Delphi 6 Professional
 
#11

AW: email-downloader as as service

  Alt 12. Mai 2017, 15:09
Hmm..

Mal ne ganz andere Idee:
Wieso 'zerlegst' Du die Mail?

Anstelle alles einzeln abzuspeichern, kannst Du die Mail doch direkt als Stream in deine DB speichern, dann hast Du immer alle Anhänge, eingebettete Bilder und so weiter enthalten.

Somit hast Du nur für die schnelle Suche die Kopfdaten und zur Anzeige wird die Message dann mit LoadFromStream geladen und angezeigt. Wenn die Anhänge dann doch extern benötigt werden, dann kann der User diese aus der Ansicht heraus dort speichern, wo er sie benötigt.

So bleiben alle Bestandteile deiner Mail zusammen, incl. der Eingebetteten Bilder.

Wenn Du dir sorgen um die Datenbankgröße machst, dann kannst Du den Mailstream vor dem speichern in die DB ja noch packen.

Nur mal so ne Idee..

Nach dem Pronziep arbeiten eigendlich die meisten EMail-Programme (Outlook/Thunderbird).
  Mit Zitat antworten Zitat
Benutzerbild von erich.wanker
erich.wanker

Registriert seit: 31. Jan 2008
Ort: im schönen Salzburger Land
454 Beiträge
 
Delphi XE4 Professional
 
#12

AW: email-downloader as as service

  Alt 1. Jun 2017, 14:02
Hallo HolgerX

vielen Dank für deinen Tipp - hab jetzt deinen Ansatz angefangen .. die Mails werden jetzt in ein BLOB Field gespeichert

Nun hab ich aber ein Problem:

Wenn ich den Stream lade und in einen Iframe sende sehe ich nun den Quelltext der Mail:

Zitat:
Return-Path: Received: from mout.kundenserver.de ([xxx]) by mx.kundenserver.de
(mxeue010 [xxx]) with ESMTPS (Nemesis) id 1N7Rkr-1dxx7n1M for ; Thu, 01 Jun
2017 13:57:31 +0200 Received: from black1 ([xxx]) by mrelayeu.kundenserver.de
(mreue0x [xxx]) with ESMTPA (Nemesis) id 0Mxx5p-1dBDexxxORq for ; Thu, 01 Jun
2017 13:57:31 +0200 From: "Erich Wanker *** xx" To: xxx Subject: blob Date:
Thu, 1 Jun 2017 13:57:35 +0200 MIME-Version: 1.0 Content-Type: multipart/related;
boundary="oCntjxxxY4" X-Mailer: Microsoft Office Outlook, Build 11.0.5510
Thread-Index: AdLxxxx+pb2gm3w== X-Mi
...
....


Ich mache momentan folgendes zum Speichern:

Delphi-Quellcode:
pop.Retrieve(intIndex, Msg);
....
Msg.SaveToStream(BlobStream);
      BlobStream.Position := 0;
      MAILDATENBANK.Close;
      MAILDATENBANK.SQL.Text := 'insert into MAILDATENBANK (INR, USER_INR, DATEN) values (:inr, :user_inr, :daten)';
      MAILDATENBANK.ParamByName('inr').AsString := neue_nummer;
      MAILDATENBANK.ParamByName('user_inr').AsInteger := USER_INR;
      MAILDATENBANK.ParamByName('daten').LoadFromStream(BlobStream, ftBlob);
      MAILDATENBANK.ExecSQL;
      BlobStream.Free;



Irgendwie verstehe ich das ganze nicht ... ich brauch für die Darstellung der Mail die Binärdaten der eingebetteten Bilder -- aber zur Darstellung der Mail benötige ich die Msg.Body-Daten

Keine Ahnung, wie ich nun diesen eMail-Stream darstellen könnte (und das für alle möglichen Content-Types)










Bei meiner "alten" Lösung habe ich Msg.ContentType verwendet...



Delphi-Quellcode:
if Msg.ContentType = 'text/htmlthen
                      begin
                            Msg.Body.SaveToFile(filename +'files\Mails\'+inttostr(zaehler1)+'\'+inttostr(neue_nummer_integer)+'\html_' + neue_nummer + '.html',TEncoding.UTF8);
                      end;

                      if AnsiContainsStr(Msg.ContentType, 'text/plain') then
                      begin
                            Msg.Body.SaveToFile(filename +'files\Mails\'+inttostr(zaehler1)+'\'+inttostr(neue_nummer_integer)+'\html_' + neue_nummer + '.html',TEncoding.UTF8);
                      end;

                      if Msg.ContentType = 'multipart/alternativethen
                      begin
                            Msg.Body.SaveToFile(filename +'files\Mails\'+inttostr(zaehler1)+'\'+inttostr(neue_nummer_integer)+'\html_' + neue_nummer + '.html',TEncoding.UTF8);
                      end;

                      if Msg.ContentType = 'multipart/mixedthen
                      begin
                            Msg.Body.SaveToFile(filename +'files\Mails\'+inttostr(zaehler1)+'\'+inttostr(neue_nummer_integer)+'\html_' + neue_nummer + '.html',TEncoding.UTF8);
                      end;

                      if Msg.ContentType = 'multipart/related; type="multipart/alternative"then
                      begin
                            Msg.Body.SaveToFile(filename +'files\Mails\'+inttostr(zaehler1)+'\'+inttostr(neue_nummer_integer)+'\html_' + neue_nummer + '.html',TEncoding.UTF8);
                      end;

                      if AnsiContainsStr(Msg.ContentType, 'application/pdf') then
                      begin
                            Msg.Body.SaveToFile(filename +'files\Mails\'+inttostr(zaehler1)+'\'+inttostr(neue_nummer_integer)+'\html_' + neue_nummer + '.html',TEncoding.UTF8);
                      end;



                //Mailteile
                for i := 0 to Msg.MessageParts.Count-1 do
                begin
                      erledigt:=0;
                      if Msg.MessageParts.Items[i] is tIdAttachment then
                      begin
                        anzahl_anhang:=anzahl_anhang+1;
                        s := (Msg.MessageParts.Items[i] as tIdAttachment).Filename;
                        extensio:= ExtractFileExt(s) ;
                        (Msg.MessageParts.Items[i] as tIdAttachment).savetofile(filename +'files\Mails\'+inttostr(zaehler1)+'\'+inttostr(neue_nummer_integer)+'\Anhang_' + neue_nummer +'_'+inttostr(anzahl_anhang)+extensio);


                        MAILDATENBANK.Edit;
                        MAILDATENBANK.FieldByName('ANHANG_ANZAHL').AsInteger:=anzahl_anhang;
                        MAILDATENBANK.Post;


                        Z_NUMMER.SQL.Clear;
                        Z_NUMMER.SQL.add('SELECT GEN_ID( POOL, 1 ) AS IDR FROM RDB$DATABASE');
                        Z_NUMMER.open;

                        MAILANHANG.Append;
                        MAILANHANG.FieldByName('INR').AsInteger:=Z_NUMMER.FieldByName('IDR').AsInteger;
                        MAILANHANG.FieldByName('PR').AsString:=neue_nummer;
                        MAILANHANG.FieldByName('ORIGINALNAME').AsString:= (Msg.MessageParts.Items[i] as tIdAttachment).FileName;
                        MAILANHANG.FieldByName('FILE').AsString:= 'Anhang_' + neue_nummer +'_'+inttostr(anzahl_anhang)+extensio;

                        MAILANHANG.Post;
                      end;


                      if Msg.MessageParts.Items[i] is TIdText then
                      begin
                            TIdText(Msg.MessageParts.Items[i]).Body.SaveToFile(filename +'files\Mails\'+inttostr(zaehler1)+'\'+inttostr(neue_nummer_integer)+'\html_' + neue_nummer + '.html',TEncoding.UTF8);
                      end;

                end; // for i := 0 to Msg.MessageParts.Count-1 do


            end; // Die Mail habe ich noch nicht
Erich Wanker - for life:=1971 to lebensende do begin ..
O
/H\
/ \

Geändert von erich.wanker ( 1. Jun 2017 um 14:07 Uhr)
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
961 Beiträge
 
Delphi 6 Professional
 
#13

AW: email-downloader as as service

  Alt 1. Jun 2017, 14:57
Hmm..

Ich mache es bei meinem EMail-Viewer so:
- Lade die Mail in IDMessage
- Speichere alle Anhänge 'Temporär' ins User\temp- Verzeichnis (als weiteres Unterverzeichnis verwende ich dann eine GUID).
- Nehme den Body und ersetze die IFrames mit den absoluten Pfadangaben zum Bild.
- Gebe den Body an den TWebBrowser zur Anzeige. (bei reinen Text-Bodys um die HTML-Tags ergänzt).

Dieser Browser zeigt dann die Mail inclusive der Bilder an.

Wenn die Anzeige dieser Mail beendet wird, lösche ich (anhand der Verzeichnisguid identifiziert) die Temporären Dateien wieder.

Wenn der Betrachter geschlossen wird, gibt es somit keine Dateien irgendwo liegen.

Das gleiche Prinzip nutzen eigentlich alle EMail-Viewer.
  Mit Zitat antworten Zitat
sko1

Registriert seit: 27. Jan 2017
577 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#14

AW: email-downloader as as service

  Alt 2. Jun 2017, 11:48
Was mir auffällt, falls Du mal die Mails löschen willst:

Delphi-Quellcode:
 
         for intIndex := 1 to MailCount do

solltest Du dann besser rückwärts durchlaufen, sonst bekommst Du Meldungen ala
"mail with sequence number 9 was deleted earlier"

nur als kleiner Hinweis...

Ciao
Stefan
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:51 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