This plugin hasn’t been tested with the latest 3 major releases of WordPress. It may no longer be maintained or supported and may have compatibility issues when used with more recent versions of WordPress.

Post By Email


Warning: This plugin is currently in beta! Use at your own risk and please report any bugs, either on the WordPress Support forums or via the Github issues page.

Any new messages sent to the configured email address will be posted to the blog. This plugin replaces the functionality that used to live in WordPress core.

Once an email has been successfully posted to the blog, it can either be marked as read (IMAP servers only) or deleted from the mailbox.

Updates on the project can be found on the Make WordPress Core blog.


  • Supports IMAP or POP3 servers, with or without SSL
  • Optional PIN-based authentication guards against email spoofing
  • Uses WordPress’s built-in roles to manage which users can post
  • Set categories, tags and custom taxonomies by including shortcodes in your email
  • Email attachments will automatically be added to the post’s gallery
  • Emails from unauthorized users can be either set as pending or discarded

Post Authors and Security

The “From” address is matched to WordPress users in the database to determine the post’s author. If the author doesn’t have an account or isn’t allowed to publish posts, the post status will be set to “pending”.

By default, any users in the Author, Editor or Administrator roles are able to publish posts. Use the Users menu item in the admin dashboard to view and manage which users have this capability. For more information on the WordPress permissions system, see Codex: Roles and Capabilities.


By default, emailed posts will be placed in the default category configured in the settings.

You can also set the categories, tags and custom taxonomy terms on your posts by including shortcodes in your email. These should be space-separated. Use slugs for tags (and non-hierarchical taxonomies) and either slugs or IDs for categories (/ hierarchical taxonomies). Terms that do not yet exist will be created. Examples:

Categories: Use either slugs or IDs.
[category posted-by-email another-category]
[category 14]

Tags: Use slugs.
[tag cool-stuff]

Custom Taxonomies: Use slugs for non-hierarchical taxonomies, and IDs for hierarchical.
[custom-taxonomy-name thing1 thing2]
[another-custom-taxonomy 2 3 5]


Any files attached to an email will be uploaded to the Media Library and added to the post as a gallery. You can specify gallery options, or its location within the post, by including a gallery shortcode in your email. If no gallery shortcode exists, it will be added to the end of the post.


Automated Tests

Like WordPress Core, this plugin includes automated unit tests written in PHPUnit.

To run the unit tests:

  1. Set up the WordPress testing library as described in Handbook: Automated Testing. You can also do this using WP-CLI.
  2. From the plugin directory, run WP_TESTS_DIR=/path/to/WordPress/test/install phpunit

Manual Testing

  1. Set up a test email address (services such as Gmail work great for this) and enable IMAP or POP3 access. (Refer to Installation for detailed instructions.)
  2. Verify that you are using the correct mailbox settings by using a third-party email client, such as Outlook or OSX, to connect to your test mailbox.
  3. Enter those settings into the Post By Email settings and save them.
  4. Navigate to the “Activity Log” tab and press the “Check Now” button. When the page reloads, you should see a new entry in the log file describing the results of the mail check.

Caveat: There is sometimes a delay between sending an email and having it show up in the mailbox, especially with POP3. If you’re using IMAP, you can connect using a third-party mail client to verify that messages have been received, then mark them as unread so Post By Email will pick them up.

Reporting Bugs

Before reporting a bug, make sure you’ve updated the plugin to the latest version.

Then, provide as much of the following information as possible:

  1. WordPress version (e.g. 3.6.x).
  2. Plugin version (e.g. 1.0.4).
  3. PHP version (e.g. 5.2.x or 5.3.x).
  4. Your mailbox settings (URL, protocol, port and whether SSL is enabled; not your login and password).
  5. Any error messages displayed (it might help to enable WP_DEBUG in your wp-config.php).
  6. If the issue is related to a specific email, the full email, including headers. Feel free to replace any personal information with dummy text (such as “”). This link has instructions for viewing full message headers in Gmail, Outlook and Yahoo.


  • Main settings page
  • The activity log


  1. See Installing Plugins.
  2. Set up an email address that will be used specifically to receive messages for your blog.
  3. Make sure your email service is configured to allow external connections via POP3 or IMAP.
  4. Activate the plugin through the ‘Plugins’ menu.
  5. Configure mailbox information under Tools->Post By Email.

Instructions for specific email services

  • Gmail: This page will walk you through enabling IMAP or POP3 access. When prompted to select an email client for configuration instructions, select “Other” to view the settings.

  • Yahoo! Mail: Use these IMAP settings; IMAP access should be enabled by default. Mail Plus subscribers can also use these POP3 settings.

  • (Hotmail) settings and instructions can be found on this page.


What timestamp will be used for posts?

Posts will be backdated to use the date and time they were received by the mailserver, NOT the time they were imported by the plugin.

Will messages show up on my blog as soon as I send them?

No, emails are not “forwarded” to your blog. Just like any third-party mail client, Post By Email has to check for new messages, and will only do this once per hour (or when you click the “Check Now” button in the settings). In addition, because of how WordPress’ task scheduling (wp_cron) works, this check will only be triggered when a page on your blog has been loaded. There is also sometimes a delay between when messages are sent and when they show up in the mailbox, especially with POP3 access.

I found a bug!

Oh no! I would like to know as much as possible about it so that I can fix it. For the information to include with a bug report, please see the Reporting Bugs section in Other Notes.

What does the error “Bad tagged response” mean?

This probably means you’re trying to connect to a POP3 server over the IMAP port, or vice versa. Double-check your server URL, protocol and port number and try again.


September 3, 2016
Great idea, simple to install and function works great BUT: it cannot import images with the email text. I haven’t tried with other media or attachments, what’s the use if it can’t do the simple image import as well as the text. Fix that and you’ve got a winner. Would nice to be able to adjust the refresh time as well but not as important as the lack of image support.
Read all 16 reviews

Contributors & Developers

“Post By Email” is open source software. The following people have contributed to this plugin.


Translate “Post By Email” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.



  • Fixed bug where unicode characters weren’t getting encoded correctly, and were truncating the post.
  • Fixed bug where changing some settings on the admin screen didn’t enable the “Save Changes” button.


  • Added screenshots, expanded Readme and contextual help.
  • Added support for user-included gallery shortcode (allows use of WP’s gallery options).
  • Added warning when checking email before changed settings have been saved.
  • Added more unit tests.
  • Code style fixes as per
  • Fixed


  • Added option to choose what to do when message senders don’t match WP users (discard or set to pending).
  • Added shortcode support for custom taxonomy terms.
  • Added support for attachments.
  • Fixed some bugs in PHP 5.2.
  • Fixed bugs with the admin notices and default options.
  • Switched manual check to a trigger for do_action and disabled wp-mail.php entirely.


  • Support shortcodes to specify categories and tags.
  • Added PIN-based authentication.


  • Added tabs and additional options to options panel.
  • Admin banners for notices & errors.
  • Plugin is now disabled until user has configured the settings.


  • Added SSL and IMAP support.
  • Added option to mark emails “read” instead of deleting them after processing.
  • Added support for HTML formatted emails.
  • Refactored check_email function.
  • Fixed a bug that caused the log file to behave inconsistently.


  • Better logging, no more wp_die().
  • When email is checked manually, reschedule the next wp_cron check to an hour later.


  • Use wp_cron to schedule hourly mail checks.


  • Refactored Horde includes to autoload class files as needed.


  • Added workarounds to support PHP 5.2.
  • Moved admin functions into a separate class.


  • Using Horde IMAP library instead of old SquirrelMail class (still assumes POP3 server). This fixes a bug where post content was blank, and also lays some groundwork for later SSL/IMAP support.


  • Initial version (straight port from core)