将简单的 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 格式的主要内容,如果未能解决你的问题,请参考以下文章