2016-04-19 12 views
-1

Ich versuche, ein Stück Code zu erstellen, der in das Postfach gehen und die Anhänge einer bestimmten Datei herausnehmen wird. Bisher kann ich nur sehen, ob es einen Anhang gibt oder ob es keinen Anhang zur E-Mail gibt.Php E-Mail Anlage Extraktion

Aber ich möchte es in der Lage sein, die Anhänge aus der E-Mail zu nehmen und sie dann in einem angegebenen Verzeichnis zu speichern. Die Art der Anlage, die ich versuche herauszunehmen, ist ein .jpg

Ich habe eine Reihe von verschiedenen Stücken von Code, die ich auf Google gefunden habe versucht und ich habe versucht, es anzupassen, um in meine passen Code, aber bis jetzt war ich erfolglos darin, etwas zu finden, das richtig funktioniert.

Ich frage mich, ob jemand mir helfen könnte, ein Stück Code zu erstellen, der in der Lage wäre, die Anhänge aus den E-Mails zu nehmen und sie in einem Verzeichnis zu speichern.

Danke.

<?php 

    /* connect to email */ 
    $hostname = '{*****.com:110/pop3}INBOX'; 
    $username = '*****'; 
    $password = '*****'; 

    // try to connect 
    $inbox = imap_open($hostname,$username,$password) or die('Cannot connect to server: ' . imap_last_error()); 

    // grab emails 
    $emails = imap_search($inbox,'ALL'); 

    // Search for the 39th email, which has an attachment 
    $count = 39; 


    // Fetch all the information about an email 
    $attachment = imap_fetchstructure($inbox, $count); 


    // find out how may parts the object has 
    $numparts = count($attachment->parts); 

// find if if multipart message 
if ($numparts >= 2) { 


    foreach ($attachment->parts as $part) { 

     if ($part->disposition == "INLINE") { 
     // inline message. Show number of lines 

     printf("Inline message has %s lines<BR>", $part->lines); 

     } elseif ($part->disposition == "ATTACHMENT") { 
     // an attachment 

     echo "Attachment found!"; 
     // print out the file name 
     echo "Filename: ", $part->dparameters[0]->value; 

     } 

    } 

} 
    //} 
    else { 
    // only one part so get some useful info 
    echo "No attachment"; 
} 

imap_close($imap); 
?> 

Antwort

0

Statt imap_search verwendete ich imap_check Nachrichten Übersicht abrufen und arbeitete folgenden. geht über Nachrichten mit imap_check gefunden, und dies ist, wie Sie die binären Daten der Befestigung extrahieren:

$mbox = imap_open(. . . .); 
    $IMAPobj = imap_check($inbox); 

    $start = $IMAPobj->Nmsgs-30; 
    $end = $IMAPobj->Nmsgs; 
    $result = imap_fetch_overview($inbox,"$start:$end",0); 

    $count = $end; 
    foreach ($result as $overview) { 
     $parts = mail_mime_to_array($inbox, $count); 
     foreach($parts as $part) { 
      if(@$part['filename'] || @$part['name']) { 

       $partName = $part['filename'] ? $part['filename'] : $part['name']; 
       echo "Attachment name is " . basename($partName); 
       echo "\n"; 

       if(preg_match(. . . write here a regex to detect ".jpg" in $partName . . .)) { 
        echo "Found file! Extracting binary data..."; 

        $fileContents = $part['data']; 
        file_put_contents("attachment.jpg", $fileContents); 
       } 
      } 
     } 
    } 
+0

Danke, ich werde dies ein Versuch geben. –