Конвертировать простой emaildump в формат maildir или mbox

В OTRS у меня есть база данных с электронными письмами. У меня есть сырые письма (в eml формат) в таблице под названием "article_plain".

Я могу легко сделать дамп этого с помощью такого заявления:

SELECT ap.body FROM article_plain ap 
INNER JOIN article a ON (a.id = ap.article_id) 
INNER JOIN ticket t ON (a.ticket_id = t.id) 
INNER JOIN queue q ON (t.queue_id = q.id) 
WHERE q.name LIKE '%something%' 
LIMIT 10;

Используя командную строку:

mysql -u root otrs -pmypassword --silent --skip-column-names --raw -e 
"select ap.body from article_plain ap inner join article a on (a.id = ap.article_id) inner join ticket t on (a.ticket_id = t.id) inner join queue q on (t.queue_id = q.id) where q.name like '%something%' limit 10;" 
>> ./emlconcat_something

Я теперь экспортировал в один файл с конкатенацией файлов EML. Это выглядит примерно так:

X-Mimeole: Произведено Microsoft Exchange V6.5 Получено: от xxxxxxxx.org.za ([10.0.50.12]) от xxxxxx.xxxxxx.org.za с Microsoft SMTPSVC(6.0.3790.4675); Вторник, 28 сентября 2010 г., 11:20:22 +0200 MIME-версия: 1.0 Тип содержимого: multipart/related; TYPE = "многослойная" / альтернативы; border ="----_=_NextPart_001_01CB5EEE.613E57EA" Получено: от xxxxxx.xxxxxxx.co.za ([41.208.19.106]) от xxxxxxxx.org.za с SMTP; 28 сентября 2010 г., 09:27:03 +0000 Получено: от mail.dtss.co.za (mail.xxxxx.co.za [196.4.89.13]) от xxxxx.xxxxxxx.co.za; Вторник, 28 сентября 2010 г., 11:27:00 +0200 Получено: от xxxxx-xxxxx.xxxxxx.org.za ([172.16.252.23]) от mail.dtss.co.za с Microsoft SMTPSVC(6.0.3790.4675); Вторник, 28 сентября 2010 г. 11:30:44 +0200 Класс содержимого: urn: классы содержимого: сообщение Тема: RE: Некоторая тема Дата: Вт, 28 сентября 2010 11:24:31 +0200 Идентификатор сообщения: <7918418270AAB64A84F55F47027EC3135FC0F0@xxx.xxx.xxxx.org.za> X-MS-Has-Attach: да X-MS-Tnef-Correlator: Тема-тема: Глобальный Независимо от индекса-потока: ActeL4wmcWmZ5plSTzSDPA18WuxM7AAvyzQA Ссылки: <01BD0A17B3803A48AxxElocExxE0E35E134 xxxx xxxxxxxx (Север Гаутенга, Хэтфилд)"Кому:" Нелли ", "xxxxxxx xxxxxx" CC: " XXXXX XXXX "," XXXXX XXXXX "," XXXXX XXXXX "," XXXX XXXXX (Центурион)", " XXXX XXXXX (Север Гаутенг Хэтфилд)

Это сообщение из нескольких частей в формате MIME.

------_ = _ NextPart_001_01CB5EEE.613E57EA Тип содержимого: составной / альтернативный; граница = "----_ = _ NextPart_002_01CB5EEE.613E57EA"

------_ = _ NextPart_002_01CB5EEE.613E57EA Тип содержимого: текст / обычный; charset="Windows-1252" Content-Transfer-Encoding: цитируемый для печати

Уважаемый кто бы ни

Все остальные электронные письма просто присоединяются к первому (согласно первоначальному select заявление).

Вопрос:
Как мне преобразовать это в формат mbox или maildir?
Т.е. какой скрипт мне использовать на сервере linux?

2 ответа

Решение

Одним из решений является использование csplit

Пример:

csplit -z -k mail_export_file "/Mimeole/" {*}

Часть "Mimeole" в идеале должна быть расширена, но я отстой в регулярном выражении, поэтому я оставляю это как упражнение для читателя.

formail утилита, которая поставляется с procmail имеет некоторую эвристику для разделения файла на отдельные сообщения электронной почты. По умолчанию предполагается ввод mbox от Berkeley, но существуют варианты для определения специальных и / или неработающих форматов.

Поскольку вы сами управляете генерацией дампа, я бы посоветовал вам просто поставить простой, уникальный разделитель перед каждым сохраненным сообщением.

Другие вопросы по тегам