Ruby:如何从stdin解析电子邮件mime



有人知道当输入来自STDIN时,我如何从Ruby解析电子邮件MIME ?我发现了一个名为"邮件"的宝石,它看起来真的很好,但到目前为止,我可以看到它只能从文件中读取邮件:

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

的回报:零nil

# This one is from the file:
mail2 = Mail.new("my_email.txt")
p mail2.from
p mail2.to

的回报:零nil

# 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可以正常工作,但是当我想把我的文件发送到邮件时。read I have:

mail/mail.rb:176:in `initialize': no implicit conversion of Array into String (TypeError)

我知道我可以将该文件从stdin保存到临时文件夹,然后通过邮件打开它。但我不想这样做,因为它会很慢。

gem的完整url是:https://github.com/mikel/mail

readline 返回一个数组…行!您可能想尝试读取ARGF,这是$stdin提供的输入。

mail = Mail.new ARGF.read

查看相关文档

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"]

相关内容

  • 没有找到相关文章

最新更新