Fast, flexible & efficient email delivery software

advertisement
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
Download