GD Mail Queue is a brand new plugin available for free on WordPress.org that implements an email queue system and turns plain text emails into HTML emails with the use of a customizable template.

This plugin solves two problems that WordPress mail sending has: proper queue to send emails in the background and sending HTML emails made from the basic plain text emails WordPress supports. The queue uses the database to store all the emails with every information email contains, including a list of attachments, custom headers and more.

Plugin dashboard showing queue status and overall mailer statistics

Emails are processed by the plugin in two stages: first (if enabled), the plugin is converted from plain text to HTML. After that, the plugin determines if the email should go into the queue. If it doesn’t, it gets sent as usual. By default, into queue go all emails that have at least one recipient in CC or BCC fields. If the email is sent to a single recipient, there is no need to use the queue, it is sent as usual. Important thing is that plain text to HTML conversion works regardless of the queue use.

So, by default, regular WordPress emails (registration, lost password…) will not be added to the queue, and any email that has more than one recipient will go into the queue. This is very important for plugins like bbPress that use CC and BCC fields to send one email to multiple recipients. The plugin is fully tested with bbPress and with GD bbPress Toolbox Pro plugin (that uses the same method for sending)

The queue is processed using background CRON job every 5 minutes (by default, can be changed), and there are additional options for more control over the job. These options also include settings to override FROM, Reply-To and Sender fields for emails sent through the queue. Once a day plugin removes old emails from the queue.

For HTML conversion, the plugin has two built-in email templates. Both are 100% email valid, and work great in all email clients. Both are simple and clean, and one of them has additional header area. For header and footer areas you can define additional HTML to include that can contain images. If you include image, it has to have full URL. If you don’t want to use predefine templates, you can include full HTML for your own template.

Email template settings

Here is the example email using the predefined template with the header block. The header is defined through plugin settings and it includes the logo image.

Example email using header with the logo

The plugin has additional tools, include full plugin removal tool that can remove database table, plugin settings and CRON jobs. The plugin is available for free on WordPress.org, so check it out:

Plugin intercepts wp_mail function and adds emails to queue only if they have more than one recipient. If any plugin sends 1000 emails one by one (each email one wp_mail call), my plugin will not add them to queue (to be fair, that too can be queued, the plugin has the option to queue all emails regardless of the number of recipients). Sendgrid and WP Offload SES plugins are replacing WordPress wp_mail function, and they remove some filters my plugin needs to use to be able to do what it does. My plugin depends on default wp_mail, using PHPMailer class because without that, there is no way to intercept what WordPress does with emails. If you try my plugin, it will essentially do nothing, because the entry point in wp_mail will be missing from both Sendgrid and WP Offload SES overrides.

Thanks for the explanation. That’s a real shame as you really need to use an external email service provider with WordPress to get emails delivered. But they would need to amend their plugin to grab the emails at a different point I guess.

I would also really love the template facility you have in your plugin. Perhaps you can think of a possible paid modification to your plugin to make them work together?

I have checked Sendgrid plugin already, it doesn’t offer much in term of cooperation with other plugins, no filters to intercept like wp_mail and PHPMailer allow.

One of the updates I plan for the future version is to expand the queue processing so it can use different methods for sending (currently only PHPMailer), and that can be expanded to use Sendgrid and other similar services.