将简单的 emaildump 转换为 maildir 或 mbox 格式

Posted

技术标签:

【中文标题】将简单的 emaildump 转换为 maildir 或 mbox 格式【英文标题】:Convert simple emaildump to maildir or mbox format 【发布时间】:2012-12-06 19:29:54 【问题描述】:

在 OTRS 中,我有一个包含电子邮件的数据库。 我在一个名为“article_plain”的表中有原始电子邮件(eml 格式)。

我可以使用如下语句轻松转储:

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 与 微软 SMTPSVC(6.0.3790.4675); 2010 年 9 月 28 日星期二 11:20:22 +0200 MIME 版本:1.0 内容类型:多部分/相关; 类型=“多部分/替代”; 边界="----_=_NextPart_001_01CB5EEE.613E57EA" 收到:来自 xxxxxx.xxxxxxx.co.za ([41.208.19.106]) 由 xxxxxxxx.org.za 与 SMTP; 2010 年 9 月 28 日 09:27:03 +0000 收到:来自 mail.dtss.co.za (mail.xxxxx.co.za [196.4.89.13])由 xxxxx.xxxxxxx.co.za 提供;周二,28 2010 年 9 月 11:27:00 +0200 收到:来自 xxxxx-xxxxx.xxxxxx.org.za ([172.16.252.23]) 由 mail.dtss.co.za 与 Microsoft SMTPSVC(6.0.3790.4675); 2010 年 9 月 28 日星期二 11:30:44 +0200 内容等级: urn:content-classes:message 主题:RE:一些主题 日期: 2010 年 9 月 28 日星期二 11:24:31 +0200 消息 ID: X-MS-Has-Attach:是 X-MS-Tnef-Correlator:线程主题:全球 无论线程索引:ActeL4wmcWmZ5plSTzSDPA18WuxM7AAvyzQA 参考: 来自:“xxxx xxxxxxxx(豪登省北部,哈特菲尔德)” 致:“内莉”, “xxxxxxx xxxxxx”抄送:“xxxxx xxxxxx” , "xxxxx xxxxxx" , "xxxxx xxxxxx" , "xxxx xxxxxx (百夫长)" , "xxxx xxxxxx (豪登北, 哈特菲尔德)"

这是一个 MIME 格式的多部分消息。

--------_=_NextPart_001_01CB5EEE.613E57EA 内容类型:多部分/替代; 边界="----_=_NextPart_002_01CB5EEE.613E57EA"

--------_=_NextPart_002_01CB5EEE.613E57EA 内容类型:文本/纯文本; charset="Windows-1252" 内容传输编码:引用打印

亲爱的人

所有其他电子邮件都只是连接到第一封电子邮件(根据最初的select 声明)。

问题: 如何将其转换为 mbox 或 maildir 格式? IE。我应该在 linux 服务器上使用什么脚本来做到这一点?

【问题讨论】:

【参考方案1】:

一种解决方案是使用csplit

例子:

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

理想情况下,“Mimeole”部分应该被扩展,但我不擅长正则表达式,所以我把它作为练习留给读者。

【讨论】:

假设每条消息都以X-Mimeole: 标头开头,并且此文本从未出现在消息正文的行首,那么合适的正则表达式将是^X-Mimeole:。这些是相当具体的假设,一般不适用于电子邮件。【参考方案2】:

procmail 附带的 formail 实用程序具有一些启发式方法,可将文件拆分为单独的电子邮件消息。默认采用 Berkeley mbox 输入,但在识别 ad-hoc 和/或损坏的格式方面存在变化。

由于您自己控制转储的生成,我建议您只需在每个转储消息之前放置一个简单、唯一的分隔符。

【讨论】:

以上是关于将简单的 emaildump 转换为 maildir 或 mbox 格式的主要内容,如果未能解决你的问题,请参考以下文章

将数组转换为向量的最简单方法是啥?

将数组转换为向量的最简单方法是啥?

将嵌套 JSON 转换为简单 JSON

将 IQueryable 转换为简单对象

将简单的 QWebView 示例转换为 Java

将简单的 makefile 转换为 CMakeLists.txt?