#php #mysql #base64 #mime
#php #mysql #base64 #mime
Вопрос:
У нас есть база данных с сохраненными электронными письмами в формате mbox, вложения в их собственном формате base64 в формате почтового ящика. Мы можем извлекать и получать доступ / анализировать всю информацию … кроме вложений. Короче говоря, я могу зайти в MySQL и фактически увидеть данные вложения в base64_encoded, но по какой-то причине структура Mail_mimeDecode() показывает часть вложения следующим образом:
[1] => stdClass Object
(
[headers] => Array
(
[content-type] => image/gif; name="image.gif"
[content-id] => <3243498760_6337281>
[content-transfer-encoding] => base64
)
[ctype_primary] => image
[ctype_secondary] => gif
[ctype_parameters] => Array
(
[name] => image.gif
)
[body] => GIF89ahôÐÐÐðððÙÙ@àààòòÀ ```000ßß` PP
)
Есть мысли? Возможно, это способ, которым я его сохраняю, но если бы это было правдой, то я не смог бы увидеть фактические данные base64 при редактировании строки в phpMyAdmin. Именно по этой причине я подозреваю, что происходит что-то еще.
Дополнительная информация
- Я установил параметры сортировки в: utf8_bin, поэтому они не чувствительны к регистру
- Я установил тип столбца для сохраненного сообщения в longtext, чтобы было достаточно места для хранения большинства сообщений
Обновленная информация
Добавление флагов, предложенных в функции decode (), дало мне строку, похожую на base64, но это только часть строки. В качестве теста я попытался загрузить точно такое же сообщение из файла с именем «test.mbox» в отличие от MySQL. Загрузка через файл отлично сработала и показала мне все, но при выполнении этого через MySQL я вижу только это. Это похоже на то, что оно усекает его и показывает только одно из вложений (в этом сообщении их два).
[1] => stdClass Object
(
[headers] => Array
(
[content-type] => image/gif; name="image.gif"
[content-id] => <3243498760_6337281>
[content-transfer-encoding] => base64
)
[ctype_primary] => image
[ctype_secondary] => gif
[ctype_parameters] => Array
(
[name] => image.gif
)
[body] => R0lGODlhaAATAPQAANDQ0PDw8BAQENnZQODg4PLywCAgIGBgYDAwMN/fYKCgoJCQkFBQU
)
…когда на самом деле это должно выглядеть так (из теста «test.box», который я запускал):
[1] => stdClass Object
(
[headers] => Array
(
[content-type] => image/gif; name="image.gif"
[content-id] => <3243498760_6337281>
[content-transfer-encoding] => base64
)
[ctype_primary] => image
[ctype_secondary] => gif
[ctype_parameters] => Array
(
[name] => image.gif
)
[body] => R0lGODZhaAATAPQAANDQ0PDw8BAQENnZQODg4PLywCAgIGBgYDAwMN/fYKCgoJCQkFBQUHBw
cObmgM/PEPz88LCwsPn54ZzsoPb20O/vsICAgEBAQMDAwMzMAAAAAP///wAAAAAAAAAAAAAA
ACH/C01TT0ZGSUNFOS4wGAZAAAxtc09QTVNPRkZJQ0U5LjAgJPn1cgAh/wtNU09GRklDRTku
MBgAAAAMY21QUEpDbXAwNzEyZAAAA0gAc7wALAAAAABoABMAAAX/4CaOZGmeJIYRKElgQCvP
Y6DSeC5jmnbRl55uKLL0MMQkjucjWSyKUlCTegaUJqMGie2amL9RLzxqXMibKde70a7ZXjBp
DDzC2/ahpMDv wsSJgAqhDcjchsqPZgqMRuDXC8IPQuGNiskkCWFGAd5IpCEjiQOGaanqBkD
JlM9rggsiXQbrrVhU0W1rkhMFiRTjgACursiAZPEBxs2ACwJqamrUsQ9DCKI1LdCeMS8Pb4j
aiIG1HmtxDEWAmHPqQ m0iQRT/QMrtezCloGT1y4jxbIaThgYcGVXr/sMOFHDxkXV/TU2SEA
YFQ7VRVKqZqxoBa JmJAhtsmQtyhbwm3/8gSye3htgCtYplIMKDABgjvNqIIYM/jSjSzRlIR
gYh0Z9O8tzDMKxHFBoadQoS6BORiKZlSab5tBJcVpVWW16l5ErAmxY4T8Uj0bGH2XtIQ6LZ
OvRrUZSgmnoTSUCgS1tXcExAtVaEpzFX4IbFSjflXQ3g2iqcFaGpSlq1vOa4WBgAxJBDF7Ns
fPQkZJ669v5okHqsBrNK2hVeSI/1NtGQoXwlcZiBlZUIqOpdKQDZa6U9CEa0EJjGs9nlbmOl
CvKfCAWtmZTFYNKyUzeGo5 VQdOEcV1hmFgbAYCqtroibNvx7OrCFWDXm15IlyfA4W5DUHBC
KIWkgEFz7KkQyxcLo9TQyAgvwAChhJnIdEkJlxTS4AYhAAA7
)
Ответ №1:
Сюрприз! Mail_mimeDecode
на самом деле, ну, я не решаюсь это сказать, декодирует вложение.
Кстати: длинный текст, содержащий большинство сообщений электронной почты, является преуменьшением, я надеюсь, что это 4 ГБ, не хотелось бы получать почту большего размера 🙂
Комментарии:
1. Есть ли какой-либо способ обойти это тогда? Мне интересно, каким может быть наилучший способ структурирования этого. Вроде как потеряно прямо сейчас с этим : D
2. Какую проблему вы пытаетесь решить на самом деле? Вот и все, ваши данные готовы к использованию во всей их первоначальной красе. Если вам нужны данные в кодировке base64, вы либо не декодируете их, либо используете
base64_encode
для повторного кодирования, что кажется пустой тратой времени. Что вы планируете делать с данными, которые вы не можете сделать с ними ни в en, ни в decoded?3. Если вы используете этот пакет , вы могли бы просто выполнить
->decode(array('decode_bodies' => false));
4. Привет, Wrikken, ты попал в точку с продолжающимся декодированием. Спасибо за совет. Я обновил исходное сообщение дополнительной информацией. Оно не декодирует его, но усекает код base64 первого вложения (хотя, по крайней мере, теперь отформатирован правильно) и полностью исключает другие вложения в сообщении. Есть какие-либо подсказки, почему это становится таким испорченным?
5. Каков формат строк границы и заголовка и начальных строк в кодировке base64 в необработанном сообщении (до mimedecoding просто «обычная» строка?)