3

Gmailからメールをダウンロードし、特定のパターンに一致する添付ファイルをダウンロードするRubyスクリプトに取り組んでいます。私はこれをRuby用の優れたMailgemに基づいています。Ruby1.9.2を使用しています。私はRubyの経験があまりなく、提供されたヘルプに感謝します。

以下のコードでは、emailsは、特定のラベルを含むGmailから返される一連の電子メールです。私が立ち往生しているのは、一連の電子メールをループして、各電子メールの複数の添付ファイルである可能性があるものを処理することです。emails [index] .attachments.eachの内部ループは、インデックス値を指定した場合に機能します。配列のすべてのインデックス値を調べるために最初のループをラップすることに成功していません。

emails = Mail.find(:order => :asc, :mailbox => 'label')

emails.each_with_index do |index|
    emails[index].attachments.each do | attachment |
      # Attachments is an AttachmentsList object containing a
      # number of Part objects
      if (attachment.filename.start_with?('attachment'))
        filename = attachment.filename
        begin
            File.open(file_dir + filename, "w+b", 0644) {|f| f.write attachment.body.decoded}
        rescue Exception => e
            puts "Unable to save data for #{filename} because #{e.message}"
        end
      end
    end
end
4

2 に答える 2

10

の構文each_with_indexは次のようになります。

@something.each_with_index do |thing,index|
    puts index, thing
end

次に、行 email.each_with_index do |index| を置き換える必要があります。

emails.each_with_index do |email,index|

ただし、実際にインデックスを使用しているとは思わないので、おそらく次のように単純化できます。

emails.each do |email|
    email.attachments.each do | attachment |
....
于 2012-04-15T20:00:15.617 に答える
3

each_with_index によってブロックに渡される最初のパラメーターは、インデックスではなくオブジェクトです。

emails.each_with_index do |o, i|
  o.attachments.each do | attachment |

また、まだ見ていないコードでインデックスが必要でない限り、eachそこでメソッドを使用できます。

于 2012-04-15T19:56:56.490 に答える