Преобразование простого дампа электронной почты в формат 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 Тип содержимого: составной/связанный; тип="многочастный/альтернативный"; 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-xxxxxx.xxxxxx.org.za ([172.16.252.23]) по почте mail.dtss.co.za с Microsoft SMTPSVC(6.0.3790.4675); Вт, 28 сентября 2010 г. 11:30:44 +0200 Content-Class: urn:content-classes:message Subject: RE: Some subject Дата: Вт, 28 сентября 2010 г. 11:24:31 +0200 Message-ID: ‹7918418270AAB64A84F55F47027EC3135FC0F0@ xxx.xxx.xxxx.org.za> X-MS-Has-Attach: yes X-MS-Tnef-Correlator: Thread-Topic: Global Any Thread-Index: ActeL4wmcWmZ5plSTzSDPA18WuxM7AAvyzQA xxxx xxxxxxxx (Гаутенг Норт, Хэтфилд)" Кому: "Нелли" , "xxxxxxx xxxxxx" CC: "xxxxx xxxxx" , "xxxxx xxxxxx" , "xxxxx xxxxx" , "xxxx xxxxx (Центурион)" , "xxxx xxxxxx (Гаутенг Норт) , Хэтфилд)"

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

------_=_NextPart_001_01CB5EEE.613E57EA Content-Type: multipart/alternative; граница="----_=_NextPart_002_01CB5EEE.613E57EA"

------_=_NextPart_002_01CB5EEE.613E57EA Content-Type: text/plain; charset="Windows-1252" Content-Transfer-Encoding: кавычки-для печати

Дорогой кто угодно

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

Вопрос:
Как преобразовать это в формат mbox или maildir?
Т.е. какой сценарий я должен использовать на сервере Linux для этого?


person Johan    schedule 19.12.2012    source источник


Ответы (2)


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

Пример:

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

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

person Johan    schedule 19.12.2012
comment
Предполагая, что каждое отдельное сообщение начинается с заголовка X-Mimeole: и что этот текст никогда не встречается в начале строки в теле сообщения, подходящим регулярным выражением будет ^X-Mimeole:. Это довольно конкретные предположения, которые не применимы к электронной почте в целом. - person tripleee; 28.06.2013

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

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

person tripleee    schedule 28.06.2013