# File lib/sup/imap.rb, line 174
  def each
    return unless start_offset

    ids = 
      @mutex.synchronize do
        unsynchronized_scan_mailbox
        @ids
      end

    start = ids.index(cur_offset || start_offset) or raise OutOfSyncSourceError, "Unknown message id #{cur_offset || start_offset}."

    start.upto(ids.length - 1) do |i|
      id = ids[i]
      state = @mutex.synchronize { @imap_state[id] } or next
      self.cur_offset = id 
      labels = { :Flagged => :starred,
                 :Deleted => :deleted
               }.inject(@labels) do |cur, (imap, sup)|
        cur + (state[:flags].include?(imap) ? [sup] : [])
      end

      labels += [:unread] unless state[:flags].include?(:Seen)

      yield id, labels
    end
  end