【问题标题】:Using Ruby Mail Gem to read Email subjects使用 Ruby Mail Gem 读取邮件主题
【发布时间】:2017-11-11 00:22:43
【问题描述】:

我正在尝试提取从我们的一个服务提供商发送的电子邮件的附件,并将它们保存到网络驱动器,以显示 Smashing Dashboard 的信息。

我正在尝试使用 Mail Gem 来执行此操作: https://github.com/mikel/mail http://www.rubydoc.info/github/mikel/mail/Mail

但是,我对 ruby​​ 尤其是这个特定的 gem 非常缺乏经验,所以我在破译电子邮件时遇到了错误。

###########################################################################
######################## Connect to the POP Server ########################
###########################################################################
require 'mail'
Mail.defaults do
  retriever_method :pop3, :address    => "pop.gmail.com",
                          :port       => 995,
                          :user_name  => '----',
                          :password   => '----',
                          :enable_ssl => true
end

###################################################################
######################## Retrieve the Mail ########################
###################################################################

email = Mail.first    #=> Returns the first unread 

puts email  

if  (email.length > 0)
        puts "New Mail Found"
else
        puts "No New Mail"
end

当我在没有新电子邮件的情况下运行此程序时,一切运行正常,但是当有新电子邮件时,我收到以下错误。

/var/lib/gems/2.3.0/gems/mail-2.6.6/lib/mail/message.rb:1379:in

method_missing: 未定义方法length 用于

# (NoMethodError) from Pop.rb:35:in main

这一行对应于 if 语句。但是 github 示例非常清楚地使用 mail.length 来检查返回的电子邮件数量,我只是不知道如何解决这个问题。

我会很感激额外的眼睛检查这是否有任何明显错误,甚至是一些调试它的提示。

【问题讨论】:

  • 请提供MCVE
  • 我相信这是复制问题所需的最小值,前提是弹出详细信息指向已启用的电子邮件地址。
  • Mail.first 返回 single 首封未读电子邮件。使用email.length 可能期望那里的集合。试试Mail.all 而不是Mail.first
  • 我不确定,但我想你必须做emails = Mail.all,然后检查电子邮件的长度,或者你必须做email = Mail.first,然后检查电子邮件是否等于nil,就像这样if email == nil
  • 我最初是在检查电子邮件是否为空,但正在尝试长度作为替代方案,在任何一种情况下都出现类似的错误。虽然将检查更改为 if `!(email==nil)` 确实允许代码在新电子邮件的情况下运行,并允许我从示例中剪切的其余代码正常运行。在没有新邮件的情况下它会失败,因为无论从 Mail.first 返回什么,即使没有新邮件也不能为零。在没有新邮件的情况下,电子邮件的 puts 不会向终端输出任何内容。

标签: ruby email pop3


【解决方案1】:

终于借助这张表找到了答案:https://i.stack.imgur.com/qbe46.png

将 if 语句更改为 if !(email == []) 成功了

谢谢大家帮我想清楚。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-28
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 2015-05-13
    • 2014-06-10
    • 1970-01-01
    相关资源
    最近更新 更多