http://=
codex.wordpress.org/Post_to_your_blog_using_email
WordPress =
can be configured to use e-mail to post to a blog. To enable this =
functionality, you need to:
Create a dedicated e-mail account to be =
used solely for posting to your blog, Configure WordPress to access that =
account, and 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 Weblog Client =
— a program specifically designed to send posts via email. =
Limitations: – Standard =
characters in the object – Plain text only
Setting Up Post via E-mailStep 1 – Create an e-mail =
accountLog in to WordPress with the =
administration login you use to administer your WordPress blog. =
Go to Settings > Writing. 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. =
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 accountWhen 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 110.) If your =
mail server requires an SSL (secure) connection, precede your mail =
server address with ssl://, e.g. =
ssl://pop.example.com. 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., user@example.com).
Choose the default category that will be =
assigned to posts submitted via e-mail. Click Update Options .
NOTE: If you are using the Administration > Settings > Writing > Post via =
e-mail section to 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/ins=
talldir/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:
<iframe =
src=3D"http://yourblogdomain/wordpressinstalldir/wp-mail.php=
" name=3D"mailiframe" =
width=3D"0" height=3D"0" frameborder=3D"0" =
scrolling=3D"no" =
title=3D""></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=3D"http://yourblogdomain/wordpressinstalldir/wp-content/plugins=
/postie/get_mail.php?Submit=3DRun+Postie" name=3D"mailiframe" width=3D"0" =
height=3D"0" frameborder=3D"0" =
scrolling=3D"no" title=3D""> </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. =
Action-based =
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 =3D =
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.
WP-Cron Plugin Activation
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
Cron Job Activation
Set up a UNIX =
cron job to have your blog periodically view http://example.com/ins=
talldir/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/ins=
talldir/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 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 and pycron. Consult these =
projects’ documentation for further information. =
Procmail Activation
If your server =
uses procmail, a simple =
.procmailrc in =
the blogmailaccounts home directory will be sufficient: =
Shell=3D/bin/shMAILDIR=3D$HOME/.maildir/DEFAULT=3D$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.
.qmail Activation
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. =
Email Format
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.
Testing
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/ins=
talldir/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 Review’. =
Troubleshooting
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, =
open
wp-mail.php
and search for: =
$count =3D =
$pop3->login(get_settings(‘mailserver_login’), =
get_settings(‘mailserver_pass’));
Change the lines following it to something like: =
if (0 =3D=3D =
$count) : echo "There does not seem to be any =
new mail. <br/>\n"; echo "count =3D $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. =
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:
Postie supports 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.
Subject line
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: [1] This is a Test! would be posted as "This is a =
Test!", filed under General.
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.