3

在 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 生成 接收:来自 xxxxxx.xxxxxx.org.za 的 xxxxxxxx.org.za ([10.0.50.12]) 和 Microsoft SMTPSVC(6.0.3790.4675);2010 年 9 月 28 日星期二 11:20:22 +0200 MIME 版本:1.0 内容类型:多部分/相关;类型=“多部分/替代”;boundary="----_=_NextPart_001_01CB5EEE.613E57EA" 收到:来自 xxxxxx.xxxxxxx.co.za ([41.208.19.106]) 由 xxxxxxxxx.org.za 使用 SMTP;2010 年 9 月 28 日 09:27:03 +0000 收到:来自 mail.dtss.co.za (mail.xxxxx.co.za [196.4.89.13]) by xxxxx.xxxxxxx.co.za;2010 年 9 月 28 日星期二 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:

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

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

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

亲爱的谁

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

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

4

2 回答 2

0

一种解决方案是使用csplit

例子:

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

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

于 2012-12-19T14:04:08.933 回答
0

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

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

于 2013-06-28T04:42:58.423 回答