lib/logstash/inputs/imap.rb in logstash-input-imap-0.1.1 vs lib/logstash/inputs/imap.rb in logstash-input-imap-0.1.2

- old
+ new

@@ -3,17 +3,16 @@ require "logstash/namespace" require "logstash/timestamp" require "stud/interval" require "socket" # for Socket.gethostname -# Read mail from IMAP servers +# Read mails from IMAP server # -# Periodically scans INBOX and moves any read messages +# Periodically scan an IMAP folder (`INBOX` by default) and move any read messages # to the trash. class LogStash::Inputs::IMAP < LogStash::Inputs::Base config_name "imap" - milestone 1 default :codec, "plain" config :host, :validate => :string, :required => true config :port, :validate => :number @@ -21,10 +20,11 @@ config :user, :validate => :string, :required => true config :password, :validate => :password, :required => true config :secure, :validate => :boolean, :default => true config :verify_cert, :validate => :boolean, :default => true + config :folder, :validate => :string, :default => 'INBOX' config :fetch_count, :validate => :number, :default => 50 config :lowercase_headers, :validate => :boolean, :default => true config :check_interval, :validate => :number, :default => 300 config :delete, :validate => :boolean, :default => false @@ -70,11 +70,11 @@ def check_mail(queue) # TODO(sissel): handle exceptions happening during runtime: # EOFError, OpenSSL::SSL::SSLError imap = connect - imap.select("INBOX") + imap.select(@folder) ids = imap.search("NOT SEEN") ids.each_slice(@fetch_count) do |id_set| items = imap.fetch(id_set, "RFC822") items.each do |item| @@ -89,10 +89,12 @@ imap.close imap.disconnect end # def run def parse_mail(mail) + # Add a debug message so we can track what message might cause an error later + @logger.debug("Working with message_id", :message_id => mail.message_id) # TODO(sissel): What should a multipart message look like as an event? # For now, just take the plain-text part and set it as the message. if mail.parts.count == 0 # No multipart message, just use the body as the event text message = mail.body.decoded @@ -119,10 +121,10 @@ end # Call .decoded on the header in case it's in encoded-word form. # Details at: # https://github.com/mikel/mail/blob/master/README.md#encodings # http://tools.ietf.org/html/rfc2047#section-2 - value = transcode_to_utf8(header.decoded) + value = transcode_to_utf8(header.decoded.to_s) # Assume we already processed the 'date' above. next if name == "Date" case event[name]