Intereting Posts
передача нескольких параметров с помощью $ .ajax по POST в php-функцию Передача переменной с fancybox на родительскую страницу при закрытии fancybox Проблемы с ограничением размера загрузки функции PHP cURL Есть ли инструмент для преобразования Java, JavaScript или Python в PHP? PHP / MySQL. выбор 2 общих полей в 2 таблицах PHP html-декодирование – преобразование: A & # 039; quote & # 039; <b> жирный </ b> CodeIgniter 3: номер ошибки 2014 Команды не синхронизированы; вы не можете запустить эту команду сейчас Как интегрировать PHP и R в Windows? аутентификация на основе токена в php PHP $ _POST не работает, но $ _GET отлично работает В Yii существует ли способ проверки табличного ввода с помощью CActiveForm? Как создать дружественный формат даты (например, «отправлено 2 дня назад») PHP POST с заголовком () и проблемами с плохим заголовком Добавление к тому же массиву с двумя разными циклами foreach PHP / SQL PHP Предупреждение: недопустимое смещение строки

как загружать вложенную почту в определенную папку с помощью IMAP и php

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

$hostname = '{xxxx.net:143/novalidate-cert}INBOX'; $username = 'yyy@xxxx.net'; $password = 'zzzz'; /* try to connect */ $inbox = imap_open($hostname,$username,$password) or die('Cannot connect to : ' . imap_last_error()); $emails = imap_search($inbox,'ALL'); if($emails) { $output = ''; rsort($emails); foreach($emails as $email_number) { $structure = imap_fetchstructure($inbox, $email_number); $name = $structure->parts[1]->dparameters[0]->value; // name of the file $type = $structure->parts[1]->type; //type of the file }} 

Я могу получить тип и имя файлов, но не знаю, как продолжить

Любой, пожалуйста, помогите мне. Спасибо…

Чтобы сохранить вложения в виде файлов, вам нужно проанализировать структуру сообщения и вынуть все части, которые являются вложениями на свой собственный (размещение контента). Вы должны обернуть это в свои собственные классы, чтобы у вас был легкий доступ, и вы можете более легко справляться с ошибками с течением времени, синтаксический анализ по электронной почте может быть хрупким:

 $savedir = __DIR__ . '/imap-dump/'; $inbox = new IMAPMailbox($hostname, $username, $password); $emails = $inbox->search('ALL'); if ($emails) { rsort($emails); foreach ($emails as $email) { foreach ($email->getAttachments() as $attachment) { $savepath = $savedir . $attachment->getFilename(); file_put_contents($savepath, $attachment); } } } 

Код этих классов более или менее обертывает функции imap_... , но для классов вложений он также выполняет синтаксический анализ структур. Вы найдете код на github . Надеюсь, это полезно.

Хотя использование PHP + Cron и стандартного почтового сервера может работать, объем работы, необходимой для обработки всех крайних случаев, отчетов об ошибках и т. Д., Может не стоить времени. Хотя я не использовал его, Postmark Inbound кажется невероятной (платной) услугой, которая устранит большую часть головной боли обработки электронной почты через PHP imap api.

Если вы хотите попробовать все с PHP, вы можете проверить этот ресурс .

Если вы хотите загружать вложения как zip

 $zip = new ZipArchive(); $tmp_file = tempnam('.', ''); $zip->open($tmp_file, ZipArchive::CREATE); $mailbox = $connection->getMailbox('INBOX'); foreach ($mailbox->getMessage() as $message) { $attachments = $message->getAttachments(); foreach ($attachments as $attachment) { $zip->addFromString($attachment->getFilename(), $attachment->getDecodedContent()); } } $zip->close(); # send the file to the browser as a download header('Content-disposition: attachment; filename=download.zip'); header('Content-type: application/zip'); readfile($tmp_file); 

Этот код использует библиотеку, размещенную на GitHub . Надеюсь, это полезно.