class IMAPProcessor::Client
This class only exists to transition from IMAPCleanse to imap_processor
Public Class Methods
Source
# File lib/imap_processor/client.rb, line 30 def initialize(options) super @noop = options[:Noop] @root = options[:Root] root = @root root += "/" unless root.empty? connect options[:Host], options[:Port], options[:SSL], options[:Username], options[:Password], options[:Auth] end
Creates a new IMAPClient from options.
Options include:
+:Verbose+:: Verbose flag +:Noop+:: Don't delete anything flag +:Root+:: IMAP root path +:Boxes+:: Comma-separated list of mailbox prefixes to search +:Host+:: IMAP server +:Port+:: IMAP server port +:SSL+:: SSL flag +:Username+:: IMAP username +:Password+:: IMAP password +:Auth+:: IMAP authentication type
IMAPProcessor::new
Public Instance Methods
Source
# File lib/imap_processor/client.rb, line 85 def connect(host, port, ssl, username, password, auth = nil) @imap = Net::IMAP.new host, port: port, ssl: ssl log "Connected to #{host}:#{port}" if auth.nil? then auth_caps = @imap.capability.select { |c| c =~ /^AUTH/ } raise "Couldn't find a supported auth type" if auth_caps.empty? auth = auth_caps.first.sub(/AUTH=/, '') end auth = auth.upcase log "Trying #{auth} authentication" @imap.authenticate auth, username, password log "Logged in as #{username}" end
Connects to IMAP server host at port using ssl if ssl is true then logs in as username with password. IMAPClient will really only work with PLAIN auth on SSL sockets, sorry.
Source
# File lib/imap_processor/client.rb, line 104 def find_mailboxes mailboxes = @imap.list(@root, "*") if mailboxes.nil? then log "Found no mailboxes under #{@root.inspect}, you may have an incorrect root" return [] end mailboxes = mailboxes .reject { |mailbox| mailbox.attr.include? :Noselect } .map(&:name) @box_re = /^#{Regexp.escape @root}#{Regexp.union(*@boxes)}/ mailboxes.reject! { |mailbox| mailbox !~ @box_re } mailboxes = mailboxes.sort_by { |m| m.downcase } log "Found #{mailboxes.length} mailboxes to search:" mailboxes.each { |mailbox| log "\t#{mailbox}" } if @verbose return mailboxes end
Finds mailboxes with messages that were selected by the :Boxes option.
Source
# File lib/imap_processor/client.rb, line 140 def mark(messages, flags) messages.each_slice(500) do |chunk| @imap.store chunk, '+FLAGS.SILENT', flags end log "Marked messages with flags" end
Marks messages in the currently selected mailbox with flags (see Net::IMAP#store).
Source
# File lib/imap_processor/client.rb, line 51 def run(message, flags) log message message_count = 0 mailboxes = find_mailboxes mailboxes.each do |mailbox| @mailbox = mailbox @imap.select @mailbox log "Selected #{@mailbox}" messages = find_messages next if messages.empty? message_count += messages.length unless @noop then mark messages, flags else log "Noop - not marking" end yield messages if block_given? end log "Done. Found #{message_count} messages in #{mailboxes.length} mailboxes" end
Selects messages from mailboxes then marking them with flags. If a block is given it is run after message marking.
Unless :Noop was set, then it just prints out what it would do.
Automatically called by IMAPClient::run
Source
# File lib/imap_processor/client.rb, line 129 def search(query, message) log " Scanning for #{message}" messages = @imap.search query log " Found #{messages.length} messages" return messages end
Searches for messages matching query in the selected mailbox (see Net::IMAP#select). Logs ‘Scanning for message’ before searching.