Php извлечение вложений электронной почты

Я пытаюсь создать кусок кода, который войдет в почтовый ящик и вытащит вложения определенного файла. До сих пор я могу только видеть, есть ли вложение или нет вложения в электронном письме.

Но я хочу, чтобы он мог извлекать вложения из электронной почты и затем сохранять их в указанном каталоге. Тип вложения, которое я пытаюсь вынуть - это.jpg

Я пробовал кучу разных фрагментов кода, которые нашел в Google, и я пытался адаптировать его под свой код, но до сих пор мне не удавалось найти что-нибудь, что работает правильно.

Мне было интересно, сможет ли кто-нибудь помочь мне создать кусок кода, который сможет вытащить вложения из электронных писем и сохранить их в каталоге.

Благодарю.

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

1 ответ

Вместо imap_search я использовал imap_check чтобы получить обзор сообщений, и следующее работало. Просмотрите сообщения, найденные с imap_checkи вот как вы извлекаете двоичные данные вложения:

    $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);
                }
            }
        }
    }
Другие вопросы по тегам