Как сохранить вложения электронной почты в php?

Я получаю электронные письма и затем разбираюсь в базе данных.

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

вот мой код

<?php $inbox=imap_open("{xyz.com:995/pop3/ssl/novalidate-cert}INBOX", "username", "password"); $count = imap_num_msg($inbox); for($i = 1; $i <= 1; $i++) { $raw_body = imap_body($inbox, $i); echo $raw_body; imap_delete($inbox, 1); } imap_expunge ($inbox); ?> 

здесь я получил запрос по электронной почте

Но я не знаю, как сохранить привязанность. Вложение также показано под телом письма, когда я использую imap_body .

Итак, как я должен отделить эти два …

анализируя почту с помощью imap_fetchstructure (), вы можете получить список для разных частей почты. С imap_fetchstructure () вы фактически интересуетесь интересующими вас частями. Посмотрите последнюю документацию на пример кода в комментариях.

Теперь вы знаете, как извлечь вложения из источника электронной почты из ответа Lars. Я думаю, вам также потребуется декодировать приложение. Для этого вам нужно знать, как он был закодирован. 1. base64_encode () 2. chunk_split ()

Код для кодирования файла выглядит следующим образом:

 <?php $body .= "--".$boundary1 . $this->line; $body .= "Content-Type: " . $file_type . "; name=\"" . $file_name . "\"" . $this->line; $body .= "Content-Transfer-Encoding: base64" . $this->line; $body .= "Content-Disposition: attachment; filename=\"" . $file_name . "\"; size=" . $file_size . ";" . $this->line; $body .= $this->line; // empty line $fp = fopen($file_url, 'r'); do { $data = fread($fp, 8192); if (strlen($data) == 0) break; $content .= $data; } while (true); $body .= chunk_split(base64_encode($content)); $body .= $this->line; $body .= $this->line; ?> 

Результат выглядит примерно так:

 --ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ Content-Type: text/plain; name="sample.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="sample.txt"; size=123; AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== 

Теперь, чтобы декодировать его, вам нужно сделать 2 вещи снова в обратном порядке. 1. возьмите закодированную часть и разделите все строки так, чтобы у вас была одна строка строки 2. декодировать ее .. и, конечно, сохранить файл на диск 🙂