ReceiveD

ReceiveD is yet another way for receiving mail with Rails. Why have yet another subsystem (like IMAP), when you can deliver the mail directly to your data store?

ReceiveD is almost RFC2033 compliant LMTP server built around eventmachine and as such should be quite fast.

The receive daemon will listen on TCP or UNIX socket, and write the mail to the backend storage.

Currently only MongoDB is supported, but writing another backend (MySQL, Redis, etc.) is trivial.

Installation

sudo gem install received

Modify your Postfix configuration to deliver mail via LMTP to TCP or UNIX socket.

Example main.cf:

virtual_transport = lmtp:192.168.2.106:1111
virtual_mailbox_domains = example.com

Create a YAML configuration file which has the following parameters:

{'production'=>{'host'=>hostname, 'database'=>db, 'collection'=>col}}

The mongoid.yml will do, just add the name of collection, i.e.

production:
  <<: *defaults
  database: foo_production
  collection: inbox

The default environment is production, but you can specify other environment using RAILS_ENV environment variable. In this case, make sure you have the relevant key in your configuration file.

Running

Check -h for help, port/unix socket path and config file are required.

Bugs and missing features

  • When using UNIX socket the permissions/ownership are not changed. Use -u and -g when running as daemon or change the permissions/ownership manually.
  • ReceiveD wasn't really tested for compliance with RFC2033
  • It doesn't implement RFC2034 (ENHANCEDSTATUSCODES), because Postfix doesn't seem to care
  • It doesn't perform any validation of the provided input, e.g. LHLO, MAIL FROM, RCPT TO

Copyright (c) 2011 Roman Shterenzon, released under the MIT license