2016-04-19 3 views
-1

J'essaie de créer un morceau de code qui ira dans la boîte aux lettres et sortira les pièces jointes d'un fichier spécifique. Jusqu'à présent, je ne peux voir que s'il y a une pièce jointe ou s'il n'y a pas de pièce jointe sur l'e-mail.Extraction de pièces jointes Php

Mais je veux qu'il soit en mesure de retirer les pièces jointes de l'e-mail, puis les enregistrer dans un répertoire spécifié. Le type de pièce jointe que j'essaie de sortir est un .jpg

J'ai essayé un tas de différents morceaux de code que j'ai trouvés sur google et j'ai essayé de l'adapter à mon code, mais jusqu'ici je n'ai pas réussi à trouver quelque chose qui fonctionne correctement. Je me demandais si quelqu'un serait capable de m'aider à créer un morceau de code qui permettrait de retirer les pièces jointes des courriels et de les stocker dans un répertoire.

Merci.

<?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); 
?> 

Répondre

0

Au lieu de imap_search j'ai utilisé imap_check pour récupérer des messages aperçu et les points suivants ont travaillé. Aller sur les messages trouvés avec imap_check, et voici comment extraire les données binaires d'attachement:

$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

Merci, je vais essayer ce. –