MyMail - Email Newsletter Plugin for WordPress

an advanced plugin to send, manage and track your email campaigns

Item Page Support More Templates

Thank you for purchasing my plugin. If you have any questions that are beyond the scope of this help file, please feel free to start a discussion at my support forum. Thanks so much!

The MyMail Newsletter Plugin for WordPress is an advanced plugin which sends, manages and tracks your email campaigns.




While this explains how to get the plugin running you should consider to check out all features, read this documentation and send test campaigns to get familiar with the plugin and its possibilities.

To get this plugin working you have to follow these steps

  1. extract the download zip
  2. log in to your WordPress site
  3. goto "Plugins" => "Add new" => "Upload"
  4. Select the extracted zip archive ""
  5. Click "Upload" and wait until the file was uploaded and extracted.
  6. Click "Activate Plugin"
  7. Click on "Newsletter" in the menu

Please go to the Settings page and configure the plugin before you start sending your first campaign

There are some extensions available for MyMail:

If you have successfully activated the plugin you find your first campaign under the new menu item "Newsletter"

You can simple edit it like a regular post by clicking on edit or directly on the title

This is how your first campaign looks like:

The Details

First choose a title for your campaign. The subject could be the same as the title but it's totally up to you.

All templates are prepared for "Preheaders". Please see this section for more info about preheaders.

You can define the senders email address, name and the address people can reply to.

The Template

This how the template looks when you start a new campaign. There's currently no content except the header and the footer part

The Optionbar

The optionbar is divided into 6 buttons:

Adding Content

To add new content you have to add new modules and fill them with content.

Click and select your desired module. It gets appended right before the footer of the newsletter.

You can also add a new module right before an existing module by clicking on the  button on the right.

To rearrange modules click the up and down  buttons

To remove a single module click the  button.

To add content click on one of the buttons. You can add four types of content:

Some modules offer an  button on the right side to insert whole posts including headline, content, button with link to the article and the feature images (if exists)

You can use differnt type of placeholder tags in your newsletter. Check out this section for more info.

The Options

You can change the colors of your newsletter with the color option on the right. Click the arrows to the right to reset each field or save your newly created color schema to reuse it later.

If you like to set up a background you can select one of the included background in the dropdown. To include your own background just upload them in the myMail directory located at


They will get prepended to the dropdown list.

If you don't like to embed images - which reduce the file size - you can uncheck the option as well


If you don't check the "Send this Campaign" checkbox you wont be able to send your campaign.

You can define any date in the future or leave the current date to send the campaign immediately when you hit the save button (Please check out the Cron Job section to know how campaigns get sent in MyMail)

To test your campaign with your email client enter your email and hit the send button. If you check the checkbox a copy of the newsletter gets sent to and report from your newsletter can be found in your inbox

All emails will get sent with your servers time! Please check compare your local time with the time at your server


Check the Lists you would like to send this campaign. The total receivers are shown at the bottom

Depending on your delivery date and if you have marked the campaign to delivery, each campaign can have up to five statuses.


If a campaign was saved without the "Send this campaign" checkbox checked or a running campaign as been paused


If the campaign is waiting for dispatch


If the campaign is progression or right before to send


If all newsletters where sent the campaign is "finished" the date shows when the campaign has been finished


If you duplicate a campaign it's initial status is "Draft"

If you don't have the capability to send campaigns a sixth status is available: "Pending". This requires someone with the right authority to send this campaign


At the table view of the campaigns you get an overview of your campaigns

With auto responders you can send campaigns to subscribers after a specific time and after a certain even. There are three types of auto responders available:

  1. User based auto responder
  2. Time based auto responder
  3. Action based auto responder

1) User based auto responders

User (subscriber) base auto responders a triggered if an event to a specific subscriber occurs. A mail is sent only to a single subscriber if it matches the conditions and is in at least one list.

Currently supported events are

Create a new auto responder

Create a new auto responder campaign like a regular campaign and select the autorespnder tab in the Delivery box

Now you can define when the autoresponder get send after which event. Furthermore you can define some conditions which must be true before the campaign get sent.

A auto responder campaign must be active when the event occurs and the campaign get sent

In this example the autoresponder campaign get send 30 days after user signed up only if First Name is John AND Last Name is Doe

You can also check your custom field which you can define on the "Subscriber" tab in the settings.

Auto responders get triggered with the native wp_cron service.














2) Time based auto responders

To send a campaign with an interval (like every week or every two month) you need time based auto responders

3) Action based auto responders

Action based auto responders are usefull if you would like to send your latest post to your subscribers right after they get published.

You can send any post type including custom post types.

In this example an new campaign - based on the auto responder - is created after a new Post as been published but only if the post was published in any Category or with any Tag or as any Format which basically means every single post.

Please note that always 2 releases should get skipped. That means that the campaign doesn't get created until you have published the third post with the matching conditions.

You can use the {issue} tag anywhere in your auto responder campaign to count them. This number get increased once a new copy of the campaign has been created.

The counter at the bottom shows the amount of already published posts and is used to calculate the skipped property. You can check the reset counter checkboy and save the campaign to reset the number.

















Prepare your auto responder

This is how your autoresponder campaign can look like:

You notice many dynamic tas which get replaced when the campaign get sent.

A dynamic tag is wrapped in brackets like the other tags and start with the post type followed by an underscore and the content to display. After a colon can be a negative integer like -3 which represents the third latest entry of the selected post type.

You can also use absolute values like 23 to use the content from the post with the ID 23
relative tag and absolute tag explained

Some examples:


Instead of "post_" and "page_" you can use custom post types too

The Frontpage displays your newsletter as a "webversion". It provides a top bar with a link to your homepage, the title of the displayed campaign, a next and previous button to display the next or previous campaign (if exists), an optional share button and a button to close the frame.

With the share button users can share the newsletter via different social media services, bookmark services, via email or via link

Create a custom frontpage

You can create a custom frontpage and include it in your themefolder.

copy the single-newsletter.php file located at


to the root directory of your theme folder. Now you can modify the code and add additional stylesheets to the page.

The plugin will automatically choose this template to display the webversion of the newsletter


If you activate the plugin a new page "Newsletter" is created. This page handles subscribes and unsubscriptions.

This page must be linked on the settings page "Frontend"

This is the content of this page:

[newsletter_signup]Signup for the newsletter[newsletter_signup_form][/newsletter_signup]
[newsletter_confirm]Thanks for your interest![/newsletter_confirm]
[newsletter_unsubscribe]Do you really like to unsubscribe?[/newsletter_unsubscribe]

There are four shortcode in use:


The content of this shortcode is displayed if the user regular visits the page. By default it includes the [newsletter_signup_form] shortcode


This displays the signup form which can be defined on the settings page. You can add and "id" attribute to use a different form [newsletter_signup_form id="1"]


This content is displayed if the new subscriber confirms its email address and clicks on the link in the email. 


This content is displayed before the unsubscribe form is displayed. The unsubscribe form is a single email input field or only a button if the user clicks the unsubscribe ink from a campaigns newsletter. You can add ?unsubscribe to the URL to see this content

If your campaign is finished or currently progressing you are not able to edit it.

* Geodata is provided by

You can find small boxes  over the links which were clicked. More clicks means a higher percentage.

Tags are placeholder for your newsletter. You can set them anywhere in your newsletter template with the format {tagname}. Custom field tags are induvidual for each subscriber.

You can set alternative content with {tagname|alternative content} which will be uses if [tagname] is not defined. All unused tags will get removed in the final message

Check out the "Tags" Tab on the Settings page!

Dynamic Tags

A dynamic tag is wrapped in brackets like the other tags and start with the post type followed by an underscore and the content to display. After a colon can be a negative integer like -3 which represents the third latest entry of the selected post type.

You can also use absolute values like 23 to use the content from the post with the ID 23
relative tag and absolute tag explained

Some examples:


Instead of "post_" and "page_" you can use custom post types too

Reserved Tags

Following tags are reserved and cannot be used as custom tags:

{unsub}, {unsublink}, {webversion}, {webversionlink}, {forward}, {forwardlink}, {subject}, {preheader}, {headline}, {content}, {link}, {email}, {firstname}, {lastname}, {fullname}, {year}, {month}, {day}, {share}, {tweet}

MyMail Newsletter Plugin allows you to manage subscribers like other post types. Keep in mind that the data isn't public queryable cause of private data security

If you activate your plugin you'll find only the first and the last name field for the contacts. The users image is provided by

To add more custom field you have to open the "subscribers" tab on the newsletter settings page.

You can make each custom field required and it will be displayed on the subscription form on your website. Use the tag to use this data in your newsletter.

WordPress Users

If you add new users to WordPress the will get added to your subscribers. To prevent this uncheck all lists on the settings page



If you have a list of subscribers you can simple import them on the "Manage Subscribers" page.

Import Subscribers

You can either upload your CSV file or paste the content directly from Excel into thee textarea on the right

If you data has been uploaded to your server you get a raw preview of your contacts.


Only the first ten entries and the last one are shown

Choose a role for each column or simple ignore it if you don't need the data. You have to select at least the colum with the emailadresses.

You have to select at least one list in which you like to import the contacts. Choose the status and if the contacts get all autoresponder you have setup for the lists.

Make sure you have the permission to import your email addresses!

After the import has been finsihed you can see which emails are not imported.

Export Subscribers

You can export all of your subscribers into a CSV file. The file has to be prepared on your server and can take a while before it's accesable.

You can drag and drop the columns to define the order

Delete Subscribers

You can delete subscribers one by one or use this bulk delete option. Simple select which lists you would like to empty and click on the Delete Subscribers button

The MyMail Newsletter Plugin comes with a flexible template. To get more templates check out this page

You can upload more templates on the upload tab.


The subscribption form can be defined on the "Form" tab in the settings.

All forms are cached and comes default classes. Depending on your settings the form markup is this:

<form action="" method="post" class="mymail-form mymail-form-submit" id="mymail-form-X">
    <div class="mymail-form-info">
    <div class="mymail-email-wrapper">
        <label for="mymail-email-X">Email <span class="required">*</span></label><input id="mymail-email-X" name="userdata[email]" type="text" value="" class="input mymail-email required" tabindex="1">
    <div class="mymail-firstname-wrapper">
        <label for="mymail-firstname-X">First Name</label><input id="mymail-firstname-X" name="userdata[firstname]" type="text" value="" class="input mymail-firstname" tabindex="2">
    <div class="mymail-lastname-wrapper">
        <label for="mymail-lastname-X">Last Name</label><input id="mymail-lastname-X" name="userdata[lastname]" type="text" value="" class="input mymail-lastname" tabindex="3">
    <div class="mymail-custom-field-wrapper">
        <label for="mymail-custom-field-X">Custom Field</label><input id="mymail-custom-field-X" name="userdata[custom-field]" type="text" value="" class="input mymail-custom-field" tabindex="4">
    <div class="mymail-lists-wrapper">
            <li><label title="Description"><input class="mymail-list-wordpress-users" type="checkbox" name="lists[]" value="wordpress-users" checked> Wordpress Users
                <span class="mymail-list-description mymail-list-description-wordpress-users">Description</span>
            <li><label title=""><input class="mymail-list-2nd-list" type="checkbox" name="lists[]" value="2nd-list" checked> 2nd List</label></li>
    <div class="mymail-submit-wrapper form-submit">
        <input name="submit" type="submit" value="Subscribe" class="submit-button button" tabindex="5">
Depending on your settings the markup can look different. X is the ID of the form starting from 0.

There are three ways to embed the form:

  1. Use the [newsletter_signup_form id=X] shortcode
  2. Use mymail_form( $id = 0, $tabindex = 1, $echo = true, $classes = '' ); function in your code
  3. Use the included widgets

Preheaders are small phrases (up to 80 letters) which should help increasing your clickthrough rate. Many email clients display the first letters of an email in their preview area.

Preheaders are invisible in the normal email view and show up only in the preview pane of some clients


Outlook 2007 + 2010

Google Mail


Usefull resources

The Dashboard Widget gives you a quick overview of your recent campaigns and subscribers. The current user must have the capabilitiy to view the widget

MyMail is internationalized. Currently are 8 languages included:

  1. English
  2. German
  3. French (by Elyazalée
  4. Italian (by Fabio Duranti
  5. Slovakia (by Peter Illias)
  6. Croatian
  7. Spanish (Jordi Lopez
  8. Dutch (Dennis de Groot and Rogier Lohuis)

Participate to improve translations or add your own language to MyMail

Help translating the plugin or add your language in the next update!

Sign up as a translator at


1. Insert your email address and name

2. Click the link in the confirmation mail

3. After you have been confirmed you can start translating

Please check out the FAQ page of poeditor as well!

All of your campaigns are sent via a cronjob. There are two cron services available:


This is the cron service which is built right into WordPress. If you choose this option you don't have to set up anything else to get your campaign sent. You only have to visit your blog (backend or frontend) regularly to trigger the cron.

Read more about the WordPress cron service here

This type of service is not reccomended for many subscribers!

Real cron service

Much better is a real cron service offerd by your hosting provider.

You have to call a specific URL which looks like:


You can find your URL in the Newsletter Settings page within the "Cron" tab


You can trigger the cron in three ways:
A) open the mentioned link in a browser - which refreshes every x minutes and triggers the job for you
B) let a third part site trigger (which opens the page like your did) which are sometimes free.
C) Tell your provider or host to trigger them for you (same thing but technically slightly different)

There are also some free service out there:

Auto responders  use always the wp_cron service!

All functions are prepended with "mymail_"

mymail_option( $option, $fallback = NULL )

returns option $option and fallback if $option isnt set.

mymail_send( $headline, $content, $to = '', $replace = array(), $attachments = array(), $template = 'notification.html' )

send a notification using the current template and the notification.html file. if $to is empty it will get sent to the current user. User $replace to replace tags in your message

mymail_form( $id = 0, $tabindex = 1, $echo = true, $classes = '' )

displays the form with id of $id. returns it if $echo = false. starts first element with $tabindex and add extra $classes to the form element

mymail_subscribe( $email, $userdata = array(), $lists = array(), $double_opt_in = NULL, $overwrite = true, $mergelists = NULL, $template = 'notification.html' )

Subscribes a new user with $email to $lists. $userdata is an array of key-value pairs like 'firstname' 'lastname' and custom fields. If $double_opt_in isn't set explicit the option from the settings is used.

mymail_unsubscribe( $email_hash_id, $campaign_id = NULL, $logit = true )

unsubscribes a user.$email_hash_id can be the email, the hash or the id of the user, $campaign_id can be the id of the campaign to register

mymail_get_campaigns( $args = '' )

returns all campaigns. similar to native get_posts

mymail_get_paused_campaigns( $args = '' )

returns all paused campaigns. similar to native get_posts

mymail_get_queued_campaigns( $args = '' )

returns all queued campaigns. similar to native get_posts

mymail_get_active_campaigns( $args = '' )

returns all active campaigns. similar to native get_posts

mymail_get_draft_campaigns( $args = '' )

returns all draft campaigns. similar to native get_posts

mymail_get_pending_campaigns( $args = '' )

returns all pending campaigns. similar to native get_posts

mymail_get_finished_campaigns( $args = '' )

returns all finished campaigns. similar to native get_posts

Here are some useful snippets to extend the functionality of MyMail:

if you have problems with mod_secure extension on your server add this to your functions.php

//remove the http://
function my_mymail_replace_link($link){
	return str_replace( array('http://', 'https://'), '', $link);
add_filter('mymail_replace_link', 'my_mymail_replace_link');

//add the http:/
function my_mymail_click_target($target){
	return strpos($target, 'http') !== 0 ? 'http://'.$target : $target;
add_filter('mymail_click_target', 'my_mymail_click_target');

adding a custom style to every mail

function mystyle_function($color = 'black'){
	return 'a{color:'.$color.' !important}';

mymail_add_style('mystyle_function', 'red');

adding a dynamic tags

function mytag_function($option, $fallback){
	return 'My Tag: Option: '.$option."; Fallback: ".$fallback;

mymail_add_tag('mytag', 'mytag_function');

use: {mytag:option|fallback}

new error on form submit

function mymail_submit_errors($errors){
	$errors[] = 'new error';
	return  $errors;

add_filter( 'mymail_submit_errors', 'mymail_submit_errors' );

adding additional form elements

function mymail_form_fields($fields, $formid, $form){
	$pos = count($fields) - 1;
	$fields = array_slice($fields, 0, $pos, true) +
	array("fieldID" => "Fieldcontent") +
	array_slice($fields, $pos, count($fields) - 1, true) ;
	return $fields;

add_filter( 'mymail_form_fields', 'mymail_form_fields', 10, 3 );

Version 1.5.4 (06/03/2013)

new – time base autoresponder
option to change charset and encoding
optimized translations
added – forms now get a “loading” classes if the form is progressing
added – option to define the label of each field of every form
option to hide the asterisk of required fields in forms
fixed – form throws error if custom function doesn’t return a value
fixed – issue with the stats on the dashboard widget

Version 1.5.3 (05/16/2013)

auto responder now have full statistics
added - convert single line texts to images with a click
improved update class for better performance
updated some geo location files
fixed - spelling issue in text after widget
small bug fixes

Version 1.5.2 (05/06/2013)

prepared for an upcoming plugin - stay tuned!
new Twitter integration for Twitter API 1.1 - requires access credentials
bug fixes

Version 1.5.1 (04/12/2013)

fixes some Call-time pass-by-reference errors

Version 1.5.0 (04/11/2013)

works now on network sites
better import for WordPress users
added - option to merge imported contacts with existing ones
added - bounce server test
added - import WordPress users via Manage subscribers page
removed - auto import of WordPress User on plugin activation
option to define notification template for forms
option to update geo database
option to upload custom geo database
lot of small bug fixes

Version 1.4.1 (03/12/2013)

added - allow users to sign up on new comment
added - allow users to sign up on register
added subscribers avatar to subscribers list
updated PHPMailer to verison 5.2.4
option to add vCard to confirmation mails
send test to multiple receivers with comma separated list
new text "Newslettersignup"
bug fixes

Version 1.4.0 (03/01/2013)

NEW dynamic post tags
NEW automatically send your latest post, pages or custom post types to your subscribers with auto responders
updated templates
new improved stats on the campaign detail page for each subscriber with opens and clicks
added – better mobile preview
added – insert image from URL
added – HTML as output form on the export tab
added – option to duplicate modules
improved sending queue – now uses up to 60% less resources
improved cron window with more info
fixed – problems when importing and exporting with some special characters
fixed – campaign stopped if subscriber caused the error
fixed – some CSS issues in gecko browsers

Version 1.3.6 (01/10/2013)

updated included template to version 2.0:
added more social icons
updated section for editbar: buttons
added – welcome page
removed – my first campaign
added – option for merge lists via settings

Version 1.3.5 (01/23/2013)

added - HTML form embedding
added - redirect after submit to any URL
added - checkboxes for custom tags
updated language. now available in:
fixed - label of firstname wasn't displayed in some cases
fixed - images with special characters are not embedded
fixed - bug with Amazon SES extension

Version 1.3.4 (01/10/2013)

added - pending tab in manage subscribers for unconfirmed users
templates are now located in the upload directory
added - option to uses a custom country/city database
added - option to resend confirmation notice after a defined time
fixed - confirmation mails doesn't effect limits

Version 1.3.3 (12/31/2012)

Completely rewritten subscriber management with improved upload, export and bulk deletion
removed - old import/export section
added - new capability 'manage subscribers' to give access to the new page
added - option to pre-fill known user data in forms if user is logged in
added - forms in widgets now have a 'mymail-in-widget' class
added - optional text before and after the form in widgets
performance improvements
small bug fixes
fixed - inline labels are not visible in IE <= 9

Version 1.3.2 (12/19/2012)

Please finish all campaigns before update!
added - support for the new Media uploader in WP 3.5
improved Editbar:
	better preview of posts, images and links
	links includes now all other pages too
	double click on the element you like to edit
	double click on an image in the editbar to insert it instantly
campaigns now get paused if an error occurs during sending
fixed - subscribers falsely get marked as "error"
fixed - missing HTML tab in the editbar
fixed - conflicts
fixed - autoresponder not triggered if duplicated
a lot of bug fixes and performance improvements

Version 1.3.1 (12/12/2012)

Better DKIM setup
Better SPF help
Fully tested in Wordpress 3.5
optimized delivery method page
added - option to enable pagination on frontpage
added - bulk delete of subscribers
added - track subscribers IP and signup time (optional)
added - SSL support for bounce mail server (POP3)
added - "List-Unsubscribe" header with link to unsubscribe page
added - Gmail delivery method
added - optional delay between mails in campaigns
fixed - empty Form CSS now prevents enqueuing form CSS
fixed - required asterix always show up for names
fixed - links didn't work in some cases in Outlook 2007
many bug fixes

Version 1.3.0 (11/27/2012)

Track vistors cities
added - {forwad} tag to allow forwarding your newsletter
added - inline label for forms (optional)
images from custom templates in the template directory are now saved with relative path
added - better feedback for saving templates on the templates page
fixed - invalid emails are getting imported
fixed - images are always embedded in notification mails

Version 1.2.2 (11/15/2012)

MyMail Template updated to 1.3
added - embed your form on another site
added - new capability "manage capabilities"
fixed - Autoresponder not sent if limit reached
fixed - more loadHTML issues
small bug fixes and performance improvements

Version 1.2.1 (10/28/2012)

added - better support for custom templates
added - new option: email limit for a certain period
better forms now works with JS disabled
prefix for import and template page
improved post and image list
localized number formatting
fixed - some "Call time passed by reference errors"
fixed - bug in wp_mail
fixed - bulk import with "wrong" line breaks
fixed - auto responders can get activated without permission
small bug fixes

Version 1.2.0 (10/15/2012)

new - auto responders
webversion link now working in test mails
Dashboard widget settings removed - now only through capabilities
List descriptions are now included in the form
WordPress system mails now uses notification template (optional)
loading graphic updated for retina support

Version 1.1.1 (10/08/2012)

custom color schemas can now get deleted
better custom color handling for templates
active campaigns are not editable anymore (must be paused)
campaign statistics for active campaigns
added - texts tab, better text management in settings page
fixed - Bulk import breaks in some cases
fixed - wrong click count if cron was running

Version 1.1.0 (10/04/2012)

new - capabilities
new - Bulk Import for large subscriber lists
performance improvements
lists in forms now optional drop downs
change value of "First Name", "Last Name" via settings panel
improved custom fields with support for textfields, drop downs or radio buttons
fixed - scroll down to the bottom on frontpage not possible

Version 1.0 (09/24/2012)

Initial Release

I've used the following images, icons or other files as listed.

Files are maybe not included because of the license

Once again, thank you so much for purchasing this plugin. As I said at the beginning, I'd be glad to help you if you have any questions relating to this theme. No guarantees, but I'll do my best to assist. If you have a more general question relating to the themes on ThemeForest, you might consider visiting the forums and asking your question in the "Item Discussion" section.