    # File lib/vmail/imap_client.rb, line 787
        def reconnect_if_necessary(timeout = 60, &block)
          # if this times out, we know the connection is stale while the user is
          # trying to update
          Timeout::timeout(timeout) do
            block.call
          end
        rescue IOError, Errno::EADDRNOTAVAIL, Errno::ECONNRESET, Timeout::Error
          log "error: #{$!}"
          log "attempting to reconnect"
          close
          log(revive_connection)
          # hope this isn't an endless loop
          reconnect_if_necessary do
            block.call
          end
        rescue
          log "error: #{$!}"
          raise
        end