Электронное письмо, переданное в Mail_mimeDecode () из запроса MySQL, содержит неправильные символы для вложений

#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. Именно по этой причине я подозреваю, что происходит что-то еще.

Дополнительная информация

  1. Я установил параметры сортировки в: utf8_bin, поэтому они не чувствительны к регистру
  2. Я установил тип столбца для сохраненного сообщения в 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 просто «обычная» строка?)