Mit PHP eMail Anhänge in Datei speichern

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Mit PHP eMail Anhänge in Datei speichern

    Hallo,

    Habe ein echtes Problem.
    Ich habe mir mühsam ein Script gebastelt mit dem man e-mails auslesen kann, und habe dann auch tausende Beiträge gefunden wie man EMails mit Anhang schicken kann, aber nicht wie man den Anhang dann schließlich wieder von der e-mail löst um ihn in eine Datei abzuspeichern.
    Ich habe echt garkeine Idee wie ich das anstellen soll.
    Den Inhalt des Mail Body kann ich schon in einer Datei speichern.

    Es wäre ganz klasse, wenn mir dabei jemand helfen könnte.

    Mein bisheriges Script zum Email auslesen sieht so aus:

    PHP-Code:
    <?php
    function MailConnect()
    {
        
    // Connect Daten
        
    $host="123.456.789.12";
        
    $port="110";
        
    $user="Sonja";
        
    $passwort="Hallo";
        
        
    // Verbinden zur Mailbox
         
    $mailbox 
    imap_open("{".$host."/pop3:".$port."}INBOX","$user","$passwort")
             or die(
    "Verbindung konnte nicht hergestellt werden.<br />\n");
            
            
    // Posteingang überprüfen
            
    $check=imap_check($mailbox);
            
            
    // Anzahl vorhandener Emails im Postfach
            
    $count_msg=$check->Nmsgs;
            
            
    // Anzahl neuer Emails im Postfach
            
    $count_new_msg=$check->Recent;
            
            
    // Emails auslesen
            
    for ($i=1$i<=imap_num_msg($mailbox);$i++) {
                
    // Header erfassen
                
    $mail_header=imap_header($mailbox,$i);
                
                
    // Datum erfassen
                
    $mail_date=$mail_header->Date;
                            
                
    // Mail-ID erfassen
                
    $mail_id=$mail_header->message_id;
                            
                
    // Empfänger erfassen
                
                
    $mail_to=$mail_header->toaddress;
                
                
    // Absendername erfassen
                
    $mail_from_name=$mail_header->from
                
    [0]->personal;
                
                
    // Absender-eMail-Adresse erfassen
                
    $mail_from_address=$mail_header->from
                
    [0]->mailbox."@".$mail_header->from
                
    [0]->host;
                
                
    // Kopieempfänger erfassen
                
    $mail_copy_to=$mail_header->cc[0]
                ->
    mailbox."@".$mail_header->cc[0]
                ->
    host;
                
                
    // Antwortempfänger erfassen
                
    $mail_answer_to=$mail_header
                
    ->reply_to;
                
                
    // Betreff erfassen
                
    $mail_subject=$mail_header->subject;
                
                
    // gesamte Nachricht erfassen
                
    $nachricht=imap_body($mailbox$i);
                
                
    //Ersetzten des \ durch nichts da sonst die Attribute 
                             //nicht mit geparst werden.
                
    $nachricht=str_replace("\\",""$nachricht);
        
                
    //öffnet die schon bereits vorhandene Datei 
                                 //Text.php, in die 
                //dann die Nachricht geschrieben wird.        
        
                
    $handle fopen("Text.php","w");
                   
    fputs($handle,$nachricht);
                   
    fclose($handle);
                
                    
            }
        
        
    imap_close($mailbox);
    ?>
    DANKESCHÖN!!!
    --------------------------------------------
    Lebe lieber ungewöhnlich!!

  • #2
    Hmm.... werden die Mails nicht einfach base64 codiert und angehängt im MailBody oder so...?
    Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
    var_dump(), print_r(), debug_backtrace und echo.
    Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
    Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
    Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

    Kommentar


    • #3
      Hatte mal irgendwann im Internet folgendes skript dazu gefunden. Vieleicht Hilft es dir weiter:


      PHP-Code:

      // opens connection to a mailbox
      $mbox imap_open ("{localhost:143}""username""pass");


      function 
      parsepart($p,$i)
         {
          global 
      $mbox,$msgid,$partsarray,$j;
          
      //where to write file attachments to:
          
      $filestore "Y:/txt-Files/";
          
      //echo "link ".$mbox."  msgnum ".$msgid. "p  ".$p." i ".$i." ARR ".$partsarray."<br>";

          //fetch only a part of the body
          
      $part=imap_fetchbody($mbox,$msgid,$i);

           
      //if type is not text
           
      if ($p->type!=0)
            {
             
      //DECODE PART
             //decode if base64
             
      if ($p->encoding==3)
             {
      $part=base64_decode($part);}
             
      //decode if quoted printable
             
      if ($p->encoding==4)
             {
      $part=quoted_printable_decode($part);}
             
      //no need to decode binary or 8bit!

             //get filename of attachment if present
             
      $filename='';


             
      // if there are any dparameters present in this part
             
      if (count($p->dparameters)>0)
               {
                 foreach (
      $p->dparameters as $dparam)
                   {
                    if ((
      strtoupper($dparam->attribute)=='NAME'
                    ||(
      strtoupper($dparam->attribute)=='FILENAME'))
                       {
                        
      $filename=$dparam->value;
                       }
                   }
               }
               
               
             
      //if no filename found
             
      if ($filename=='')
                {
                 
      // if there are any parameters present in this part
                 
      if (count($p->parameters)>0)
                    {
                     foreach (
      $p->parameters as $param)
                       {
                         if ((
      strtoupper($param->attribute)=='NAME'
                         ||(
      strtoupper($param->attribute)=='FILENAME'))
                           {
                            
      $filename=$param->value;
                           }
                       }
                    }
                }
                
                
             
      //write to disk and set partsarray variable
             
      if ($filename!='')
                {
                 
      $partsarray[$i][attachment] = array('filename'=>$filename,'binary'=>$part);
                 
      $filename explode("."$filename);
                 
      $fp=fopen($filestore.$filename[0].$j.".".$filename[1],"w+");
                 
      fwrite($fp,$part);
                 
      fclose($fp);
                }


            }
      //end if type!=0

            //if part is text
            
      else if($p->type==0)
              {
               
      //decode text
               //if QUOTED-PRINTABLE
               
      if ($p->encoding==4)
               {
      $part=quoted_printable_decode($part);}
               
      //if base 64
               
      if ($p->encoding==3)
               {
      $part=base64_decode($part);}

               
      //if plain text
               
      if (strtoupper($p->subtype)=='PLAIN')1;
               
      //if HTML
               
      else if (strtoupper($p->subtype)=='HTML')1;
               
      $partsarray[$i][text] = array('type'=>$p->subtype,'string'=>$part);
              }

         
      // if subparts... recurse into function and parse them too!
         // this is a recursive call of the function
         
      if (count($p->parts)>0){
             foreach (
      $p->parts as $pno=>$parr){
                 
      parsepart($parr,($i.'.'.($pno+1)));
                 }
             }
      return;
      }

      /*=============================================*/
      /*============= End of Function ===============*/
      /*=============================================*/

      $number_of_emails imap_num_msg($mbox);

      if(
      $number_of_emails>0)
      {
      // Number of message which will be analysed
      for ($j=1;$j<=$number_of_emails;$j++)
      {
      $msgid $j;

      //fetch structure of message
      $s=imap_fetchstructure($mbox,$msgid);

       
      /*================================================================*/
       
        //checks if there are any parts
        
      if (count($s->parts)>0)
         {
          foreach (
      $s->parts as $partno=>$partarr)
           {
            
      //parse parts of email
            
      parsepart($partarr,$partno+1);
           }
         }
        
      //for not multipart messages
        
      else{
             
      //gets the full/whole body of the message
             
      $text=imap_body($mbox,$msgid);
             
      //decode if quoted-printable
             
      if ($s->encoding==4$text=quoted_printable_decode($text);
             
      //OPTIONAL PROCESSING
             
      if (strtoupper($s->subtype)=='PLAIN'$text=$text;
             if (
      strtoupper($s->subtype)=='HTML'$text=$text;

             
      $partsarray['not multipart'][text]=array('type'=>$s->subtype,'string'=>$text);
            }
            
       
      /*================================================================*/

      // shows all parts
      print_r($partsarray);
      }
      }

      // close connection
      imap_close ($mbox); 
      gruss galaxy

      Kommentar


      • #4
        Dankeschön

        Hallo Galaxy,

        Dankeschön. Hat mir schon ne ganze Ecke weitergeholfen.
        Quäle mich nur gerade ein bisschen durch die variablen, weil nicht alle in dem Code deklariert sind.

        Gruß

        Sunshine
        --------------------------------------------
        Lebe lieber ungewöhnlich!!

        Kommentar

        Lädt...
        X