解析 MIME 消息

Posted

技术标签:

【中文标题】解析 MIME 消息【英文标题】:Parse MIME messages 【发布时间】:2010-11-05 18:04:51 【问题描述】:

对于我的具有电子邮件模块的新项目。我需要在 web 上显示所有电子邮件信息。当我调用服务器时,我正在获取 base64 编码的 mime 数据。应用 base64 解码技术后,我得到的 mime 数据如下:

/********************* Mime 数据开始 ********************** *************/

From prashant.n@geodesic.com Tue Jun 23 12:01:02 2009
Date: Tue, 23 Jun 2009 12:01:02 +0530
From: Prashant R Naik <prashant.n@geodesic.com>
To: koushik.narayanan@geodesic.com
Subject: This is a test mail
Message-ID: <20090623063102.GA27080@picopeta.com>
Reply-To: Prashant R Naik <prashant.n@geodesic.com>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="ReaqsoxgOBHFXBhH"
Content-Disposition: inline
User-Agent: Mutt/1.5.18 (2008-05-17)
Status: RO
Content-Length: 1912
Lines: 52


--ReaqsoxgOBHFXBhH
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

Test mail.
Initiated by prashant

Regards,
-- 
Prashant R Naik
Principal Technologist | Symbian & Web2.0
Geodesic Limited | www.geodesic.com
Tel: +91-80-66551000

--ReaqsoxgOBHFXBhH
Content-Type: image/gif
Content-Disposition: attachment; filename="trash.gif"
Content-Transfer-Encoding: base64

R0lGODlhEAAQANUoADJ8wTqU2DmR1TqV2DN9wTSBxTWFyTaGyTJ9wTWGyTaKzjmS1TOAxTuV
2DaFyTN8wDiN0jiO0jSAxTeKzjqS1DN8wTqR1TWFyjB4vTOBxTmO0TmS1DaKzTeJzTqV1zSA
xDJ8wDqS1TeKzTF4vDF4vTiO0f///zuX2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACgALAAA
AAAQABAAAAaDQNRpSCwWhcakcsk8mZ5Qpik5pUKvT2W1uDVWp+BiYNAImAZmz/lcDoQEFoFp
QTFtTPKFQLCAREolJiURJhCCJhqAJRMiIhwmjSYdJgqUjQoODgkJJgecBp0mBgYXBx8ZBQxY
UAUSDAUACLEPDwgEAAAEIBUEtygkIyMkwMMYw8EjKEEAOw==

--ReaqsoxgOBHFXBhH
Content-Type: image/jpeg
Content-Disposition: attachment; filename="bx.jpg"
Content-Transfer-Encoding: base64

/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB
AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEB
AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAAR
CAAUAAoDAREAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAn/xAAYEAEAAwEAAAAAAAAA
AAAAAAAAGWen5//EABQBAQAAAAAAAAAAAAAAAAAAAAD/xAAUEQEAAAAAAAAAAAAAAAAAAAAA
/9oADAMBAAIRAxEAPwCb4AJHym0Vp3PQJTaK07noJHgA/9k=

--ReaqsoxgOBHFXBhH
Content-Type: image/png
Content-Disposition: attachment; filename="day_bg.png"
Content-Transfer-Encoding: base64

iVBORw0KGgoAAAANSUhEUgAAAGQAAAApCAYAAADDJIzmAAAABmJLR0QA/wD/AP+gvaeTAAAA
CXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH2AwCCS0kTriU2QAAAB10RVh0Q29tbWVudABD
cmVhdGVkIHdpdGggVGhlIEdJTVDvZCVuAAAAXElEQVR42u3bQQEAMAgDMZiqiZtP5AwbfeQk
NO/WvPtLMR0TABEQIAICRECACAgQAREQIAICRECACAgQAREQIAICRECACAgQAREQIAICRECA
CAgQARGQ7NpPPasFT+0FZPjBRwYAAAAASUVORK5CYII=

--ReaqsoxgOBHFXBhH--

/********************* Mime 数据结束 ********************** *************/

现在的问题是我必须解析这些数据并在我的应用程序中使用它。因为这些数据不是 xml,所以很难解析它(因为用一些标签解析很容易)。所以任何知道如何解析 mime 数据帮助 be.im 使用 erlang 解析这些数据。

提前谢谢你

【问题讨论】:

【参考方案1】:

gen_smtp 和 erlang_smtp 包含用于解析 mime 消息的代码。

【讨论】:

但在我的上下文中似乎没有任何用处而不是x【参考方案2】:

啊,抱歉……好的。然后本着咕噜和谜语游戏的精神,我只能提供“Yaws or nothing”,这不太公平,因为它真的是两个猜测合二为一。

http://yaws.hyber.org/yapp_intro.yaws

但是,滚动您自己的 mime 解析器并不难。获取“边界”并在匹配“--”的行上拆分消息。然后对于每个块,解析标题,直到你得到 CRLF,CRLF。然后你的内容就开始了。

我知道说“使用不同的语言”的回答通常没有帮助。我猜你没有选择 Erlang 作为“使这项工作更容易的语言”,所以我猜有一个外部约束。您愿意分享一下 Erlang 是您首选的解决方案语言的原因吗? :)

【讨论】:

以上是关于解析 MIME 消息的主要内容,如果未能解决你的问题,请参考以下文章

MIME消息结构解析与分析

使用 anmar.SharpMimeTools 解析 MIME 消息

无法解析 Mime 消息

MIME 电子邮件多部分解析器 [重复]

如何在java中解析原始mime内容?

在 Java 中解析 MIME 发件人 (RFC 822)