【问题标题】:Ruby: how to parse e-mail mime from the stdinRuby:如何从标准输入解析电子邮件 mime
【发布时间】: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

【问题讨论】:

    标签: ruby email gem mime-types mime-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"]
    

    【讨论】:

      猜你喜欢
      • 2011-02-13
      • 2016-06-09
      • 2018-02-23
      • 2010-11-28
      • 1970-01-01
      • 2016-12-18
      • 2016-10-05
      • 2017-08-05
      • 2013-11-28
      相关资源
      最近更新 更多