Einzelnen Beitrag anzeigen

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