by Fast, flexible & efficient email delivery software Built on top of industry-standard AMQP message broker. Send millions of emails per hour. Why MailerQ? No Cloud Fast Flexible Many email solutions require you to MailerQ is fast. Its sole purpose is to MailerQ gives you full control over send your customer data to third send emails. Storing, queuing and queued messages. Monitor email parties. Keep your data secure on prioritizing messages is done in a delivery and intervene when necessary. your own servers with MailerQ. separate AMQP message broker. Prioritizing and routing messages has It is just as easy to integrate. never been easier. Download & install on your server Questions? Call us www.mailerq.com +31 20 520 61 90 What is MailerQ? What is RabbitMQ? RabbitMQ is open source AMQP message queue software. It allows you to easily create reliable first-in-first-out message queues. MailerQ is built on top of RabbitMQ and uses RabbitMQ to store and prioritize messages. MailerQ focuses solely on the sending process. MailerQ is a high performance Mail Transfer Agent (MTA) and is designed to deliver large volumes of email messages at very high speeds. It uses RabbitMQ, the industry standard AMQP message software, to queue its messages. MailerQ offers maximum flexibility without compromising on stability Download the latest version of RabbitMQ at www.rabbitmq.com. RabbitMQ can be installed on both Linux and Windows servers. or performance. How MailerQ works Installing MailerQ MailerQ has one goal: fast and reliable email delivery, but how Installing the MTA on your server is easy: download MailerQ does it work? You install the software on your own servers. for Debian, Ubuntu or Red Hat based systems and install it MailerQ connects to your RabbitMQ server and retrieves either by double-clicking on the file, or with one of the messages from the RabbitMQ queue. Every message following commands. retrieved from the queue is sent through SMTP. MailerQ adjusts its send speed to the capacity of the receiving mail server. Red Hat $ sudo rpm -i /path/to/mailerq-version.rpm Debian $ sudo dpkg -i /path/to/mailerq-version.deb Sending emails with MailerQ Your application Consume JSON message Outbox queue Send email by SMTP Internet Add to outbox queue JSON encoded email Figure 1: Post your messages directly to RabbitMQ { } 2 JSON "id": "1" "envelope": "my-sender-address@my-domain.com", "recipient": "info@example.org", "custom-property-name": " debug data that will be visible only in RabbitMQ message", "generated": "2015-01-01 00:00:00", "key": "message-store-key-where-body-can-be-found" "maxdelivertime": "2015-01-01 01:00:00", "maxattempts": 6, "ips": ["231.34.13.156", "231.34.13.158"], All messages in the RabbitMQ message queue are coded in JSON. The JSON input for every message consists of at least the envelope address, recipient, and the email body in MIME. Other properties can be added for additional delivery settings. 3 ways to get messages into RabbitMQ 1. Post directly to RabbitMQ 2. Use MailerQ's built-in SMTP server 3. Run MailerQ as command line utility Publish a JSON encoded message Configure your servers and/or software Start MailerQ as a command line utility directly into RabbitMQ's outbox queue. to use MailerQ as SMTP server. MailerQ (like Postfix or Sendmail). MailerQ reads MailerQ reads the message from the opens an SMTP port and messages sent messages from standard input, converts queue and sends the email through to the port are automatically added them into JSON and publishes them to SMTP. (See figure 1) to the queue. MailerQ reads from this RabbitMQ. queue and delivers the email. Chaining and clustering MailerQ instances can be connected in two different ways: MailerQ instances can also be clustered. Clustered MailerQ chaining and clustering. When MailerQ instances are placed in instances communicate through a shared message queue. This sequence (chaining), messages are sent from one instance to way each MailerQ instance knows exactly what other instan- another through SMTP. Messages can be filtered and modified ces are active. If a message cannot be sent by one MailerQ by adding your own scripts – for example, to verify if an email instance (for example, because the desired IP address is not gets through spam filters, or to check if an email contains available on the server), MailerQ will automatically pass the viruses. (See figure 2) message on to an instance that can send it. 1 2 by SMTP Internet Inbox queue Your script Outbox queue Inbox queue Your script Outbox queue Figure 2: MailerQ instances placed in sequence (chaining) MailerQ configuration Many things can be configured in MailerQ: • Domains MySQL PostgreSQL • Deliveries • IP addresses • DKIM keys • And more... SQLite This configuration is stored in a relational database. Your own minutes and picks up changes automatically. Using a database applications may access this database and read or update its is optional. MailerQ can also run without connecting to a data. MailerQ reloads its entire configuration every few relational database. 3 Improve your deliverability with MailerQ MailerQ delivers email, anywhere and anytime. To Gmail, to All you have to do is update the settings in the database, use Hotmail, and to remote servers anywhere in the world. the MailerQ management console, add the delivery properties You can configure MailerQ's delivery settings on a global, IP, to the JSON, or meta fields to the MIME header. domain, and even individual message level. Automatic retries Domain limits DKIM support 15 DKIM MailerQ returns messages that cannot Some mail servers limit the number of MailerQ supports DKIM. Store your be delivered to RabbitMQ. Here they connections or deliveries from a single private keys in the database or add are stored in temporary queues and are IP address. You can specify from which them using the MailerQ management retried automatically. The interval IP addresses an email can be sent. If the console. between retries increases with every first IP address is unavailable, MailerQ retry. This process continues until the will automatically send your email from email is delivered. Configure retries the first available IP address. You can yourself and set a retry limit, maximum also configure MailerQ to send the email delivery time, or the retry interval. from specific IP addresses. 4 MailerQ management console Deliverability in the management console MailerQ comes with a web-based management console, For example: set MailerQ to temporarily pause sending to where you adjust deliverability settings on the go. Monitor domains that give the response 'connection rate limit real-time performance of your IP addresses, reroute emails to exceeded' and slowly build up connections after the pause. other IP addresses or set up flood patterns to react to server responses. Adjust these settings, and more in your browser. Live monitoring and logging One of the cool features of the MailerQ management console Per domain performance is its live SMTP monitor. A HTML WebSocket connects to the Zoom in on a single IP address to get a detailed picture of core MailerQ process. SMTP traffic received and set by Mail- their global and per domain performance or check the overall erQ is sent to this WebSocket. Keep an eye on everything that performance of your IP addresses on a single domain. This is is happening from your browser window. updated in real-time, making it easy to instantly adjust settings to improve deliverability where needed. MailerQ stores all details of send attempts in its log files. If an attempt fails the logs show exactly what happened. For Email throttling example 'wrongaddress@example.org' does not exist, or MailerQ limits the amount of attempts, connections and the 'mailbox unavailable'. amount of messages over a single SMTP connection to specific domains. All settings can be adjusted on the fly in "The management console allows you to adjust deliverability settings on the go" the management console. There is no need to set up throttling for example, hotmail.com, live.com as well as outlook.com. MailerQ recognizes domains that use the same mail servers and groups them automatically. Flood patterns Set up MailerQ to respond to specific errors from receiving mail servers. These flood patterns will automatically react to these responses and overrule the default email throttling settings. 5 Use your own scripts to easily handle results and notify you when an error persists. Processing results All results are published back to RabbitMQ queues. Your application can retrieve messages from these queues and process the results. The result queues MailerQ publishes JSON encoded messages to the RabbitMQ MailerQ has four different result queues: result queues. The JSON output holds the same properties as the original message, making them easily recognizable for processing by your scripts and programs. • Results • Failed • Success • Retry These queues can be turned on or off and customized. Consume JSON message Outbox queue Internet Add result to JSON Retry Retry queue Send email If greylisted Success queue Failed queue All results queue Retry queues Success and failed queues Results queue This queue stores transient results for These queues are used for the messages This queue is used by MailerQ to publish all deliveries that have not yet failed that are delivered successfully or failed all results, both successful deliveries and or succeeded. These messages will be completely and receive a subset of the failures. retried. message published in the results queue. Benefits of the retry queue MailerQ moves messages that will be retried back into through MailerQ constantly. These queues are temporary, RabbitMQ. This way messages do not have to be moved messages are retried at increasing intervals. Store messages in a NoSQL database To prevent MailerQ from loading messages from the queue at stored in the database, MailerQ can retrieve the message every send attempt, it can use a NoSQL database. By adding a body associated with the key. The message body is only unique key to the JSON that refers to the message body loaded from the database once an SMTP connection is made. Temporarily store message bodies 6 NoSQL database Load message body once SMTP connection has been set up JSON results The input and output JSON look similar. The only difference is the 'result' property that is added to the output JSON. { Different types of results When MailerQ attempts to send an email there are three possible outcomes: • The message was delivered } JSON input "id": "1" "envelope": "my-sender-address@my-domain.com", "recipient": "info@example.org", "custom-property-name": " debug data that will be visible only in RabbitMQ message", "generated": "2015-01-01 00:00:00", "key": "message-store-key-where-body-can-be-found" "maxdelivertime": "2015-01-01 01:00:00", "maxattempts": 6, "ips": ["231.34.13.156", "231.34.13.158"], • The message could not be delivered (fatal error) • The message could not be delivered (reschedule) { JSON output "id": "1" "envelope": "my-sender-address@my-domain.com", "recipient": "info@example.org", "custom-property-name": "debug data that will be visible only in RabbitMQ message", "generated": "2015-01-01 00:00:00", "maxdelivertime": "2015-01-01 01:00:00", "ips": ["231.34.13.156", "231.34.13.158"], MailerQ adds a result property to the JSON at every outcome. The first two outcomes are published to the result queue, where your scripts can pick it up and process the message. The last outcome returns the message to a retry queue. "results": [ { "attempt": 1, "time": "2015-01-01 00:00:20", "type": "error", "from": "231.34.13.156", "to": "receiving IP", "state": "mail from", "code": "421", "status": "4.7.0", "description": "[GL01] Message from("231.34.13.156")temporarily deferred" }, Understanding the results Every attempted delivery adds a result property to the JSON. Emails with multiple retries keep their earlier results. If the delivery of an email fails, the JSON will specify the reason for the failure under 'type' in the result property (e.g. refused, overflow, expired, nodata). You can read exactly what happened to the email before it was sent in the RabbitMQ { results queue. Expired messages Rescheduled emails that fail because the maximum delivery time has expired are directly moved to the results queue. These message are not retried, but still show a result property that normally triggers a retry. } ] } "attempt": 2, "time": "2015-01-01 00:00:36", "type": "success", "from": "231.34.13.156", "to": "receiving IP", "state": "accept", "code": "250", "status": "2.0.0", "description": "Message accepted for delivery" System requirements MailerQ is Linux based software, it runs on Debian based environments (Debian, Ubuntu, etcetera) and Red Hat based environments (Red Hat, Fedora, CentOS, etcetera). Before you install MailerQ you first need to have access to a working RabbitMQ (version 3.3.1+) message broker. Optional The MailerQ MTA supports a number of database engines: domains (e.g. max delivery rate and max connect rate) is MySQL, SQLite and PostgreSQL. The configuration for stored in a database. 7 MailerQ is made, maintained and supported by Copernica Marketing Software, a leading provider of high quality marketing software located in Amsterdam, The Netherlands. About Copernica Marketing Software With Copernica Marketing Software you can deliver relevant and timely communications using email, sms, landing pages and PDF. MailerQ Copernica Marketing Software www.mailerq.com www.copernica.com info@mailerq.com info@copernica.com @mailerq @Copernica 20141128