У меня есть скрипт PHP, который проверяет учетную запись электронной почты для новых сообщений и пытается загрузить вложения .zip и .pdf из каждого письма. Я использую следующий код, чтобы сделать это:Извлечение вложения из электронной почты - невозможно получить имя файла привязки
/* try to connect */
$inbox = imap_open($hostname, $username, $password) or die ('Cannot connect to domain:' . imap_last_error());
/* grab emails */
$emails = imap_search($inbox, 'ALL');
/* put the newest emails on top */
rsort($emails);
foreach ($emails as $email_number) {
$overview = imap_fetch_overview($inbox, $email_number, 0);
if ($overview [0]->seen) {
continue;
}
$structure = imap_fetchstructure($inbox, $email_number);
if (!property_exists($structure, 'parts')) {
continue;
}
//print_r($structure->parts);
//get attachments
}
Для большинства писем, $structure->parts
выглядит примерно так:
[1] => stdClass Object
(
[type] => 3
[encoding] => 3
[ifsubtype] => 1
[subtype] => PDF
[ifdescription] => 0
[ifid] => 0
[bytes] => 132780
[ifdisposition] => 1
[disposition] => attachment
[ifdparameters] => 1
[dparameters] => Array
(
[0] => stdClass Object
(
[attribute] => filename
[value] => some_filename.pdf
)
)
[ifparameters] => 1
[parameters] => Array
(
[0] => stdClass Object
(
[attribute] => name
[value] => some_filename.pdf
)
)
)
[2] => stdClass Object
(
[type] => 3
[encoding] => 3
[ifsubtype] => 1
[subtype] => ZIP
[ifdescription] => 0
[ifid] => 0
[bytes] => 43170
[ifdisposition] => 1
[disposition] => attachment
[ifdparameters] => 1
[dparameters] => Array
(
[0] => stdClass Object
(
[attribute] => filename
[value] => another_filename.zip
)
)
[ifparameters] => 1
[parameters] => Array
(
[0] => stdClass Object
(
[attribute] => name
[value] => another_filename.zip
)
)
)
Как вы можете видеть, что это легко понять, расширение и имя каждого крепление. Однако, в последнее время я получаю несколько писем, где $ структурообразующих> части выглядит как это вместо:
[1] => stdClass Object
(
[type] => 3
[encoding] => 3
[ifsubtype] => 1
[subtype] => OCTET-STREAM
[ifdescription] => 1
[description] => =?utf-8?B?Q1RHIFF1ZXLDqXRhcm8gIC0gIC0gMTJfOF8xNi5wZGY=?=
[ifid] => 1
[id] => <[email protected]>
[bytes] => 44592
[ifdisposition] => 1
[disposition] => attachment
[ifdparameters] => 1
[dparameters] => Array
(
[0] => stdClass Object
(
[attribute] => filename
[value] => =?utf-8?B?Q1RHIFF1ZXLDqXRhcm8gIC0gIC0gMTJfOF8xNi5wZGY=?=
)
[1] => stdClass Object
(
[attribute] => size
[value] => 32586
)
[2] => stdClass Object
(
[attribute] => creation-date
[value] => Thu, 08 Dec 2016 22:16:31 GMT
)
[3] => stdClass Object
(
[attribute] => modification-date
[value] => Thu, 08 Dec 2016 22:16:31 GMT
)
)
[ifparameters] => 1
[parameters] => Array
(
[0] => stdClass Object
(
[attribute] => name
[value] => =?utf-8?B?Q1RHIFF1ZXLDqXRhcm8gIC0gIC0gMTJfOF8xNi5wZGY=?=
)
)
)
[2] => stdClass Object
(
[type] => 3
[encoding] => 3
[ifsubtype] => 1
[subtype] => OCTET-STREAM
[ifdescription] => 1
[description] => =?utf-8?B?Q1RHIFF1ZXLDqXRhcm8gIC0gIC0gMTJfOF8xNi56aXA=?=
[ifid] => 1
[id] => <[email protected]>
[bytes] => 10966
[ifdisposition] => 1
[disposition] => attachment
[ifdparameters] => 1
[dparameters] => Array
(
[0] => stdClass Object
(
[attribute] => filename
[value] => =?utf-8?B?Q1RHIFF1ZXLDqXRhcm8gIC0gIC0gMTJfOF8xNi56aXA=?=
)
[1] => stdClass Object
(
[attribute] => size
[value] => 8011
)
[2] => stdClass Object
(
[attribute] => creation-date
[value] => Thu, 08 Dec 2016 22:16:31 GMT
)
[3] => stdClass Object
(
[attribute] => modification-date
[value] => Thu, 08 Dec 2016 22:16:31 GMT
)
)
[ifparameters] => 1
[parameters] => Array
(
[0] => stdClass Object
(
[attribute] => name
[value] => =?utf-8?B?Q1RHIFF1ZXLDqXRhcm8gIC0gIC0gMTJfOF8xNi56aXA=?=
)
)
)
Эти вложения снова PDF и ZIP, а при использовании почтового клиента они выглядят так же, как вложения в любое другое электронное письмо. Но, как вы можете видеть выше, вместо blahblah.zip и blahblah.pdf для имен файлов он показывает что-то вроде «=? Utf-8? B? Q1RHIFF1ZXLDqXRhcm8gIC0gIC0gMTJfOF8xNi56aXA =? =" Вместо этого. Кроме того, подтип для обоих - это «OCTET-STREAM» вместо «zip» или «pdf». Поэтому я не знаю, что такое тип привязанности, и не могу ничего сделать с электронной почтой.
Любая помощь была бы принята с благодарностью. Подводя итог, я просто пытаюсь выяснить, как правильно извлечь информацию о вложении из этого определенного сегмента писем, которые ведут себя по-другому.
Thank you @HawkHogan. Спас мой день. '$ resp = iconv_mime_decode ($ string_encoded, ICONV_MIME_DECODE_CONTINUE_ON_ERROR," ISO-8859-15 ");' 'echo $ resp = utf8_encode ($ resp);' – Duque