Как сохранить вложения электронной почты в php? - PullRequest
2 голосов
/ 08 сентября 2011

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

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

вот мой код

<?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.

Так, как я должен разделить эти два ..

Ответы [ 2 ]

1 голос
/ 26 января 2012

Что ж, теперь вы знаете, как извлечь вложения из источника электронной почты из ответа 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==

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

0 голосов
/ 08 сентября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...