从数据库中检索和解析 MIME 电子邮件

Posted

技术标签:

【中文标题】从数据库中检索和解析 MIME 电子邮件【英文标题】:Retrieving and parsing a MIME email from a database 【发布时间】:2010-11-28 18:08:30 【问题描述】:

给定的任务:一封电子邮件以一个或多个(固定长度)块的形式逐字节存储在数据库中。该邮件将从该数据库中检索,并将其内容显示给用户。

我没有问题将遗留数据库包装在 ActiveRecord 模型中,连接存储的块等等。我真的不知道从哪里开始 MIME 解析部分。我想到了可能有一个专用的 EMail 类,我可以使用存储在数据库中的数据进行初始化,并且该类将允许我查看邮件包含哪些 MIME 部分并允许我显示,例如,text/* 部分。

现在看来 ActionMailer 能够解析收到的邮件,但接收邮件的文档似乎相当,呃,“稀疏”,它只是提到从 STDIN 接收邮件。

如果我可以将其内容作为单个字符串、变量、查询结果或类似的东西提供,我如何在 Rails 中解析和显示 MIME 邮件(或其中的一部分)?

【问题讨论】:

【参考方案1】:

看看MMS2R。

我最近一直在用它来解析电子邮件,它做得非常好。

【讨论】:

【参考方案2】:

我做错了。 Rails 带有TMail library,它完全能够解析 MIME 电子邮件。基本工作流程就像连接一条存储消息中的块并将它们传递给TMail::Mail.parse 一样简单,如下所示:

email = TMail::Mail.parse(StoredMessage.find(:all,
  :conditions => ["mail_id = ?", "oyByGqacG73b"],
  :order => "chunk_ind").collect(&:mail_text).join)

email.body #=> this is your test body
email.subject # => test subject
email.has_attachment? #=> true
email.attachments.first.original_filename # => bulkfile

我真的很抱歉错过了 Rails 中的整个库。

【讨论】:

"has_attachments?" (复数)是方法的正确名称【参考方案3】:

"has_attachment*s*?" (复数)是方法的正确名称

【讨论】:

以上是关于从数据库中检索和解析 MIME 电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

Ruby:如何从标准输入解析电子邮件 mime

从 Lotus Notes 解析 MIME 电子邮件

验证/测试 mime4j 解析内容的输出

Perl 使用 MIME::Parser 解析没有部分的电子邮件正文

使用GOLANG从电子邮件文件中提取附件

使用 Email::MIME 和 multipart/signed 解析电子邮件