IMAPでMail.findした際にuidを取得する

環境

  • ruby 2.4.1
  • mail 2.6.6

本題

Mail.findに引数が3つのブロックを渡す。

require 'mail'

Mail.defaults {
  retriever_method(
    :imap,
    address: "",
    port: 143,
    user_name: "",
    password: "",
  )
}

mail = nil
uid = nil

Mail.find(what: :last, count: 1) do |mail, imap, uid|
  mail = mail
  uid = uid
end

puts mail.class
=> Mail::Message
puts uid
=> 1

ちなみにMail.findの引数にuidの指定もできる。

mails = Mail.find(uid: 1)
puts mails[0].class
=> Mail::Message

ただし、どちらもドキュメントでの言及がないことに留意。