Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Anhänge von POP3-Nachrichten (https://www.delphipraxis.net/53533-anhaenge-von-pop3-nachrichten.html)

CalganX 18. Sep 2005 16:58


Anhänge von POP3-Nachrichten
 
Hi,
ich hab mal wieder so meine Probleme mit den Indy-9-Komponenten. :?

Ich hole über TIdPOP3 meine Nachrichten von einem Server ab. Soweit so gut und so ists auch richtig. Das klappt sogar. :cyclops:
Mein Problem ist, dass der ganze MIME-Kram nicht "entschlüsselt" wird. :( D.h. die Mails sehen z.B. so aus:
Code:
Return-Path: <admin@csd-software.net>
X-Original-To: [email]xplugged@csd-software.net[/email]
Delivered-To: [email]m00b6c63@dd2628.kasserver.com[/email]
Received: from [80.184.85.150] (D5596.d.pppool.de [80.184.85.150])
   by dd2628.kasserver.com (Postfix) with ESMTP id 4991B14E4E2
   for <xplugged@csd-software.net>; Fri, 16 Sep 2005 16:30:24 +0200 (CEST)
Message-ID: <432AD702.9010509@csd-software.net>
Date: Fri, 16 Sep 2005 16:30:26 +0200
From: "Blubbel-Master" <admin@csd-software.net>
Organization: Blubbel-Community
User-Agent: Mozilla Thunderbird 1.0.6 (Windows/20050716)
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: [email]xplugged@csd-software.net[/email]
Subject: [xplugged] blubbel
Content-Type: multipart/mixed; boundary="=_MoreStuf_2zzz1234sadvnqw3nerasdf"
X-UIDL: S%J!!dJZ!!O*W"!fK8!!
Status: RO

This is a multi-part message in MIME format

--=_MoreStuf_2zzz1234sadvnqw3nerasdf
Content-Type: text/plain
Content-Transfer-Encoding: 7bit

This is a multi-part message in MIME format.


--=_MoreStuf_2zzz1234sadvnqw3nerasdf
Content-Type: text/plain; name="bestellungen.txt";
        name="bestellungen.txt"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline; filename="bestellungen.txt";
        filename="bestellungen.txt"

SGllciBzdGVoZW4gZGllIEJlc3RlbGx1bmdlbi4NCg0KMXggUG9wY29ybg0KMXggMSw1bCBDb2xh
DQoxeCBOYWNob3MgbWl0IFNhbHNhDQoxeCBCTVcgNWVyDQoxeCBCTVcgQ2FicmlvDQozeCBBcHBs
ZSBDaW5lbWFkaXNwbGF5ICgzMCIpDQoxeCBBcHBsZSBNYWMgRHVhbC1HNSBpbmtsLiBNYWNPUyBY
IFRpZ2VyDQoyeCBERUxMLVRGVHMgKDE5IiksIERWSSArIFZHQSwgOG1zIFJlYWt0aW9uc3plaXQN
Cg==

--=_MoreStuf_2zzz1234sadvnqw3nerasdf--
.
Und wenn ich nun auf den Anhang zugreifen will, sieht der Anhang nach dem Abspeichern so aus:
Code:
SGllciBzdGVoZW4gZGllIEJlc3RlbGx1bmdlbi4NCg0KMXggUG9wY29ybg0KMXggMSw1bCBDb2xh
DQoxeCBOYWNob3MgbWl0IFNhbHNhDQoxeCBCTVcgNWVyDQoxeCBCTVcgQ2FicmlvDQozeCBBcHBs
ZSBDaW5lbWFkaXNwbGF5ICgzMCIpDQoxeCBBcHBsZSBNYWMgRHVhbC1HNSBpbmtsLiBNYWNPUyBY
IFRpZ2VyDQoyeCBERUxMLVRGVHMgKDE5IiksIERWSSArIFZHQSwgOG1zIFJlYWt0aW9uc3plaXQN
Cg==
Das ist Base64, das ist mir klar, aber ich hätte gerne normalen, unkodierten Text. :wall:

Wie kann man den Indy-Komponenten das begreiflichen machen?

Chris

Ratte 18. Sep 2005 17:00

Re: Anhänge von POP3-Nachrichten
 
Bei den Indy's gibt es doch eine Komponente die das konvertieren kann. TIdBase64 oder so.
Hoffe du findest sie, ich hab' leider grad' keine Indy's da.

Ratte

Union 18. Sep 2005 17:03

Re: Anhänge von POP3-Nachrichten
 
Du musst folgendes Flag setzen:

Delphi-Quellcode:
aMsg.NoDecode := false;

CalganX 18. Sep 2005 17:17

Re: Anhänge von POP3-Nachrichten
 
Hi,
@Ratte: Eine Möglichkeit. Geht aber definitiv anders.

@Union: hm... leider bringt das nichts. :(

Chris

Union 18. Sep 2005 17:21

Re: Anhänge von POP3-Nachrichten
 
Zitat:

Zitat von Chakotay1308
Hi,
@Union: hm... leider bringt das nichts. :(
Chris

Ok, dann poste ich mal den kompletten Source dafür (ist seit 2 Jahren pausenlos im Einsatz und funktioniert definitiv):
Delphi-Quellcode:
//------------------------------------------------------------------------
procedure TfrmGetMail.btnRefreshClick(Sender: TObject);
//------------------------------------------------------------------------
// Abruf der Mails
//------------------------------------------------------------------------
var i : longint;
    iMp : integer;
    iMax : longint;
    aMsg : tIdMessage;
    s : string;
    lWasActive : boolean;

begin
  if not lRunning then begin
    HideIcon(0);
    ShowIcon(IconActive,0, 'Checking for mail');
    Logg('Checking for mail');
    lRunning := true;
    // Timer disablen
    Mailtimer.Enabled := false;

    // Werte setzen
    tPopMail.Host    := sServerName;
    tPopMail.Username := sUserName;
    tPopMail.Password := sPassWord;

    // lbxMail.Clear;

    // Verbinden
    try
      btnRefresh.Enabled := false;
      Logg('Connecting');
      lblStatus.Caption := 'Connecting';

      lWasActive := true;
      // Automatisch mit dem Internet verbinden
      if not InternetGetConnectedState(NIL, 0) then begin
         lWasActive := false;
         InternetAutodial(internet_autodial_force_unattended,0 );
      end;

      // Timeout ist in Millisekunden
      tPopMail.Connect(iTimeOut * 1000);

      // Anzahl der Mails
      iMax := tPopMail.CheckMessages;

      // Alle Mails durchlaufen
      for i := 1 to iMax do begin
        lblStatus.Caption := 'Getting mail '+inttostr(i)+'/'+inttostr(iMax);
        Logg('Getting mail '+inttostr(i)+'/'+inttostr(iMax));
        Application.ProcessMessages;
        aMsg := tIdMessage.Create(NIL);

        // Zur Analyse der einzelnen Bestandteile
        aMsg.NoDecode := false;
        tPopMail.Retrieve(i, aMsg);
        aMsg.ProcessHeaders;
        Application.ProcessMessages;
        // Protokoll eintragen
        Logg('From: '+aMsg.From.Address);

        if (sFromAdress = '') or
           (sFromAdress = aMsg.From.Address) then begin

           // eMail analysieren
           for iMp := 0 to aMsg.MessageParts.Count-1 do begin
              if aMsg.MessageParts.Items[iMp] is tIdAttachment then begin
                 // Dateinamen holen
                 s := (aMsg.MessageParts.Items[iMp] as tIdAttachment).Filename;

                 // Extension ändern
                 if sFileExt <> '' then
                    s := ChangeFileExt(s, '.'+sFileExt);

                 // Datei speichern
                 (aMsg.MessageParts.Items[iMp] as tIdAttachment).savetofile(sDataPath+s);
                 // Protokoll eintragen
                 Logg('Attachment saved as '+sDataPath+s);
              end;
           end;

           // Gesamte Nachricht speichern
           DateTimeToString(s,'yyyymmdd_hhnnsszzz',now);
           aMsg.SaveToFile(sMailPath+s+'.eml');
           // Protokoll eintragen
           Logg('Mail saved as '+sMailPath+s+'.eml');

           // Nachricht auf dem Server löschen
           tPopMail.Delete(i)

        end
        else begin
           Logg('Not accepted, wrong from Adress');
        end;
        // Message-Objekt löschen
        aMsg.Free;

      end;
    except
      on E: Exception do begin
         Logg(e.Message);
         if lPopupMsg then begin
            ErrorFlashStart;
            // MessageDlg(e.Message, mtError,[mbOk], 0);
         end;
      end;
    end;

    // Verbindung beenden
    Logg('Disconnecting');
    tPopMail.Disconnect;

    if not lWasActive then
       InternetAutoDialHangup(0);

    btnRefresh.Enabled := true;
    MailTimer.Enabled := true;
    lRunning := false;
    lblStatus.Caption := 'Waiting';
    iSeconds := iInterval;
    HideIcon(0);
    ShowIcon(IconInactive,0, 'Waiting');
  end;
end;

CalganX 18. Sep 2005 17:42

Re: Anhänge von POP3-Nachrichten
 
Hi,
danke. Gucke ich mir morgen oder später an. :)
Jetzt erstmal Wahlkrimi gucken. :shock:

Chris

CalganX 20. Sep 2005 22:32

Re: Anhänge von POP3-Nachrichten
 
Hi,
so... nachdem ich den Schock vom Wochenende überwunden habe, melde ich mal wieder zurück. :zwinker:

Ich habe relativ viel von deinem SourceCode übernommen, doch leider ändert sich nichts. Ich habe ProcessHeaders eingebaut, NoEncode und NoDecode verwendet und beide hin und her geschoben, doch es ändert leider nichts am Format der eMails. :cry:

Das muss doch irgendwie zu fixen sein. :wall:
Hat jemand noch eine Idee?

Ich kann morgen mal etwas Source posten, aber das Problem ist, dass das bei mir in drei Teile (1. Abholen und Speichern; 2. Zum Lesen Öffnen; 3. Anhang speichern) aufgeteilt ist - deswegen ist das ein wenig schwierig. Aber wenn theoretisch es funktionieren müsste und es keine andere Möglichkeit gibt, bastel ich das morgen mal kurz zusammen.

Danke für eure Hilfe,
Chris

Union 21. Sep 2005 07:29

Re: Anhänge von POP3-Nachrichten
 
Zitat:

Zitat von Chakotay1308
Hi,
Das muss doch irgendwie zu fixen sein. :wall:
Hat jemand noch eine Idee?

Zitat:

Zitat von Chakotay1308
Content-Transfer-Encoding: 7bit Chris

Chris

Ich glaube die Mail ist einfach falsch generiert. Hast Du es mal mit anderen Mails probiert? IMHO sollte dort stehen Chris

Zitat:

Zitat von Outlook
Content-Transfer-Encoding: base64


CalganX 21. Sep 2005 10:35

Re: Anhänge von POP3-Nachrichten
 
Hi,
das Problem ist, dass ich nicht weiß wer die Mail versendet und wie sie versendet wird. Mein Modul muss also genauso flexibel sein, wie eine normale eMail-Software. :?

Chris

raffo 27. Okt 2005 09:19

Re: Anhänge von POP3-Nachrichten
 
Der Quellcode oben ist schon mal gut, hier fehlt noch "idText" um den Nachrichtentext zu bekommen:

Delphi-Quellcode:
// eMail analysieren
   for iMp := 0 to aMsg.MessageParts.Count-1 do
       begin
       if aMsg.MessageParts.Items[iMp] is tIdAttachment then
          begin
          // Dateinamen holen
          s := (aMsg.MessageParts.Items[iMp] as tIdAttachment).Filename;
          ...
          ...

    if aMsg.MessageParts.Items[iMp] is tIdText then
       begin
       s := (aMsg.MessageParts.Items[iMp] as tIDText).Body.Text;
       body.text:=s;
       end;

...
...


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:32 Uhr.

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