Project

mail_relay

0.0
Repository is archived
No commit activity in last 3 years
No release in over 3 years
Retrieves messages from a mail server and resends them to a list of recievers.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

>= 0
>= 0
>= 0

Runtime

>= 1.1
>= 0
 Project Readme

Mail Relay¶ ↑

Retrieves messages from a mail server and resends them to a list of receivers.

First of all, you need a mail domain with a catch-all account. Configure the access to this account for Mail:

Mail.defaults do
  retriever_method(:pop3, address:    'localhost',
                          port:       995,
                          user_name:  'catchall',
                          password:   'secret',
                          enable_ssl: true)
end

The sending configuration is also done over Mail. See their documentation how to change the defaults.

Then create your own subclass of MailRelay::Base and overwrite the following methods:

class RootRelay < MailRelay::Base
  # Is the mail sent to a valid relay address?
  def relay_address?
     true
  end

  # Is the mail sender allowed to post to this address
  def sender_allowed?
     true
  end

  # List of receiver email addresses for the resent email.
  def receivers
     ['root@example.com']
  end
end

Every email from the server is processed in an own RootRelay instance and available there as message. Several methods like envelope_receiver_name or sender_email are available to help you implement above methods. Two callback methods, reject_not_existing and reject_not_allowed, are called if the email is not sent to a valid relay address or if the sender is not allowed to post. So the main method boils down to the following:

def relay
  if relay_address?
    if sender_allowed?
      resend_to(receivers)
    else
      reject_not_allowed
    end
  else
    reject_not_existing
  end
end

After processing, the email is deleted from the server.

Now you only need to run your relay regularly, for example with Delayed::Job or some other queue system:

RootRelay.relay_current

The following values may be configured for your relay:

retrieve_count (5)

Maximum number of emails to retrieve in one batch. relay_current will run as many batches until all currently available emails are processed.

receiver_header (X-Envelope-To)

The name of an X Header that contains the envelope receiver of the email. This header may be set by your mail server.

© 2013 Pascal Zumkehr MIT

<img src=“https://secure.travis-ci.org/codez/mail_relay.png” />