= Fetcher Fetcher is a simple message fetcher perfect for using in a daemon or via cron. It implements the following common pattern: 1. Connect to a server 2. Download available messages 3. Send each message to another object for further processing 4. Remove downloaded messages from the remote server Install using: sudo gem install winton-fetcher == Notice This is a fork of {fetcher}[http://github.com/look/fetcher] by {Luke Francl}[http://github.com/look]. Differences: * Gemified * Doesn't have generators * Fixes a connection exception issue == Usage Create a new fetcher object like the following: @fetcher = Fetcher.create({:type => :pop, :receiver => IncomingMailHandler, :server => 'mail.example.com', :username => 'jim', :password => 'test'}) The receiver object is expected to have a receive method that takes a message as its only argument (e.g., the way ActionMailer::Base.recieve works; but you don't have to use ActionMailer.). Call fetch to download messages and process them. @fetcher.fetch == Configuration The following options can be passed to the Fetcher.create factory method: [type] POP or IMAP [server] The IP address or domain name of the server [port] The port to connect to (defaults to the standard port for the type of server) [ssl] Set to any value to use SSL encryption [username] The username used to connect to the server [password] The password used to connect to the server [authentication] The authentication scheme to use (IMAP only). Supports LOGIN, CRAM-MD5, and PASSWORD (defaults to PLAIN) [use_login] Set to any value to use the LOGIN command instead of AUTHENTICATE. Some servers, like GMail, do not support AUTHENTICATE (IMAP only). [sleep_time] The number of seconds to sleep between fetches (defaults to 60 seconds; valid only for the generated daemon) [processed_folder] The name of a folder to move mail to after it has been processed (IMAP only). NOTE: If not specified, mail is deleted. [error_folder] The name a folder to move mail that causes an error during processing (IMAP only). Defaults to +bogus+. == Running via cron You can also run the Fetcher periodically via cron. It is important to ensure that only one instance is running at one time, and for that the {Lockfile gem}[http://codeforpeople.com/lib/ruby/lockfile/] is recommended. Here is an example script to be with script/runner via cron: begin Lockfile.new('cron_mail_fetcher.lock', :retries => 0) do config = YAML.load_file("#{RAILS_ROOT}/config/mail.yml") config = config[RAILS_ENV].to_options fetcher = Fetcher.create({:receiver => MailReceiver}.merge(config)) fetcher.fetch end rescue Lockfile::MaxTriesLockError => e puts "Another fetcher is already running. Exiting." end == Extending You can subclass Fetcher::Base or one of the protocol-specific classed to override the standard behavior. == Further documentation You can read more about how to use the Fetcher in the PeepCode book {Receiving Email with Ruby}[https://peepcode.com/products/mms2r-pdf]. == Credit & Copyright Created by Dan Weinand and Luke Francl. Development supported by {Slantwise Design}[http://slantwisedesign.com]. Licensed under the terms of the MIT License. Be excellent to each other.