mail_room is a configuration based process that will idle on IMAP connections and POST to a delivery URL whenever a new message is received on the configured mailbox and folder.
Add this line to your application's Gemfile:
gem 'mail_room'
And then execute:
$ bundle
Or install it yourself as:
$ gem install mail_room
You will also need to install faraday
or letter_opener
if you use the postback
or letter_opener
delivery methods, respectively.
mail_room -c /path/to/config.yml
---
:mailboxes:
-
:email: "[email protected]"
:password: "password"
:name: "inbox"
:delivery_url: "http://localhost:3000/inbox"
:delivery_token: "abcdefg"
:search_command: 'NEW'
-
:email: "[email protected]"
:password: "password"
:name: "inbox"
:delivery_method: postback
:delivery_url: "http://localhost:3000/inbox"
:delivery_token: "abcdefg"
-
:email: "[email protected]"
:password: "password"
:name: "inbox"
:delivery_method: logger
:log_path: "/var/log/user3-email.log"
-
:email: "[email protected]"
:password: "password"
:name: "inbox"
:delivery_method: letter_opener
:location: "/tmp/user4-email"
Requires faraday
gem be installed.
NOTE: If you're using Ruby >= 2.0
, you'll need to use Faraday from >= 0.8.9
. Versions before this seem to have some weird behavior with mail_room
.
The default delivery method, requires delivery_url
and delivery_token
in
configuration.
As the postback is essentially using your app as if it were an API endpoint, you may need to disable forgery protection as you would with a JSON API. In our case, the postback is plaintext, but the protection will still need to be disabled.
Configured with :delivery_method: logger
.
If :log_path:
is not provided, defaults to STDOUT
Configured with :delivery_method: noop
.
Does nothing, like it says.
Requires letter_opener
gem be installed.
Configured with :delivery_method: letter_opener
.
Uses Ryan Bates' excellent letter_opener gem.
If you have a controller that you're sending to, with forgery protection
disabled, you can get the raw string of the email using request.body.read
.
I would recommend having the mail
gem bundled and parse the email using
Mail.read_from_string(request.body.read)
.
This setting allows configuration of the IMAP search command sent to the server. This still defaults 'UNSEEN'. You may find that 'NEW' works better for you.
You can set per-mailbox configuration for the IMAP server's host
(default: 'imap.gmail.com'), port
(default: 993), and ssl
(default: true).
I suggest running with either upstart or init.d. Check out this wiki page for some example scripts for both: https://github.com/tpitale/mail_room/wiki/Init-Scripts-for-Running-mail_room
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request
- If accepted, ask for commit rights
- specs, this is just a (working) proof of concept √
- finish code for POSTing to callback with auth √
- accept mailbox configuration for one account directly on the commandline; or ask for it
- add example rails endpoint, with auth examples
- add example configs for upstart/init.d √
- log to stdout √
- add a development mode that opens in letter_opener by ryanb √