PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   PHP Developer Forum (https://www.php-resource.de/forum/php-developer-forum/)
-   -   Mit PHP eMail Anhänge in Datei speichern (https://www.php-resource.de/forum/php-developer-forum/64811-mit-php-email-anhaenge-in-datei-speichern.html)

sunshine_85 18-01-2006 10:47

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!!!:dontknow:

Shurakai 18-01-2006 14:09

Hmm.... werden die Mails nicht einfach base64 codiert und angehängt im MailBody oder so...?:dontknow:

galaxy2 18-01-2006 14:21

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

sunshine_85 19-01-2006 08:25

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


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:09 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG