WordPress can be configured to use e-mail to post to a blog. To enable this
functionality, you need to:
1. Create a dedicated e-mail account to be used solely for posting to
2. Configure WordPress to access that account, and
3. Configure WordPress to publish messages from the e-mail account
You can blog by e-mail using most standard e-mail software programs or a
specifically designed to send posts via email.
Setting Up Post via E-mail
Step 1 – Create an e-mail account
1. Log in to WordPress with the administration login you use to
administer your WordPress blog.
2. Go to Options > Writing.
3. Read the instructions under Post via e-mail at the bottom of the
page. At the end of these instructions, WordPress will suggest three random
strings of numbers you may want to use for the login name of the new e-mail
account you’ll create.
4. Create a new e-mail account on your web host’s mail server or a
separate e-mail server, using one of the suggested numeric strings (or your
own secret word) for the username (also called a “login name"). A mail
server receives e-mails on your behalf and stores them for retrieval. Do not
use public, free e-mail servers like Yahoo, Hotmail, etc., for this account.
Note: It is strongly recommended that you use a “secret" address -
that is, an e-mail account name that is very difficult to guess and known
only to you, such as those suggested by WordPress. Any e-mail sent to this
address will automatically be posted to your blog. Be aware, however, that
some e-mail servers do not allow numbers-only e-mail accounts or accounts
starting with a number. Please check with your web host.
Step 2 – Configure WordPress to access your new account
1. When you are done creating the new e-mail account , return to the
Writing Options panel and fill in the name of the mail server and port
number your web hosting provider uses. (If you don’t know these, refer to
your web hosting provider’s FAQ or manual pages. The port number is usually
2. Next, enter the login name and password for your new e-mail account
NOTE: In the Login Name field, use the full e-mail address (e.g.,
3. Choose the default category that will be assigned to posts submitted
4. Click Update Options .
NOTE: If you are using the Administration
specify the e-mail address before you’ve actually created the e-mail
account, remember to use the same login and password when you create the
account as you specified in the section.
Step 3 – Publish Your E-mail Posts
You’ve created the new e-mail account and configured your WordPress blog to
accept e-mails from that account, but you still need to set up WordPress to
publish those e-mail messages on your blog. Do one of the following:
Manual Browser Activation
Go to the following link http://example.com/installdir/wp-mail.php
immediately after you send an e-mail to your new e-mail account. (Note: You
must do this every time you send a new post.)
Automated Browser Activation
An alternative to manual browser activation is to add the following iframe
code to the footer of your blog:
width="0″ height="0″ frameborder="0″ scrolling="no" title="">
Edit the above line of code so that it refers to the location of your
wp-mail.php file. Add this line of code to the footer.php file in the
directory for whatever theme you are using (don’t include it within an HTML
You may have to refresh your blog to see the new post. New users may find
this method the most helpful.
If you’re using or would like to use the Postie Plugin
iframe code, which will call Postie’s check mail commands:
frameborder="0″ scrolling="no" title="">
Add this code to your footer, and the next time anyone goes to your blog,
your new emails will be automatically posted, so you need to do nothing but
send them. You may have to refresh the blog to see the changes.
WP-Cron Plugin Activation
Download, install, and activate the WP-Cron
without user intervention to update your site about every 15 minutes.
Cron Job Activation
Set up a UNIX cron job to have your blog periodically view
http://example.com/installdir/wp-mail.php using a command-line HTTP agent
like wget, curl or GET. The command to execute will look like:
wget -N http://example.com/installdir/wp-mail.php
If you use a different program than wget, substitute that program and its
arguments for wget in this line.
Note: Another possibility is to run “php /full/path/to/wp-mail.php" in a
cronjob. This will run the php-script using php, without the need for an
extra program to run. (You are more likely authorized to run php than wget.)
For more information about setting up a cron job, see:
* Intro To Cron Jobs
* Automating tasks with cron services at USAIL
* Your hosting provider’s FAQ or manual pages
Note to Windows Users: There are similar programs to cron available if your
host runs Windows. For example, VisualCron
Cron for Windows
for further information.
If your server uses procmail
.procmailrc in the blogmailaccounts home directory will be sufficient:
| wget -N http://example.com/installdir/wp-mail.php
This could be more specific, such as capturing certain subject expressions.
If your server uses qmail to process e-mail, you may be able to use it to
call wp-mail.php whenever an e-mail message is delivered. To do this, first
create a small shell script to call wp-mail.php. You could call the file
/bin/sh -c “sleep 5; /path/to/php /path/to/your/blog/wp-mail.php >
The sleep command causes a 5-second delay to allow qmail to finish
processing the message before wp-mail.php is called. Note that the ampersand
on the end of the line is required. The above script should go in your root
directory, and the execute bit should be set (chmod 700). For debugging
purposes, you could change /dev/null to a filename to save the output
generated by wp-mail.php.
Then all you need to do create/modify the appropriate .qmail file to call
your shell script. Add the following line to the .qmail file for your
See your ISP’s documentation for use of .qmail files. Naming conventions may
vary for different ISPs.
WordPress will use the Subject line of your email for the title of the post,
and all body of the email will be used as the content of the post, with
common HTML tags stripped. WordPress will file the post under whichever
category is selected for “Usual Category" in Step 1, and will use Site Admin
as the poster.
Posting by email does not support attachments and any attachments sent with
the email will appear in their raw form in the blog post.
To test your configuration, simply send an e-mail to
yournewaccount@yourmaildomain (or to user@yourmaildomain if you used the
.qmail forwarding setup). Then do the following:
* If you have no automated system set up, simply view
http://example.com/installdir/wp-mail.php in your browser. The script should
tell you that it found an e-mail, and print details of the post it made.
Then view your blog again to see your email posted.
* If you are using an iframe code in your footer, refresh your browser
to see the new post.
* If you are using WP-Cron, simply wait fifteen or twenty minutes.
* If you have a cron job running, wait until the next time it’s
scheduled to run (or temporarily edit the cron job to make it run sooner).
If you run tail -f /var/log/cron in a terminal, you’ll be able to see the
job create its log entry when it’s finished running. When that happens, just
view the site in your web browser to see your email posted.
* Your email may be recorded with a post status of ‘Pending Review’
rather than ‘Published’. If the status is ‘Pending Review’, then the post
will be visible in the Dashboard but will not be visible in the Blog. By
default, wp-mail.php will validate the sending email address against the
email addresses for authorized users. If the email address is found, the
post status will be ‘Published’, otherwise the status will be ‘Pending
If you receive the following error messages, follow the procedures below.
Ooops POP3: premature NOOP OK, NOT an RFC 1939 Compliant server
For this error, open wp-includes/class-pop3.php and change this line:
Note the exclamation point.
Error Message: There does not seem to be any new mail
This error is a bit of a misnomer – the test just checks to see if anything
If you’re feeling adventuresome, open
and search for:
$count = $pop3->login(get_settings(‘mailserver_login’),
Change the lines following it to something like:
if (0 == $count) :
echo “There does not seem to be any new mail.
echo “count = $count
echo “$pop3->ERROR \n";
You’ll then be presented with a more informative message.
The e-mail server may be refusing connections that attempt to provide an
unencrypted password – like POP3. If your webserver and e-mail server are on
the same physical computer, you can specify localhost or 127.0.0.1 as the
mail server. That traffic is assumed to be OK without encryption because it
never traveled across the network.
Extensions and Add-ons
There are several add-ons and hacks that will extend the capabilities of
posting by e-mail with WordPress. Some of these may involve changing the
core files, so do it carefully and make backups.
Enhanced Functionality Hack
One replacement file for the original wp-mail.php file has been created:
posting to categories, automatic removal of email signatures, POP3/IMAL
(+SSL) and more.
Hack E-mail Format
The following enhancements may be made to your wp-mail.php so your e-mail
will be translated into metadata for your post:
Sender’s e-mail address
The enhanced wp-mail.php looks up the email address you send from in
its user database. If there is a match with any user there, it files the
post under that user. If there is no match, it drops the e-mail and does not
create a post in the blog. (Great for security and spam prevention.) It is
set by the From field.
If [n] is present anywhere in the subject line of your email, the
e-mail will be filed under the category numbered n. Otherwise, it will be
posted under whichever category is selected for “Usual Category" in Step 1.
Example:  This is a Test! would be posted as “This is a Test!", filed
Blog By Email From Yahoo! Mail, Gmail and Hotmail
By default, most web-based email clients send messages in HTML formatting,
which WordPress’s blog-by-email feature filters out.
To get around this, you must select “plain text" before sending.
In Yahoo! Mail, the button for switching to plain text is just to the right
of the SUBJECT field. In Gmail a similar button is located at the right end
of the text formatting tool bar. Hotmail’s is found next to the SPELL CHECK
button in the email action bar which is located above the email message.