За последние 24 часа нас посетили 15110 программистов и 1766 роботов. Сейчас ищут 1548 программистов ...

Сбор почты

Тема в разделе "Работа с почтой", создана пользователем stinkybob, 3 июн 2012.

  1. stinkybob

    stinkybob Активный пользователь

    С нами с:
    21 май 2011
    Сообщения:
    2
    Симпатии:
    0
    Доброго времени суток, у меня есть скрипт который заходит на почтовый ящик и собирает почту и если там есть вложения то сохраняет их.. Собственно все работает, но есть одно "НО"..

    Есть такая программа как outlook у нее есть возможно отправить какие-то файлы воржением и прям в самом теле какой-нибудь скриншот, по отдельности файлы нормально сохраняются а если все это вместе придет, то сам скриншот который был в теле письма сохраняется пустым, хотя имя сохраняется нормально...

    собственно вот массив данных

    Код (Text):
    1.  
    2. (
    3.     [type] => 1
    4.     [encoding] => 0
    5.     [ifsubtype] => 1
    6.     [subtype] => MIXED
    7.     [ifdescription] => 0
    8.     [ifid] => 0
    9.     [ifdisposition] => 0
    10.     [ifdparameters] => 0
    11.     [ifparameters] => 1
    12.     [parameters] => Array
    13.         (
    14.             [0] => stdClass Object
    15.                 (
    16.                     [attribute] => boundary
    17.                     [value] => ----=_NextPart_000_0284_01CD4148.772DE680
    18.                 )
    19.  
    20.         )
    21.  
    22.     [parts] => Array
    23.         (
    24.             [0] => stdClass Object
    25.                 (
    26.                     [type] => 1
    27.                     [encoding] => 0
    28.                     [ifsubtype] => 1
    29.                     [subtype] => RELATED
    30.                     [ifdescription] => 0
    31.                     [ifid] => 0
    32.                     [ifdisposition] => 0
    33.                     [ifdparameters] => 0
    34.                     [ifparameters] => 1
    35.                     [parameters] => Array
    36.                         (
    37.                             [0] => stdClass Object
    38.                                 (
    39.                                     [attribute] => boundary
    40.                                     [value] => ----=_NextPart_001_0285_01CD4148.772DE680
    41.                                 )
    42.  
    43.                         )
    44.  
    45.                     [parts] => Array
    46.                         (
    47.                             [0] => stdClass Object
    48.                                 (
    49.                                     [type] => 1
    50.                                     [encoding] => 0
    51.                                     [ifsubtype] => 1
    52.                                     [subtype] => ALTERNATIVE
    53.                                     [ifdescription] => 0
    54.                                     [ifid] => 0
    55.                                     [ifdisposition] => 0
    56.                                     [ifdparameters] => 0
    57.                                     [ifparameters] => 1
    58.                                     [parameters] => Array
    59.                                         (
    60.                                             [0] => stdClass Object
    61.                                                 (
    62.                                                     [attribute] => boundary
    63.                                                     [value] => ----=_NextPart_002_0286_01CD4148.772DE680
    64.                                                 )
    65.  
    66.                                         )
    67.  
    68.                                     [parts] => Array
    69.                                         (
    70.                                             [0] => stdClass Object
    71.                                                 (
    72.                                                     [type] => 0
    73.                                                     [encoding] => 4
    74.                                                     [ifsubtype] => 1
    75.                                                     [subtype] => PLAIN
    76.                                                     [ifdescription] => 0
    77.                                                     [ifid] => 0
    78.                                                     [lines] => 13
    79.                                                     [bytes] => 157
    80.                                                     [ifdisposition] => 0
    81.                                                     [ifdparameters] => 0
    82.                                                     [ifparameters] => 1
    83.                                                     [parameters] => Array
    84.                                                         (
    85.                                                             [0] => stdClass Object
    86.                                                                 (
    87.                                                                     [attribute] => charset
    88.                                                                     [value] => koi8-r
    89.                                                                 )
    90.  
    91.                                                         )
    92.  
    93.                                                 )
    94.  
    95.                                             [1] => stdClass Object
    96.                                                 (
    97.                                                     [type] => 0
    98.                                                     [encoding] => 4
    99.                                                     [ifsubtype] => 1
    100.                                                     [subtype] => HTML
    101.                                                     [ifdescription] => 0
    102.                                                     [ifid] => 0
    103.                                                     [lines] => 86
    104.                                                     [bytes] => 3392
    105.                                                     [ifdisposition] => 0
    106.                                                     [ifdparameters] => 0
    107.                                                     [ifparameters] => 1
    108.                                                     [parameters] => Array
    109.                                                         (
    110.                                                             [0] => stdClass Object
    111.                                                                 (
    112.                                                                     [attribute] => charset
    113.                                                                     [value] => koi8-r
    114.                                                                 )
    115.  
    116.                                                         )
    117.  
    118.                                                 )
    119.  
    120.                                         )
    121.  
    122.                                 )
    123.  
    124.                             [1] => stdClass Object
    125.                                 (
    126.                                     [type] => 5
    127.                                     [encoding] => 3
    128.                                     [ifsubtype] => 1
    129.                                     [subtype] => PNG
    130.                                     [ifdescription] => 0
    131.                                     [ifid] => 1
    132.                                     [id] =>
    133.                                     [bytes] => 262410
    134.                                     [ifdisposition] => 0
    135.                                     [ifdparameters] => 0
    136.                                     [ifparameters] => 1
    137.                                     [parameters] => Array
    138.                                         (
    139.                                             [0] => stdClass Object
    140.                                                 (
    141.                                                     [attribute] => name
    142.                                                     [value] => image001.png
    143.                                                 )
    144.  
    145.                                         )
    146.  
    147.                                 )
    148.  
    149.                         )
    150.  
    151.                 )
    152.  
    153.             [1] => stdClass Object
    154.                 (
    155.                     [type] => 5
    156.                     [encoding] => 3
    157.                     [ifsubtype] => 1
    158.                     [subtype] => PNG
    159.                     [ifdescription] => 0
    160.                     [ifid] => 0
    161.                     [bytes] => 67840
    162.                     [ifdisposition] => 1
    163.                     [disposition] => attachment
    164.                     [ifdparameters] => 1
    165.                     [dparameters] => Array
    166.                         (
    167.                             [0] => stdClass Object
    168.                                 (
    169.                                     [attribute] => filename
    170.                                     [value] => 187.png
    171.                                 )
    172.  
    173.                         )
    174.  
    175.                     [ifparameters] => 1
    176.                     [parameters] => Array
    177.                         (
    178.                             [0] => stdClass Object
    179.                                 (
    180.                                     [attribute] => name
    181.                                     [value] => 187.png
    182.                                 )
    183.  
    184.                         )
    185.  
    186.                 )
    187.  
    188.             [2] => stdClass Object
    189.                 (
    190.                     [type] => 3
    191.                     [encoding] => 3
    192.                     [ifsubtype] => 1
    193.                     [subtype] => VND.MS-EXCEL
    194.                     [ifdescription] => 0
    195.                     [ifid] => 0
    196.                     [bytes] => 25926
    197.                     [ifdisposition] => 1
    198.                     [disposition] => attachment
    199.                     [ifdparameters] => 1
    200.                     [dparameters] => Array
    201.                         (
    202.                             [0] => stdClass Object
    203.                                 (
    204.                                     [attribute] => filename
    205.                                     [value] => default.xls
    206.                                 )
    207.  
    208.                         )
    209.  
    210.                     [ifparameters] => 1
    211.                     [parameters] => Array
    212.                         (
    213.                             [0] => stdClass Object
    214.                                 (
    215.                                     [attribute] => name
    216.                                     [value] => default.xls
    217.                                 )
    218.  
    219.                         )
    220.  
    221.                 )
    222.  
    223.         )
    224.  
    225. )
    вот код который собирает данные из этого массива и закидывает в свой

    Код (Text):
    1.  
    2. $connection = imap_open("{{$host}:".$port."/imap/".$ssl."}INBOX", $user, $pass);
    3. $messagearr = imap_search($connection, 'UNSEEN');
    4.  
    5. if($messagearr !== false)
    6. {
    7.     foreach($messagearr as $value)
    8.     {
    9.         $array[$i] = imap_headerinfo($connection, $value);
    10.         $arrbd[$i] = imap_fetchstructure($connection, $value);
    11.        
    12.         $partsbd = get_object_vars($arrbd[$i]);
    13.        
    14.         if(!empty($partsbd['parts']))
    15.         {
    16.             $filearr = array();
    17.            
    18.             $f = 0;
    19.             $fpos = 2;
    20.            
    21.             for($p=0;$p<count($partsbd['parts']);++$p)
    22.             {
    23.                 if(isset($partsbd['parts'][$p]->disposition) && $partsbd['parts'][$p]->disposition == 'attachment')
    24.                 {
    25.                     echo " - нашел аттач на партсе ".$p.'<br>';
    26.                    
    27.                     $filearr[$f]['realname'] = decodeHeader($partsbd['parts'][$p]->dparameters[0]->value);
    28.                     $filearr[$f]['hashname'] = md5($filearr[$f]['realname'].time()."266267337".rand());
    29.                     $filearr[$f]['filepath'] = $fpas.$filearr[$f]['hashname'];
    30.                    
    31.                     $part1 = imap_fetchbody($connection,$value,$fpos);
    32.                    
    33.                     $filearr[$f]['filedata'] = getdecodevalue($part1,$partsbd['parts'][$p]->type);
    34.                    
    35.                     $f++;
    36.                     $fpos++;
    37.                 }
    38.                 else if(isset($partsbd['parts'][$p]->type) && $partsbd['parts'][$p]->type == '5')
    39.                 {
    40.                     $filearr[$f]['realname'] = decodeHeader($partsbd['parts'][$p]->parameters[0]->value);
    41.                     $filearr[$f]['hashname'] = md5($filearr[$f]['realname'].time()."266267337".rand());
    42.                     $filearr[$f]['filepath'] = $fpas.$filearr[$f]['hashname'];
    43.                    
    44.                     $part1 = imap_fetchbody($connection,$value,$fpos);
    45.                    
    46.                     $filearr[$f]['filedata'] = getdecodevalue($part1,$partsbd['parts'][$p]->type);
    47.                    
    48.                     $f++;
    49.                     $fpos++;
    50.                 }
    51.             }
    52.         }
    53.        
    54.         if(!empty($partsbd['parts'][0]->parts))
    55.         {
    56.             for($p=0;$p<count($partsbd['parts'][0]->parts);++$p)
    57.             {
    58.                 if(isset($partsbd['parts'][0]->parts[$p]->disposition) && $partsbd['parts'][0]->parts[$p]->disposition == 'attachment')
    59.                 {
    60.                     $filearr[$f]['realname'] = decodeHeader($partsbd['parts'][0]->parts[$p]->dparameters[0]->value);
    61.                     $filearr[$f]['hashname'] = md5($filearr[$f]['realname'].time()."266267337".rand());
    62.                     $filearr[$f]['filepath'] = $fpas.$filearr[$f]['hashname'];
    63.                    
    64.                     $part1 = imap_fetchbody($connection,$value,$fpos);
    65.                    
    66.                     $filearr[$f]['filedata'] = getdecodevalue($part1,$partsbd['parts'][0]->parts[$p]->type);
    67.                    
    68.                     $f++;
    69.                     $fpos++;
    70.                 }
    71.                 else if(isset($partsbd['parts'][0]->parts[$p]->type) && $partsbd['parts'][0]->parts[$p]->type == '5')
    72.                 {
    73.                     $filearr[$f]['realname'] = decodeHeader($partsbd['parts'][0]->parts[$p]->parameters[0]->value);
    74.                     $filearr[$f]['hashname'] = md5($filearr[$f]['realname'].time()."266267337".rand());
    75.                     $filearr[$f]['filepath'] = $fpas.$filearr[$f]['hashname'];
    76.                    
    77.                     $part1 = imap_fetchbody($connection,$value,$fpos);
    78.                    
    79.                     $filearr[$f]['filedata'] = getdecodevalue($part1,$partsbd['parts'][0]->parts[$p]->type);
    80.                    
    81.                     $f++;
    82.                     $fpos++;
    83.                 }
    84.             }
    85.         }
    86.     }
    87. }
    собственно первый цикл собирает 2 файла (в данном случае) с первых 'Parts' второй скрипт делает тоже самое только уже с еще одним вложенным в parts массивом parts

    меня смущает строка

    $part1 = imap_fetchbody($connection,$value,$fpos);

    а именно $fpos, изначально он равен 2 затем прибавляется как только забирет файл, я пробывал во втором цикле меня вручную эту переменную но ничего не помогало, только если поставлю 2 или 3 то в файл попадел содержимое первого или второго файла