Codex tools: Log in
Languages: English • 日本語 • (Add your language)
WordPress can be configured to use e-mail to post to a blog through the use of plugins or by configuring your WordPress installation yourself.
To enable this functionality, you need to:
You can blog by e-mail using most standard e-mail software programs or a Weblog Client -- a program specifically designed to send posts via email.
Limitations: - Standard characters in the object - Plain text only
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:
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.)
An alternative to manual browser activation is to add the following iframe code to the footer of your blog:
<iframe src="http://yourblogdomain/wordpressinstalldir/wp-mail.php" name="mailiframe" width="0" height="0" frameborder="0" scrolling="no" title=""></iframe>
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 paragraph).
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 for WordPress, use the following iframe code, which will call Postie's check mail commands:
<iframe src="http://yourblogdomain/wordpressinstalldir/wp-content/plugins/postie/get_mail.php?Submit=Run+Postie" name="mailiframe" width="0" height="0" frameborder="0" scrolling="no" title=""> </iframe>
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.
functions.php Activation An alternative to calling the iframe on every page load (detailed above), or setting up a cron job (details below), you can add an action to your active theme's functions.php file. This will check for mail every 15 minutes and does not add any HTML to your theme.
add_action('shutdown', 'retrieve_post_via_mail');
function retrieve_post_via_mail() {
flush(); // Display the page before the mail fetching begins
if(get_transient('retrieve_post_via_mail')) {
return; // The mail has been checked recently; don't check again
} else { // The mail has not been checked in more than 15 minutes
$mail = wp_remote_get(get_bloginfo('wpurl').'/wp-mail.php');
if(!is_wp_error($mail)) { // If retrieve succeeded
set_transient('retrieve_post_via_mail', 1, 60 * 15); // check again in 15 minutes.
} else {
set_transient('retrieve_post_via_mail', 1, 60 * 5); // check again in 5 minutes; we don't want to overload the server
}
}
}
This method is good for users who would like to avoid using cron jobs, which are configured on the server. Unlike cron jobs, this process will only run when pages on the blog are loaded. Cron jobs run independent of site traffic.
Download, install, and activate the WP-Cron Plugin. It will work in the background without user intervention to update your site about every 15 minutes.
NOTE: WP-CRON is no longer supported by the author
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:
Note to Windows Users: There are similar programs to cron available if your host runs Windows. For example, VisualCron, Cron for Windows and pycron. Consult these projects' documentation for further information.
If your server uses procmail, a simple .procmailrc in the blogmailaccounts home directory will be sufficient:
Shell=/bin/sh
MAILDIR=$HOME/.maildir/
DEFAULT=$MAILDIR
:0
{
:0Wc
./
:0
| wget -N http://example.com/installdir/wp-mail.php
}
This could be more specific, such as capturing certain subject expressions. Check procmail for more information.
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 wp-mail:
#!/bin/sh /bin/sh -c "sleep 5; /path/to/php /path/to/your/blog/wp-mail.php > /dev/null" &
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 mailbox name:
|/path/to/your/root/directory/wp-mail
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 receive the following error messages, follow the procedures below.
Error Message:Ooops POP3: premature NOOP OK, NOT an RFC 1939 Compliant server
For this error, open wp-includes/class-pop3.php and change this line:
if($this->RFC1939) {
to this:
if(!$this->RFC1939) {
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 was retrieved.
If you're feeling adventuresome, openwp-mail.phpand search for:
$count = $pop3->login(get_settings('mailserver_login'), get_settings('mailserver_pass'));
Change the lines following it to something like:
if (0 == $count) :
echo "There does not seem to be any new mail. <br/>\n";
echo "count = $count<br/> \n";
echo "$pop3->ERROR \n";
exit;
endif;
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.
By default, WordPress Multisite has this feature disabled. You need to enable it first before the options will appear. Add the following code to your wp-config.php file.
define( 'POST_BY_EMAIL', true );
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.
One replacement file for the original wp-mail.php file has been created:
The following enhancements may be made to your wp-mail.php so your e-mail will be translated into metadata for your post:
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.