Я столкнулся с небольшой проблемой, и мне было интересно, если кто-нибудь может указать мне правильное направление, я пишу парсер электронной почты, который анализирует электронные письма и извлекает конкретную информацию.
Моя проблема это шаг 2:
Я просматриваю каждую структуру электронной почты, если в ней более двух частей, я пытаюсь декодировать вложение и сохранять его на диск, но это не удается.
Если я пытаюсь просто использовать file_put_contents, я получаю Файл 0 КБ, Я дал полные разрешения пользователю сервера wamp, поэтому я не считать это права доступа к файлам, и я подтвердил, что могу писать с помощью mkdir.
file_put_contents(APPPATH . "attachments/". $partofpart->dparameters[0]->value, $partofpart); //$partofpart is part[2] of the full email structure
Поэтому я попытался декодировать часть и сохранить декодированную часть, используя файл file_put_contents
$attachment = base64_decode($partofpart);
var_dump($attachment);
//then save the attachment with attachment name
file_put_contents(APPPATH . "attachments/". $partofpart->dparameters[0]->value, $attachment);
но это возвращает ошибку, говорящую, что base64_decode требует строку, а не объект, как мне тогда преобразовать мое почтовое вложение в строку для использования base64_decode?
Даже просто записывая это, я чувствую, что упускаю что-то очевидное и не должно требовать дополнительных шагов.
Правильно ли я думаю, что часть ЯВЛЯЕТСЯ вложение? Все параметры заставляют меня поверить, что тип, подтип, размер и т. Д. Являются правильными для вложения.
Ссылка на весь скребковая модель
Спасибо за чтение и любую помощь.
Ниже приводится vardump частей, которые соответствуют проверкам типа / кодировки / расположения
Я решил проблему, я не извлекал реальный pdf обратно только его структуру
Поэтому я написал функцию для извлечения тела конкретного письма, затем использовал imap_base64 для кодирования и, наконец, file_put_contents.
function getAttachment($msg_index, $part)
{
$mailbody = imap_fetchbody($this->conn,$msg_index,$part);
return $mailbody;
}
$attachment = imap_base64($this->email_model->getAttachment($email['index'], "2"));
//mkdir(APPPATH . "attachmentzs/");
//then save the attachment with attachment name
file_put_contents(APPPATH . "attachments/". $partofpart->dparameters[0]->value, $attachment);
Задача ещё не решена.
Других решений пока нет …