如何在 Ruby 中解析邮箱文件?

2023-12-15

红宝石rmail有方法解析本地磁盘上的邮箱文件。不幸的是这个 gem 已经损坏了(在 Ruby 2.0.0 中)。它可能无法修复,因为人们正在迁移到 gemmail.

Gem mail有方法Mail.read('filename.txt'),但这仅解析邮箱中的第一条消息。

那颗宝石和内置的Net::IMAP,在网络上充斥着有关通过 imap 访问邮箱的教程。

那么,还有没有办法解析普通的旧file,没有 imap? 作为我团队中唯一的红宝石爱好者,我宁愿不诉诸于让自己难堪http://docs.python.org/2/library/mailbox.html.

或者,更糟糕的是,PHPimap_open('/var/mail/www-data', ...)- 要是Net::IMAP.new接受这样的文件名。


好消息是Mbox 格式确实非常简单,尽管正是因为简单,它最终被替换了。解析大型邮箱文件以提取单个消息并不是特别有效。

如果您可以将邮箱文件拆分为单独的字符串,则可以将这些字符串传递给邮件库进行解析。

一个示例起点:

def parse_message(message)
  Mail.new(message)

  do_other_stuff!
end

message = nil

while (line = STDIN.gets)
  if (line.match(/\AFrom /))
    parse_message(message) if (message)
    message = ''
  else
    message << line.sub(/^\>From/, 'From')
  end
end

关键是每条消息都以"From "它后面的空格是关键。标头将定义为From:以及任何以以下开头的行">From"被视为 实际上是"From"。正是这样的事情使得这种编码方法确实不够充分,但如果 Maildir 不是一个选项,这就是你必须做的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Ruby 中解析邮箱文件? 的相关文章

随机推荐

  • 可以在 C# 中使用带有非默认构造函数的单例吗?

    我正在为我的一个项目实施一个通知框架 因为我希望它非常通用 所以用户可以使用多个传输层 这样他就不需要真正关心使用一种交付方法 比如说 WCF 或另一种交付方法 例如 ActiveMQ 用户访问的接口当然与交付方法 WCF 或 Active
  • Doc 文件无法从 asp.net 中的 UserControl 下载

    我有用户控件 其中包含带有候选数据的网格 有一个带有模板字段链接按钮的列候选名称 我附加了一个 rowcommand 事件 我正在该事件上下载一个 word 文件 我有下载文档文件代码 可以从简单的网页下载我的文档文件 但此代码不适用于用户
  • 在最后一帧停止 CSS3 动画

    我有一个 4 部分的 CSS3 动画 点击时播放 但动画的最后一部分是为了将其从屏幕上移开 然而 一旦播放完毕 它总是会回到原来的状态 谁知道我怎样才能将其停止在最后一个 CSS 框架上 100 或者如何在播放后删除它所在的整个 div k
  • 在命令行上使用 OSX Leaks 进行 C 程序?

    谁能给我任何运行 OSX 的简单语法leaks用于检测已编译的 C 程序中的内存泄漏的工具 我使用的是 10 8 所以我遇到了严重的兼容性问题valgrind 我读过的关于 XCode 的泄漏 工具的大部分内容都涉及 XCode 环境 这不
  • Typescript 中的方括号与表达式后的关系

    Typescript 中以下两个方括号符号有区别吗 尝试了几个场景 看起来它们是等效的 谢谢你 interface test a string b string const x test a aaaa b bbbb const y test
  • Vincent 图没有显示,没有收到错误

    由于某种原因 当我尝试与文森特一起绘制某些内容时 我得到以下内容
  • 将复选框状态传递给 PHP

  • Java将文件附加到zip中[重复]

    这个问题在这里已经有答案了 可能的重复 使用 Java 将文件附加到 zip 文件 我有一个 zip 文件 其中包含一些文件夹 但重要的一个是 dir 其中有另一个名为 文件夹 的文件夹 该文件夹包含许多我需要能够更新的文件 我现在在 zi
  • 画布上的绘画随着时间的流逝而褪色|奇怪的 alpha 分层行为

    我正在一块未被清除的画布上绘画 并使其随着时间的推移画布逐渐褪色为纯色 或者逐渐褪色以显示后面的图层 我的第一直觉是简单地在每帧中用低 Alpha 值填充绘图上的一个矩形 以便填充颜色逐渐累积 使绘图逐渐淡出 但我发现了一些奇怪的行为 至少
  • 如何将时间戳字符串转换为纪元时间?

    我有格式的时间戳2017 18 08 11 45 30 345 我想将其转换为纪元时间 所以我正在执行以下操作 String timeDateStr 2017 18 08 11 45 30 345 DateTimeFormatter dtf
  • Kotlin 链接来自不同输入流的多个序列?

    假设我想解析这样的大文件 val iStream MyFile class java getResourceAsStream largeFile txt iStream bufferedReader Charsets UTF 8 useLi
  • 在 VB .NET 中生成所有真实组合

    我需要在 VB NET 中生成所有组合 不是排列 我一直在搜索 发现的只是排列 有人说是组合 但当我尝试时 所有都是排列 我需要的是从字符串数组生成组合 Dim data array As String one two three four
  • pyspark数据框过滤或包含基于列表

    我正在尝试使用列表过滤 pyspark 中的数据帧 我想根据列表进行过滤或仅包含列表中具有值的记录 我的下面的代码不起作用 define a dataframe rdd sc parallelize 0 1 0 1 0 2 1 2 1 10
  • 在 JavaScript 中将连字符的名称大写

    我需要在 javascript 中将名称大写 到目前为止我已经找到了这些方法 doesn t capitalize first letter after hyphen gt gives Bj rn martin str replace w
  • 获取大量应用程序图标会导致内存不足

    我创建了一个应用程序来加载所有已安装的应用程序 现在运行良好 但对于一些拥有大量应用程序的手机 平板电脑 我的应用程序会因内存不足而崩溃 以下是获取应用程序信息的源代码 String appName p applicationInfo lo
  • 如何根据cq5中的路径创建目录?

    我有一个字符串 例如页面的路径 content xperia public events eventeditor 我正在生成此页面的 XML 并将其保存到 DAM 但我想将其保存在类似的树结构中 content 我尝试了以下代码 Strin
  • 从集合中随机返回项目

    我有一个从数据库返回通用列表集合 List 的方法 该集合包含订单详细信息 即订单 ID 订单名称 产品详细信息等 此外 该方法返回一个集合 其中仅包含按订单日期降序排序的前 5 个订单 我的要求是 每次客户端调用此方法时 我需要返回有 5
  • 我的变量值与传输时prepareForSegue 取的值不同?

    本质上 我的变量 playerErrors 是通过按下按钮来更新的 然后视图控制器通过数据传输转移到下一个 然而 变量的值 例如 应该从 0 增加 1 传输为 0 就好像按钮没有被按下一样 我的代码中有 16 个变量 我试图传输这些变量 但
  • 模拟框架中的模拟与间谍活动

    在模拟框架中 您可以mock一个物体或spy在上面 两者之间有什么区别 我什么时候会 应该使用其中一种 看着Mockito 例如 我看到类似的事情正在使用spies and mocks 但我不确定两者之间的区别 模拟对象完全替换模拟类 返回
  • 如何在 Ruby 中解析邮箱文件?

    红宝石rmail有方法解析本地磁盘上的邮箱文件 不幸的是这个 gem 已经损坏了 在 Ruby 2 0 0 中 它可能无法修复 因为人们正在迁移到 gemmail Gem mail有方法Mail read filename txt 但这仅解