Этому вопросу чуть больше трех лет, и я не знаю, как на него ответить.
Загрузка структуры электронной почты с использованием imap_fetchstructure();
раскроет всю информацию, необходимую для этой задачи. Я предполагаю, что вы знаете, как получить конкретный адрес электронной почты, который вы хотите проверить, перед использованием imap_fetchstructure();
.
В любом случае, функция вернет список «частей». Эти части соответствуют спецификации IMAP4. Результаты представлены в массиве, и один из индексов массива называется bytes
, который указывает количество байтов для этой части. Есть еще один индекс под названием encoding
, который указывает метод кодирования для этой части.
Как ответил Пол, кодировка Base64 обычно примерно на 33% больше исходного размера, который должен быть достаточно хорошим, чтобы определить исходную длину данных вложения.
Я полагаю, что вы можете избежать хлопот по загрузке данных в память, записав данные непосредственно в дескриптор файла с помощью функции imap_savebody();
. Вы можете преодолеть проблему кодирования, добавив потоковый фильтр к этому дескриптору файла перед вызовом imap_savebody();
. Это достигается с помощью функции stream_filter_append();
.
Я могу отредактировать свой ответ и добавить немного рабочего кода PHP, когда у меня будет больше времени.