За последние 24 часа нас посетили 36682 программиста и 1712 роботов. Сейчас ищут 888 программистов ...

Помогите доработать код скачки вложений из почтового сервера

Тема в разделе "Сделайте за меня", создана пользователем Paxan-1, 26 окт 2017.

  1. Paxan-1

    Paxan-1 Активный пользователь

    С нами с:
    26 окт 2017
    Сообщения:
    14
    Симпатии:
    1
    Друзья,

    есть такой код, который посредством IMAP подкючается к почтовому серверу и скачивает xls-вложения из писем.

    Как сделать, чтобы файлы сохранялись в такой форме:

    если файл пришел с емайла pupkin-vasa@mail.ru - то файл бы был pupkin-vasa.xls
    если во вложении 2 и более файла - то 2-ое вложение - pupkin-vasa2.xls, 3-е вложение - pupkin-vasa3.xls и т.д.

    если файл пришел с емайла sidorov-kolya@mail.ru - то файл бы был sidorov-kolya.xls
    если во вложении 2 и более файла - то 2-ое вложение - sidorov-kolya2.xls, 3-е вложение sidorov-kolya.3xls и т.д.

    И в конце исполнения кода чтобы все письма на почтовом сервере удалились.

    Спасибо за помощь!




    PHP:
    1. <?php
    2. $hostname = '{pop.rambler.ru:110/pop3}INBOX';
    3. $username = '*******@ro.ru';
    4. $password = '********';
    5. $inbox = imap_open($hostname,$username,$password) or die('Cannot connect  ' . imap_last_error());
    6. $emails = imap_search($inbox,'ALL');
    7. $max_emails = 16;
    8. if($emails) {
    9.     $count = 1;
    10.      rsort($emails);
    11.      foreach($emails as $email_number)
    12.     {
    13.         /* get information specific to this email */
    14.         $overview = imap_fetch_overview($inbox,$email_number,0);
    15.         /* get mail message */
    16.         $message = imap_fetchbody($inbox,$email_number,2);
    17.         /* get mail structure */
    18.         $structure = imap_fetchstructure($inbox, $email_number);
    19.         $attachments = array();
    20.         /* if any attachments found... */
    21.         if(isset($structure->parts) && count($structure->parts))
    22.         {
    23.             for($i = 0; $i < count($structure->parts); $i++)
    24.             {
    25.                 $attachments[$i] = array(
    26.                     'is_attachment' => false,
    27.                     'filename' => '',
    28.                     'name' => '',
    29.                     'attachment' => ''
    30.                 );
    31.                 if($structure->parts[$i]->ifdparameters)
    32.                 {
    33.                     foreach($structure->parts[$i]->dparameters as $object)
    34.                     {
    35.                         if(strtolower($object->attribute) == 'filename')
    36.                         {
    37.                             $attachments[$i]['is_attachment'] = true;
    38.                             $attachments[$i]['filename'] = $object->value;
    39.                         }
    40.                     }
    41.                 }
    42.                 if($structure->parts[$i]->ifparameters)
    43.                 {
    44.                     foreach($structure->parts[$i]->parameters as $object)
    45.                     {
    46.                         if(strtolower($object->attribute) == 'name')
    47.                         {
    48.                             $attachments[$i]['is_attachment'] = true;
    49.                             $attachments[$i]['name'] = $object->value;
    50.                         }
    51.                     }
    52.                 }
    53.                 if($attachments[$i]['is_attachment'])
    54.                 {
    55.                     $attachments[$i]['attachment'] = imap_fetchbody($inbox, $email_number, $i+1);
    56.                     /* 4 = QUOTED-PRINTABLE encoding */
    57.                     if($structure->parts[$i]->encoding == 3)
    58.                     {
    59.                         $attachments[$i]['attachment'] = base64_decode($attachments[$i]['attachment']);
    60.                     }
    61.                     /* 3 = BASE64 encoding */
    62.                     elseif($structure->parts[$i]->encoding == 4)
    63.                     {
    64.                         $attachments[$i]['attachment'] = quoted_printable_decode($attachments[$i]['attachment']);
    65.                     }
    66.                 }
    67.             }
    68.         }
    69.         /* iterate through each attachment and save it */
    70.         foreach($attachments as $attachment)
    71.         {
    72.             if($attachment['is_attachment'] == 1)
    73.             {
    74.                 $filename = $attachment['name'];
    75.                 if(empty($filename)) $filename = $attachment['filename'];
    76.                 if(empty($filename)) $filename = time() . ".dat";
    77.                 /* prefix the email number to the filename in case two emails
    78.                  * have the attachment with the same file name.
    79.                  */
    80.              
    81.                 $fp = fopen($email_number . "-" . $filename, "w+");
    82.                 fwrite($fp, $attachment['attachment']);
    83.                 fclose($fp);
    84.             }
    85.         }
    86.         if($count++ >= $max_emails) break;
    87.     }
    88. }
    89. /* close the connection */
    90. imap_close($inbox);
    91. echo "Done";
    92. ?>
     
    denis01 нравится это.
  2. Paxan-1

    Paxan-1 Активный пользователь

    С нами с:
    26 окт 2017
    Сообщения:
    14
    Симпатии:
    1
    сам разобрался, можно удалять.