A closer look at ProcessWire ProMailer

This week we take a closer look at the upcoming ProMailer module with a lot more details and screenshots. Plus an update on next steps with the new website and development schedule in the weeks ahead.

In the last few weeks we launched the new ProcessWire website and with that now running smoothly one of the next projects will be to redo the modules.processwire.com website to be consistent with the main site. That will probably happen in March. It took awhile to build the new website, so I had to delay a lot of client work, which I’ve been starting to get caught up with this week. I’ve got a lot to catch up with, so like this last week, February may be a more quiet month in terms of core updates and blog posts, while I get caught up with my client projects (though thankfully it’s still all PW work of course).

I'm always making continuous optimizations, improvements and issue resolutions to the core, and that happens regardless of client work. I've got some minor core updates to share, but going to wait to commit them till I've got 3.0.126 ready, which will probably be next week or the week after. While I don’t have core updates to write about in the week’s post, last week’s post had some really useful additions that I’d suggest checking out if you haven’t already.

I wasn’t planning to write a post this week, but I’ve had a few people ask me about the ProMailer module that I mentioned in a previous post, and after just sending out the PW Weekly newsletter using ProMailer, it occurred to me that perhaps we should take a closer look at that this week. After all, this module is fully developed and very close to being ready for release, and while I wasn't planning on writing about it, it actually seems like a good time to. My plan is to make it available to ProDevTools subscribers sometime in the next few weeks. At this point the code is largely complete and I’m focused on documentation for it.

ProMailer background

While ProMailer is a brand new module developed alongside the new ProcessWire website, it’s also the 4th bulk-mailer module that I’ve built, with the first one being back in 2003. The 3rd version was built around 2012 and used on the old ProcessWire website. This 4th version is much more comprehensive and full-featured than the previous ones. Though I’ve learned quite a bit in developing the others, and so feel like this new one is hitting the right notes in doing all the things I’ve wanted out of email distribution, while leaving out the less useful stuff I've experienced in dedicated bulk email services. While I expect everyone’s needs are a little different, my hope is that some of you will find this new module and helpful as I have.

About ProMailer

ProMailer is a convenient and easy-to-use tool for creating and managing bulk email distributions and subscriber lists in ProcessWire. It’s ideal for those that have real email distribution needs but don’t want or need to use a dedicated external service like MailChimp, Constant Contact or any number of other services out there. Though for many ProcessWire users, it might also be a lot more convenient because it does things that external services can’t. ProMailer puts you in full control over your email distribution, while giving you a ProcessWire-focused means of managing it. Below are a few of the key features:

Email source flexibility: ProMailer enables you to create emails that originate from ProcessWire pages, external URLs, or pasted in text and/or HTML.

Subscriber/list flexibility: ProMailer enables you to use dedicated subscriber/email lists managed directly in ProMailer, but you can also create dynamic email lists that originate from pages matching a selector.

Custom fields: For ProMailer managed lists, you can easily create custom fields for the subscribers, as well as import and/or export CSV files. Of course, for page-based lists, you’ve already got custom fields as well.

Scalability: Like almost everything in ProcessWire, ProMailer is built to scale. It can handle distributions of any size.

Forms: ProMailer provides both subscribe and un-subscribe forms, managing the entire subscribe/un-subscribe processes, while also giving you full control over the output.

Double opt-in: For new subscribers, ProMailer handles the entire double opt-in process and confirmation emails, while giving you full control over the output. Subscribers don’t become part of the list until they double opt-in. Subscribers that do not double opt-in are automatically deleted after a set number of days.

Distribution flexibility: ProMailer lets you choose which WireMail module you want to perform each email distribution, and lets you control how the messages are sent in terms of frequency and throttling. If your email provider limits you to a certain quantity of emails per hour (or the like) ProMailer has you covered.

Live & background sending: ProMailer can perform a live send that you can monitor from the browser, or it can perform a background email distribution over time that is triggered by regular website traffic. You can login to your ProcessWire admin to monitor the progress, and ProMailer will also email you when it has completed the job.

Easy for clients: ProMailer is exceptionally easy to use, and will be comfortable for your clients. When you are in ProMailer in the ProcessWire admin, you are either managing subscribers or messages, and that’s all there is to it.

Comprehensive API: For those that want it, ProMailer also has a comprehensive API for managing every aspect of messages, lists, subscribers and background queues. In fact, it may have the most comprehensive API I’ve built in a Pro module thus far. While you don’t need to use it, you may find it handy should you want to connect with web hooks from your email provider (for example, web hooks or reacting to email bounces, which vary from provider to provider).

ProMailer Screenshots

When in ProMailer you are either managing subscribers or messages, and you can create any number of each. Messages refer to something that you are going to send via email, and subscribers refer to a list of people that will receive the email.

Below is a very small list of subscribers I made for a screenshot. (I didn't want to expose anyone's email addresses except my own.) For each subscriber in this screenshot we've got an email address, a double opt-in status, and any number of custom fields (3 in this case). This is a tiny list, but if it were larger then of course you'd see pagination as well.

The next screenshot shows what appears in the "Tools" fieldset (which is collapsed in the screenshot above). As you can see we've got options for adding and removing subscribers in bulk, as well as an import CSV option. There is also an option for exporting to CSV (not shown). The most interesting part of this screenshot is the custom fields definition. Here you specify the name of the field followed by the name of a sanitizer method. Like introduced in last week's post, you can combine sanitizer methods with an underscore and/or add a maximum length when using PW 3.0.125 or newer. This method of definition remains backwards compatible with any version of ProcessWire, just without the combined sanitizer or max length instructions.

In the screenshots above you saw the built-in subscriber list options, but you can also create dynamic subscriber lists from pages. For instance, maybe you want to email all users in your ProcessWire site. Or in our case, maybe we want to email everyone in our Sites, Modules, or Developer directories every once in awhile to ask them to check that their listing is still up-to-date. As you can see, you use InputfieldSelector to match which pages should become part of the list:

Now lets take a look at the other part of ProMailer—Messages. Like with subscriber lists, you can create any number of messages. Though when it comes to sending the ProcessWire Weekly email, I typically re-use the same message and just update the subject and page that it points to. Here is what a typical message edit screen looks like below. On this screen you are telling it what it should send, who it should send it to, and how it should send:

Note the collapsed "placeholders" fieldset above—below is a screenshot with it opened. You can see we have predefined placeholders, as well as dynamic placeholders based on our custom fields. For page-based subscriber lists, you can also refer to any field on the subscriber page with placeholders like {page.field_name}. All placeholders are replaced with values from the subscriber when the email is rendered, right before it gets sent.

The last thing I'd like to show you a screenshot of is the "send" screen. This is what appears when you click the "Start sending" button the Message editor. For a "Live" send, you must remain on the screen while it completes the send, as your browser is technically triggering the server for each group of messages that gets sent. For a "Background" send, you do not have to remain on the page, as the server will take care of sending it in the background. Though you can still return to the screen any time you like to check on the progress. Once a background send finishes, it'll also send you an email to let you know it completed.

That's all I've got for this week. Thanks for reading, and if you have any other questions about ProMailer feel free to email me (you can see my email in some of the screenshots above) or reply below. Hope you all have a great weekend and stop by the ProcessWire Weekly for the latest ProcessWire news and updates.


  • HMCB


    • 5 years ago
    • 11

    Very nice. Simple and powerful. I’ve got many clients who never reach Mailchimp’s 2,000 subscriber limit on the free tier but I hate plastering their emails with the Mailchimp branding. This module is cost effective and keeps everything in-house. And since MailChimp raised prices, to me SendGrid is a better value is your list is anything above 2,000 anyways.

    • ryan


      • 5 years ago
      • 10

      Yes, SendGrid is nice. There are actually a whole lot of good external SMTP options out there, many of them free for under 10k emails/month. Connect any one of them with a WireMail module of your choice and these are a great combination with ProMailer. I'm currently using ProMailer with Mailgun (via WireMailMailgun module) for the weekly newsletter distribution here and it works great.

  • Simon


    • 5 years ago
    • 70

    I very much like the possibility of a newsletter tool all inside ProcessWire. So far it looks really promising with all the settings and flexibility to create newsletter templates and content within it.
    The one big thing I miss here is the statistic part. I feel it's a must now for newsletter tools to provide an insight in your campaign stats to get the numbers of openings, bounces, clicks and unsubscribe. Otherwise you are steering in the dark.

    • ryan


      • 5 years ago
      • 42

      Simon, glad you like it so far. The external SMTP services that I've used already have the statistics part built-in, and they apply it automatically to any sent email to track openings, bounces, clicks, etc. So when I want that information, I login to my SMTP account to view it, and it works quite well. As a result, version 1 of ProMailer isn't going to have statistics features built in, as I'm just trying to focus on the most important stuff initially. But I envision that future versions may very well add stats, especially as the user base of the product increases and we have a better sense of what's needed relative to what's already available.

  • Martin Gartner

    Martin Gartner

    • 5 years ago
    • 21

    This looks great! Do you already have an estimate for a license fee?
    It would also be interesting to know how you store/manage the messages? As custom page type?

    • ryan


      • 5 years ago
      • 22

      My plan is to make it part of the existing ProDevTools set of modules, which is already available and so subscribers to that would get it. The messages can be any existing Page, though ProMailer does also create a page and custom template to get you started as an example. It can also use any existing URL as the source for the email, or you can paste in the email contents into a textarea field in the message editor. For my case, I've mostly used it with a Page as the source of the email.

  • Giulio


    • 5 years ago
    • 22

    Very good job, thanks for this extra module. My question is how does the module "translate" the web page in "compatible" email HTML? When I build newsletters with spefic graphic requirements I use dedicated frameworks like Foundation Email or MJML in order to make sure that messages are responsive and well rendered in all email clients.

  • Ryan


    • 5 years ago
    • 11

    Giulio, there are several options here, though the one I expect most will use is the pages option. With this option the email pages are rendered in ProcessWire like any other that you might produce. It is a perfect pairing with dedicated frameworks like those you mentioned.

  • OllieMackJames


    • 5 years ago
    • 41

    This sounds like a great module, can I make one suggestion?

    Make it a standalone ProMailer Module, it, and your work deserve to be awarded for this as a super cool module on its own.

    I already have acccess to prodev tools, but would be more than happy to buy this one of you in a standalone version.

    Thanks for all your work and for creating an environment that is onboarding great people who also make great modules!

  • Mont Annis

    Mont Annis

    • 5 years ago
    • 00

    Cheers Ryan! Works perfect out of the box. Can't wait to try out custom fields and templates. Thank you for your support.


PrevProcessWire 3.0.125 core updates


ProcessWire 3.0.125 has several useful new $sanitizer methods and options, as well as new ways to access them directly from the $input API variable. This makes dealing with user input even easier than it was before. This version also brings updates to our translation functions and improvements to… More 

NextProcessWire 3.0.126 core updates


This week we take a look at what’s in ProcessWire 3.0.126 which focuses largely on resolving issue reports, but also includes a handy new $page->if() method.  More 

Latest news

  • ProcessWire Weekly #527
    In the 527th issue of ProcessWire Weekly we'll check out what's new in the core this week, introduce a new third party module called Lister Calculator, and more. Read on!
    Weekly.pw / 15 June 2024
  • ProFields Table Field with Actions support
    This week we have some updates for the ProFields table field (FieldtypeTable). These updates are primarily focused on adding new tools for the editor to facilitate input and management of content in a table field.
    Blog / 12 April 2024
  • Subscribe to weekly ProcessWire news

“ProcessWire is like a breath of fresh air. So powerful yet simple to build with and customise, and web editors love it too.” —Margaret Chatwin, Web developer