Class: Ingresses::Mailgun::InboundEmailsController

Inherits:
ActionMailbox::BaseController
  • Object
show all
Defined in:
app/controllers/action_mailbox/ingresses/mailgun/inbound_emails_controller.rb

Overview

Ingests inbound emails from Mailgun. Requires the following parameters:

  • body-mime: The full RFC 822 message

  • timestamp: The current time according to Mailgun as the number of seconds passed since the UNIX epoch

  • token: A randomly-generated, 50-character string

  • signature: A hexadecimal HMAC-SHA256 of the timestamp concatenated with the token, generated using the Mailgun Signing key

Authenticates requests by validating their signatures.

Returns:

  • 204 No Content if an inbound email is successfully recorded and enqueued for routing to the appropriate mailbox

  • 401 Unauthorized if the request’s signature could not be validated, or if its timestamp is more than 2 minutes old

  • 404 Not Found if Action Mailbox is not configured to accept inbound emails from Mailgun

  • 422 Unprocessable Entity if the request is missing required parameters

  • 500 Server Error if the Mailgun Signing key is missing, or one of the Active Record database, the Active Storage service, or the Active Job backend is misconfigured or unavailable

Usage

  1. Give Action Mailbox your Mailgun Signing key (which you can find under Settings -> Security & Users -> API security in Mailgun) so it can authenticate requests to the Mailgun ingress.

    Use bin/rails credentials:edit to add your Signing key to your application’s encrypted credentials under action_mailbox.mailgun_signing_key, where Action Mailbox will automatically find it:

    action_mailbox:
      mailgun_signing_key: ...
    

    Alternatively, provide your Signing key in the MAILGUN_INGRESS_SIGNING_KEY environment variable.

  2. Tell Action Mailbox to accept emails from Mailgun:

    # config/environments/production.rb
    config.action_mailbox.ingress = :mailgun
    
  3. Configure Mailgun to forward inbound emails to /rails/action_mailbox/mailgun/inbound_emails/mime.

    If your application lived at https://example.com, you would specify the fully-qualified URL https://example.com/rails/action_mailbox/mailgun/inbound_emails/mime.

Defined Under Namespace

Classes: Authenticator

Instance Method Summary collapse

Instance Method Details

#createObject



49
50
51
# File 'app/controllers/action_mailbox/ingresses/mailgun/inbound_emails_controller.rb', line 49

def create
  ActionMailbox::InboundEmail.create_and_extract_message_id! mail
end