The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Помогите распарсить заголовок письма в base64"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"Помогите распарсить заголовок письма в base64"  +/
Сообщение от Bodsiv on 10-Май-11, 13:36 
Добрый день!

Задача - восстанавливать в скрипте (для последующей проверки) заголовки писем вида:

Subject: =?utf-8?B?0K3RgtC+INC+0YTQuNCz0LjRgtC10LvRjNC90L4g0LTQu9C40L3QvdGL0Lkg0YI=?=
        =?utf-8?B?0LXQutGB0YIg0L/QviDRgNGD0YHRgdC60LguINCi0YPRgiDQtdGB0YLRjCDRhg==?=
        =?utf-8?B?0LjRhNGA0YsgLSDQstC+0YIg0L7QvdC4ICIxMiAzNCA1NiA3OCA5MCIg?=
        =?utf-8?B?0Lgg0LXRidGRINC00L4g0YTQuNCz0LAg0YfQtdCz0L4g0YLQvi4g0J3QsNC/?=
        =?utf-8?B?0YDQuNC80LXRgCDQstC+0YIg0Y3RgtC+IC0gItC60LDRgNC7INGDINC60Ls=?=
        =?utf-8?B?0LDRgNGLINGD0LrRgNCw0Lsg0LrQvtGA0YDQsNC70Ysi?=

я попробовал убрать "=?utf-8?B?", "=", "?=", получаем файл вида:

# cat in.txt
0K3RgtC+INC+0YTQuNCz0LjRgtC10LvRjNC90L4g0LTQu9C40L3QvdGL0Lkg0YI0LXQutGB0YIg0L/QviDRgNGD0YHRgdC60LguINCi0YPRgiDQtdGB0YLRjCDRhg0LjRhNGA0YsgLSDQstC+0YIg0L7QvdC4ICIxMiAzNCA1NiA3OCA5MCIg0Lgg0LXRidGRINC00L4g0YTQuNCz0LAg0YfQtdCz0L4g0YLQvi4g0J3QsNC/0YDQuNC80LXRgCDQstC+0YIg0Y3RgtC+IC0gItC60LDRgNC7INGDINC60Ls0LDRgNGLINGD0LrRgNCw0Lsg0LrQvtGA0YDQsNC70Ysi

но он не декодируется! пробовал и с помощью cat in.txt | base64 -d -i
и cat in.txt  | perl -e 'use MIME::Base64 qw(decode_base64);print decode_base64(<>);'

раскодируется буквально несколько слов - дальше мусор.

пробовал перед декодированием прогонять файл через фильтр | td  -d "\r" | tr -d "\n" - не помогло.

причём я заметил - если просто набрать текст заголовка в файл и сконвертить его в консоли в base64, то с base64 из subject совпадает только 1-я строка.

проверял на нескольких письмах.


как правильно сначала собрать base64 заголовк письма из нескольких строк, а затем его раскодировать?


заранее спасибо!

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Помогите распарсить заголовок письма в base64"  +/
Сообщение от allez (ok) on 10-Май-11, 13:59 
>[оверквотинг удален]
> раскодируется буквально несколько слов - дальше мусор.
> пробовал перед декодированием прогонять файл через фильтр | td  -d "\r"
> | tr -d "\n" - не помогло.
> причём я заметил - если просто набрать текст заголовка в файл и
> сконвертить его в консоли в base64, то с base64 из subject
> совпадает только 1-я строка.
> проверял на нескольких письмах.
> как правильно сначала собрать base64 заголовк письма из нескольких строк, а затем
> его раскодировать?
> заранее спасибо!


$ cat in.txt
=?utf-8?B?0K3RgtC+INC+0YTQuNCz0LjRgtC10LvRjNC90L4g0LTQu9C40L3QvdGL0Lkg0YI=?=
=?utf-8?B?0LXQutGB0YIg0L/QviDRgNGD0YHRgdC60LguINCi0YPRgiDQtdGB0YLRjCDRhg==?=
=?utf-8?B?0LjRhNGA0YsgLSDQstC+0YIg0L7QvdC4ICIxMiAzNCA1NiA3OCA5MCIg?=
=?utf-8?B?0Lgg0LXRidGRINC00L4g0YTQuNCz0LAg0YfQtdCz0L4g0YLQvi4g0J3QsNC/?=
=?utf-8?B?0YDQuNC80LXRgCDQstC+0YIg0Y3RgtC+IC0gItC60LDRgNC7INGDINC60Ls=?=
=?utf-8?B?0LDRgNGLINGD0LrRgNCw0Lsg0LrQvtGA0YDQsNC70Ysi?=

$ cat in.txt | sed 's/=?utf-8?B?\|?=//g' | base64 -di
Это офигительно длинный текст по русски. Тут есть цифры - вот они "12 34 56 78 90" и ещё до фига чего то. Например вот это - "карл у клары украл корралы"


Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Помогите распарсить заголовок письма в base64"  +/
Сообщение от Bodsiv on 10-Май-11, 14:13 
>[оверквотинг удален]
> =?utf-8?B?0LXQutGB0YIg0L/QviDRgNGD0YHRgdC60LguINCi0YPRgiDQtdGB0YLRjCDRhg==?=
> =?utf-8?B?0LjRhNGA0YsgLSDQstC+0YIg0L7QvdC4ICIxMiAzNCA1NiA3OCA5MCIg?=
> =?utf-8?B?0Lgg0LXRidGRINC00L4g0YTQuNCz0LAg0YfQtdCz0L4g0YLQvi4g0J3QsNC/?=
> =?utf-8?B?0YDQuNC80LXRgCDQstC+0YIg0Y3RgtC+IC0gItC60LDRgNC7INGDINC60Ls=?=
> =?utf-8?B?0LDRgNGLINGD0LrRgNCw0Lsg0LrQvtGA0YDQsNC70Ysi?=
> $ cat in.txt | sed 's/=?utf-8?B?\|?=//g' | base64 -di
> Это офигительно длинный текст по русски. Тут есть цифры - вот они
> "12 34 56 78 90" и ещё до фига чего то.
> Например вот это - "карл у клары украл корралы"
>

хм.. ещё до вашего ответа попробовал проделать всё тоже самое но на другой машине (а именно на ubuntu 11.04 x86_64) - всё работает. А вот там где я делал изначально (centos 5.6 x86) не работает. И ваша команда тоже не отрабатывает:

$ cat in.txt | sed 's/=?utf-8?B?//; s/?=//' | base64 -di
Это офигительно длинный тbase64: invalid input

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Помогите распарсить заголовок письма в base64"  +/
Сообщение от allez (ok) on 10-Май-11, 14:45 
> хм.. ещё до вашего ответа попробовал проделать всё тоже самое но на
> другой машине (а именно на ubuntu 11.04 x86_64) - всё работает.
> А вот там где я делал изначально (centos 5.6 x86) не
> работает. И ваша команда тоже не отрабатывает:
> $ cat in.txt | sed 's/=?utf-8?B?//; s/?=//' | base64 -di
> Это офигительно длинный тbase64: invalid input

Тогда, думаю, имеет смысл удостовериться в том, что на обеих машинах на вход base64
подается одинаковый текст и если после этого проблема не исчезнет, то останется
грешить на саму утилиту - может в версии для CentOS есть какой-нибудь баг. Кстати,
каковы версии base64 в обоих дистрибутивах?

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

5. "Помогите распарсить заголовок письма в base64"  +/
Сообщение от Bodsiv on 10-Май-11, 14:59 
>[оверквотинг удален]
>> А вот там где я делал изначально (centos 5.6 x86) не
>> работает. И ваша команда тоже не отрабатывает:
>> $ cat in.txt | sed 's/=?utf-8?B?//; s/?=//' | base64 -di
>> Это офигительно длинный тbase64: invalid input
> Тогда, думаю, имеет смысл удостовериться в том, что на обеих машинах на
> вход base64
> подается одинаковый текст и если после этого проблема не исчезнет, то останется
> грешить на саму утилиту - может в версии для CentOS есть какой-нибудь
> баг. Кстати,
> каковы версии base64 в обоих дистрибутивах?

в centos5 довольно таки старая версия coreutils 5.97
в ubuntu coreutils 8.5

более того, я попробовал через perl на ubuntu - не работает, тоже вываливается, и через openssl base64 тоже вываливается и там и там. Походу общий баг. Работает только через base64 из новых coreutils на новой убунту.

так что вот так :)

спасибо за помощь!

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

4. "Помогите распарсить заголовок письма в base64"  +/
Сообщение от XoRe (ok) on 10-Май-11, 14:47 
>[оверквотинг удален]
>> Это офигительно длинный текст по русски. Тут есть цифры - вот они
>> "12 34 56 78 90" и ещё до фига чего то.
>> Например вот это - "карл у клары украл корралы"
>>
> хм.. ещё до вашего ответа попробовал проделать всё тоже самое но на
> другой машине (а именно на ubuntu 11.04 x86_64) - всё работает.
> А вот там где я делал изначально (centos 5.6 x86) не
> работает. И ваша команда тоже не отрабатывает:
> $ cat in.txt | sed 's/=?utf-8?B?//; s/?=//' | base64 -di
> Это офигительно длинный тbase64: invalid input

for a in $(cat in.txt); do b=$(echo "$a" | cut -d\? -f4); echo $b | base64 -d; done

или

for a in $(cat in.txt); do b=$(echo "$a" | sed 's/=?utf-8?B?//; s/?=//'); echo $b | base64 -d; done

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

6. "Помогите распарсить заголовок письма в base64"  +/
Сообщение от luckskyw (ok) on 10-Май-11, 15:54 
>[оверквотинг удален]
> раскодируется буквально несколько слов - дальше мусор.
> пробовал перед декодированием прогонять файл через фильтр | td  -d "\r"
> | tr -d "\n" - не помогло.
> причём я заметил - если просто набрать текст заголовка в файл и
> сконвертить его в консоли в base64, то с base64 из subject
> совпадает только 1-я строка.
> проверял на нескольких письмах.
> как правильно сначала собрать base64 заголовк письма из нескольких строк, а затем
> его раскодировать?
> заранее спасибо!

я бы пошел другим путем. взял бы libvmime   и с ее помощью написал бы простенькую прогу, которая осуществляет необходимую фильтрацию  (проверку) ну а результат в код возврата


Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру