Ruby:如何从标准输入解析电子邮件 mime
Posted
技术标签:
【中文标题】Ruby:如何从标准输入解析电子邮件 mime【英文标题】:Ruby: how to parse e-mail mime from the stdin 【发布时间】:2015-08-09 05:05:20 【问题描述】:当输入来自 STDIN 时,任何人都知道如何解析来自 Ruby 的电子邮件 MIME?我发现了一个名为“mail”的 gem,它看起来非常好,但据我所知,它只能从文件中读取邮件:
require 'mail'
mail = Mail.read('/path/to/message.eml')
这就是我测试它的方式:
# First one is from stdin:
require 'mail'
mail = Mail.new($stdin.readlines)
p mail.from
p mail.to
返回: 零 无
# This one is from the file:
mail2 = Mail.new("my_email.txt")
p mail2.from
p mail2.to
返回: 零 无
# The same file but I'm using Mail.read:
mail3 = Mail.read("my_email.txt")
p mail3.from
p mail3.to
返回: [“test@gmail.com”] [“test2@gmail.com”]
STDIN 我正在测试:
# cat my_email.txt | ruby code.rb
所以 Mail.read 方法适用于我的电子邮件,但是当我想将我的标准输入放入 Mail.read 时,我有:
mail/mail.rb:176:in `initialize': no implicit conversion of Array into String (TypeError)
我知道我可以将该文件从标准输入保存到临时文件夹,然后通过 Mail.read 打开它,但我不想这样做,因为它会很慢。
gem 的完整网址是:https://github.com/mikel/mail
【问题讨论】:
【参考方案1】:readlines 返回一个 array... 行!您可能想在 ARGF 上尝试 read,这是 $stdin 提供的输入。
mail = Mail.new ARGF.read
见the relevant documentation。
【讨论】:
你说得对!我没有考虑。现在可以了! :-) @user3612491 请记住,您可以接受最有帮助的答案(这完全是可选的,但是表示感谢的好方法)【参考方案2】:IO#readlines
生成一个数组。你想要一个字符串:
# readmail.rb
require 'mail'
mail = Mail.new(STDIN.read)
p mail.from
p mail.to
# mail.eml
From: bob@test.lindsaar.net
To: mikel@test.lindsaar.net
Subject: This is an email
This is the body
# command line
$ ruby readmail.rb < mail.eml
# => ["bob@test.lindsaar.net"]
# => ["mikel@test.lindsaar.net"]
【讨论】:
以上是关于Ruby:如何从标准输入解析电子邮件 mime的主要内容,如果未能解决你的问题,请参考以下文章