WP-keitai-mail Plugin v. 1.0

Finally got around to writing some kind of doc for my mail posting script for WordPress. And I can therefore finally release it for the world to use and enjoy.

Please welcome a new member in the WP plugin & hack family: wp-keitaimail v. 1.0b!

Actually, it is not technically a plugin, nor a hack, rather a standalone script that interfaces with WP to let you post entries to your blog via Email.
The name ‘keitai’ simply means ‘cell phone’ in Japanese… This script might as well have been called wp-cellphone-mail, I just liked the sound of ‘keitai’.

You can see a working demo on the right-hand side of this blog where it powers the “keitai log”. I have been using it for nearly a month now and it should be really stable albeit a tad complicated to set up (see below).

A quick roundabouts of the current features:

  • works as a script executed on email reception (unlike WP’s built-in feature), which means you do not have to run a cron job and your posts appear instantaneously on your blog.
  • handles jpeg pictures, will automatically create a thumbnail if they are too big and insert all necessary code in your post.
  • can be run on a separate machine from your WP install: it uses xmlrpc to post the entry and can be set to use ftp to upload the picture files.
  • can handle as many blogs and authors as you want. For each email account you can customize any aspect of the posts (image formatting, posting category etc). For example, you can easily set up the script to let 5 authors post to your blog with each one under a different category.

Now for the bad news:
This script is not trivial to set up. I have tried to include very detailed instructions that should supposedly be enough for even non technical-minded people. But hooking up the script to the email address can be somewhat complicated, and more importantly, it heavily depends on each hosting solution… which makes it quite hard to document.
Overall, you should be fine if you have ONE of the following:

  • A “mail forward” feature in your server control panel (especially if the control panel in question uses the very common ‘cpanel’ solution) that lets you forward mails to a script (it usually does).
  • OR

  • a file entitled .procmailrc in your server root (meaning your mail server uses procmail).
  • OR

  • an Exim recipe file. However, you will need to know how to edit it (or look it up online, it’s not that hard), since I haven’t had time to write instructions for Exim.

If you think you have one of these, check out the full instructions in keitai-prefs.php for details on hooking the script and set it to use your blog. I tried to be as clear as possible, but if you run into any problems using them, please let me know. You do not have to be a programmer or know anything about PHP to use this script, however, it is probably a good idea to hold on for now if you are not comfortable editing a settings file manually and tweaking around your server settings.

Hopefully, next release (date very much unknown) will make a lot of this easier.

In the meantime, if you wanna use this wonderful little toy, just download the archive here. Unzip it, edit the keitai-prefs.php file, following the detailed instructions it contains and upload the whole lot to your server. The script doesn’t need to be inside your web root (somewhere inside the ‘www’ or ‘public_html’ folders) since it is not accessed through the web, actually, it is preferable if it is not.

Among the features I plan to add for an hypothetical 1.2 version are:

  • Simpler interface to edit the script preferences
  • POP3 support (if you want to use it like WP’s built in script).
  • Password protection for posting.
  • Access to post settings through email commands (e.g. you could choose the category to post it to).
  • Support for more media types (movies, other graphic formats).
  • Support for GPS coordinates.
  • Full kanji support. Although this seems to be problem with the xmlrpc lib, the script has troubles with emails containing kanjis as of now. YMMV though.
  • as well as:

  • Support for EXIF data
  • Better cleaning of content: remove unnecessary new lines etc. (allow textile parsing?)

All that depending on the level of interest and the time I will be able to spend on it (not much for now). If you’d like to see other features or are having issue getting the script to work correctly, please let me know.


Filed under: WordPress


  1. Damn. And I just got back from the land of keitai. I had written something similar in perl, using procmail and xmlrpc, and it worked fine with MT but not with WP. Oh well. Maybe in another year or so.

  2. Hi Jeff,
    Actually, I made this as a replacement for the MT script I had been using (also perl+procmail+xmlrpc… seems like there was lots of duplicated effort here 😉 I based mine off a friend’s code, though).
    This one was entirely redone from scratch in PHP, as I quite loathe Perl personally, and should benefit from more and more features as I get to add them…
    It’s not limited exclusively for keitai use though: it can make for a convenient way to upload pictures to your websites for example (if you can’t be bothered to use a web-upload interface) or simply with a non “keitai” cell phones (surely they do have email on US cell phones nowadays 😉

  3. I need help setting this script up:

    “7e04b@ajblog.uni.cc” => array (
    login => “7e04b+ajblog.uni.cc”,
    pwd => “***”,
    cat => “General”, // make sure the category exists
    blog_URL => “http://www.ajblog.uni.cc/”, // URL to your blog
    blog_folder => “/home/checkm00/public_html/”, // absolute path to your blog folder
    pix_folder => “keitai/pix/”), // relative to $blog_folder, MUST BE writable by server (chmod 777)…

    on the first line: do I put my e-mail, or the e-mail I’m sending to?

    Whose username and pass?

  4. you must put the email address you are sending it to (normally, an account you have specially created for your blog and that you will have hooked to the script following the instructions in this file).

    ‘login’ and ‘pwd’ are the log and password for the blog user you want entries to be posted under (NOT your email account info). I actually recommend creating a special user with minimum privileges (just enough to post entries) for this (since your password will appear in clear in this file), but you can very well use your main user’s log and pass.

    HtH, let me know if you have any other questions.

  5. OK… here’s another two for you.

    1. The category doesn’t seem to be working… it’s giving me a “foreach” error in the category functions file. Not setting any category I presume. Do I need to put the category ID instead of the category name?

    2. It’s sending me back an e-mail with:
    “This message was created automatically by mail delivery software.

    A message that you sent could not be delivered to one or more of its
    recipients. This is a permanent error. The following address(es) failed:

    pipe to |php /home/checkm00/public_html/wp-keitaimail/wp-keitaimail.php
    generated by 7e04b@ajblog.uni.cc

    The following text was generated during the delivery attempt:

    —— pipe to |php /home/checkm00/public_html/wp-keitaimail/wp-keitaimail.php
    generated by 7e04b@ajblog.uni.cc ——

    Content-type: text/html
    X-Powered-By: PHP/4.3.8

    —— This is a copy of the message, including all the headers. ——

    Received: from [] (helo=mproxy.gmail.com)
    by host.hitstogo.com with esmtp (Exim 4.41)
    id 1C0Mev-0008UG-63
    for 7e04b@ajblog.uni.cc; Thu, 26 Aug 2004 08:59:29 -0700
    Received: by mproxy.gmail.com with SMTP id 78so506175rnl
    for <7e04b@ajblog.uni.cc>; Thu, 26 Aug 2004 08:59:25 -0700 (PDT)
    Received: by with SMTP id w64mr2582204rnb;
    Thu, 26 Aug 2004 08:59:25 -0700 (PDT)
    Received: by with HTTP; Thu, 26 Aug 2004 08:59:25 -0700 (PDT)
    Message-ID: <1a27051204082608597c3930ee@mail.gmail.com>
    Date: Thu, 26 Aug 2004 10:59:25 -0500
    From: AIMJournals

    Reply-To: AIMJournals

    To: Post to blog <7e04b@ajblog.uni.cc>
    Subject: [text of subject]
    Mime-Version: 1.0
    Content-Type: text/plain; charset=US-ASCII
    Content-Transfer-Encoding: 7bit

    [text of post]”

    from the “Mail delivery system” is there a way I can stop it from doing this?

  6. I get the following error (by mail):

    Warning: main(): SAFE MODE Restriction in effect. The script whose uid is 32137 is not allowed to access /usr/lib/php/PEAR.php owned by uid 0 in /home/leenus/wp-keitaimail/mimedecode.php on line 35

    Warning: main(PEAR.php): failed to open stream: No such file or directory in /home/leenus/wp-keitaimail/mimedecode.php on line 35

    Fatal error: main(): Failed opening required 'PEAR.php' (include_path='.:/usr/lib/php:/usr/local/lib/php') in /home/leenus/wp-keitaimail/mimedecode.php on line 35

    Is it impossible to use this script when PHP is running in safe mode?

  7. I had a problem where the script would die requiring PEAR, so I simply took a copy of PEAR.php and added it in the execution directory wp-keitai. Seems to work or at least the script stops griping about it being missing.

    I have a different problem though. The script simply executes quietly without error and yet does not post. I can check the pipe procmail recipe works fine and this happens even with a local execution ( ie. cat samplemail.txt | php wp-keitaimail.php ). I’ve set the debugging level to 3 in wp-keitaimail.php and used samplemail.txt but the log.txt file does not produce any output and still no post.

    Could be something wrong with my array but doesn’t look like it.

    Anyone have any ideas ? Kind of stumped and put an hour or 2 into getting this working now between procmail and figuring out what was up with the script.

    thanks !

  8. It could be the params array. The first line of each array in the array should read:
    “email” => array ( //change “email” to the e-mail you are sending the post FROM!

  9. Mr Dave,
    I was able to install the script with success. Sending emails with attachments from a regular email account works perfect. However, sending it from my cell phone, does not seem to work. It does not decode the attachement and only displays the ‘signature’ that my provider adds to the message.
    I have put an example of a message online, maybe you could take a look at it and see what can be done. I would greatly appreciate it.

  10. Pingback: System Status Blog
  11. Being fresher to blogs!!…i jus started blogging with wordpress …but i couldnt use email to blog option in wordpress ..i did what they actually said in their help pages…but still i couldn’t do it…pls some one help me …
    iam using free host from chromehost.com…..

    hope some might help me with this issue!!!!

    thanks in advance

  12. Installed 1.0b and it worked like a charm! First tested out sending from normal email and went through succesfully. Then sent an email + photo attachment from my Nokia 7610 on Vodafone GPRS and that too went through beautifully. Also tried sending via O2 MMS and works (albeit with some unsolicited advertising 🙂

    The instructions weren’t as complex as advertised, but they could do with a little more documentation and clarification 🙂

    All in all THANKS!

  13. There must be some other syntax to use for my particular type of server, to forward posts to the script, because I get this error:

    A message that you sent could not be delivered to one or more of its
    recipients. This is a permanent error. The following address(es) failed:

    pipe to |php /home/admin/public_html/wp-keitai-mail/wp-keitaimail.php
    generated by blog@paolalucchesi.com
    “php” command not found for virtual_address_pipe transport

    I’d be so grateful if you could suggest a solution…

  14. do you have console access on this machine? if so, can you try to run “which php” and/or “where php” in the command line interface (via telnet or other)… If that doesn’t work, ask your host for the “exact server path to the php executable”, and use that instead of “php” in the line you insert…
    It is also possible that your host has disabled php as a standalone executable…

    GENERAL UPDATE: Btw, all the issues listed above have normally been resolved (and migrated into the downloadable file)… if you do encounter any issue (similar to those above or different), please contact me via email or in the comments…
    I should be releasing a new package with better directions and slightly easier configuration real soon now™ (i.e. when I can).

  15. Pingback: blog.bealers.com
  16. Hi thanks for your comments to my (rather long post). Re: the naming: it’s the I E thing, I always get them mixed up, that’s all. I was going to post to your blog properly when I’d got it working, as I’m a n00b with Blogging I didn’t really know that the trackback would publish my entire post as a comment here!

    Anyway, assuming that I get it all working then you’ve saved me a hell of a lot of time, with this plugin, thanks.

    I’ll mail you with more formal proposals re: new features when I’m ready to cut some code.

  17. I installed the software just like you said and now all i get is this response after sending the e-mail. My server uses cpanel as its config tool. any advice?

    The following text was generated during the delivery attempt:

    —— pipe to |php /wp-keitaimail/wp-keitaimail.php
    generated by blog@mandebooks.com ——

    Status: 404
    Content-type: text/html
    X-Powered-By: PHP/4.3.8

    No input file specified.

    —— This is a copy of the message, including all the headers. ——
    —— The body of the message is 118939 characters long; only the first
    —— 106496 or so are included here.

    it then lists out the message that i sent it. thanks for the help…

  18. I’ve tried the following (after finding out where php was – btw, I run other php stuff so the problem shouldn’t be that)

    |/usr/local/bin/php /home/admin/public_html/wp-keitai-mail/wp-keitaimail.php

    and also checked the exim log (I have exim), which shows that the mail has been sent, if I interpret the log correctly, but still it doesn’t get the script going.

    Any other suggestions?


  19. Arachnae: I have tried repeatedly to contact you ever since your last post. But your email address has bounced all my emails.
    Please leave another comment with a valid email address (it won’t appear here) or contact me directly…

    Your ISP is STILL rejecting all my emails (including the ones from this server). Either contact them about this issue (they probably have some kind of stupid block on this IP) or contact me with another valid email address.

  20. Pingback: andare.ch - Weblog
  21. Hi! Great script! but I can’t execute it properly:
    it keeps me to say:
    HTTP/1.1 200 OK
    Server: Microsoft-IIS/4.0
    Date: Sun, 21 Nov 2004 16:11:25 GMT
    Content-type: text/html
    X-Powered-By: PHP/4.3.9

    Code: 2 Reason ‘Invalid return payload: enabling debugging to examine incoming payload’

    any clue?
    in wp-keitaimail.php I’ve changed

    $client = new xmlrpc_client( $myUrl['path']."xmlrpc.php", $myUrl['host']);


    $client = new xmlrpc_client( $myUrl['path']."wp-includes/class-xmlrpc.php", $myUrl['host']);

    I hope it is right: in my $blog_URL I didn’t have xmlrpc.php file.

    Thanks in advance for your help!

  22. I keep getting a 404 error saying that /xmlrpc.php isn’t found on the server. I assume this file needs to be in the default wordpress directory. Is it supposed to come with wordpress? I don’t have it. Where can I get it?



  23. I have tried implementing this script on my blog to no avail. I kept getting the same error many people reported when I tried to post via email.

    I get emails back saying that:

    A message that you sent could not be delivered to one or more of its
    recipients. This is a permanent error. The following address(es) failed:

    pipe to |php /home/xxxxxxx/public_html/wp-keitaimail/wp-keitaimail.php
    generated by xxxxxx@theomegaattempt.com

    I loved the idea of having this running and I appreciate your efforts. If you could offer some assistance, I’d appreciate it.

  24. Hello,

    I believe I am having the similar problems as arachnae. I use cpanel and have installed another script that uses email piping. To get that one to work I had to add -q after the php: |php -q /pipe/to/path I tried that with this script, and it suppresses the return emails, however it does not seem to post to the blog. 🙁 Any ideas would be appriciated.



  25. I think I found a light in the tunnel. I was having similar problems and I found out the recent few releases of WordPress were missing a file names xmlrpc.php. This is not similar to class-xmlrpc.php, it’s a different thing. Now, to be able to post through mail to a wordpressblog, you need that file. You can find that file in older versions of WordPress (best one is 1.2 Mingus). Just download that version, take out the xmlrpc.php file and put that file in your wordpress root directory and tadaaa… worked like a charm!

  26. I had xmlrpc.php all the time (I think “Mingus” is actually the wordrepp version I had installed), so for me at least THAT was not the issue… I rather think that there should be something to add to exim’s configuration – anybody knows how to do that? (my server has exim)

  27. hi, i am having a problem with ketaimail, my posts never show up in the blog. they are in the database, they show up in the edit/posts page and i can edit them, but if i click on one of the titles, i get a message “Sorry, no posts matched your criteria.”. i am running wordpress 1.2.
    any ideas? thanks in advance. ketaimail seems like just what i want, i just can’t get it to work!

  28. never mind, the problem was time zone bugs in xmlrpc.php postdating the gmt date of the post. keitaimail it working great. thanks for a great script!

  29. Hello
    thanks for this script. unfortunately, I’m experiencing this problem…

    This message was created automatically by mail delivery software.

    A message that you sent could not be delivered to one or more of its
    recipients. This is a permanent error. The following address(es)

    pipe to |php
    generated by mobme@em-pathy.net

    The following text was generated during the delivery attempt:

    —— pipe to |php
    generated by mobme@em-pathy.net ——

    Content-type: text/html
    X-Powered-By: PHP/4.3.10

    Could not change to directory:
    —— This is a copy of the message, including all the headers. ——

    what does “Could not change to directory” mean?

    i’ve looked thru all but I can’t find a solution.

  30. I tried to install it but… well, it looks like my provider doesn t want me to make a deviation to a script. I just got a wonderful message that says :
    “this is not a valid mail address”

    If you have any solution about that… it will be welcome.


  31. When I send a message to my moblog address I get the following:

    —– The following addresses had permanent fatal errors —–
    “|/usr/local/bin/php -e /wp-keitaimail/wp-keitaimail.php”
    (reason: 255)
    (expanded from: )

    —– Transcript of session follows —–
    554 5.3.0 unknown mailer error 255
    Reporting-MTA: dns; domain.com
    Received-From-MTA: DNS; smtpout.mac.com
    Arrival-Date: Mon, 28 Feb 2005 20:57:02 -0700

    Final-Recipient: RFC822; moblogaddress@domain.com
    X-Actual-Recipient: X-Unix; |/usr/local/bin/php -e /wp-keitaimail/wp-keitaimail.php
    Action: failed
    Status: 5.0.0
    Diagnostic-Code: X-Unix; 255
    Last-Attempt-Date: Mon, 28 Feb 2005 20:57:02 -0700

    Any suggestions as to where I might start debugging this? I enabled the PHP debugging with the -e however the failure messages are no more informative.



  32. Dr. Dave, hopefully you can be of assistance. Trying to get this to work, I put the files in the correct directory and edited the prefs to what they should be, including username/pw etc for the blog user. I set up my .procmailrc file with the recipe from the prefs file. When I send an email to the blog email, it goes through procmail and I get this in my log file…

    procmail: Locking “msgid.lock”
    procmail: Executing “/usr/bin/formail,-D,8192,msgid.cache”
    procmail: Non-zero exitcode (1) from “/usr/bin/formail”
    procmail: Assigning “LASTFOLDER=/usr/bin/formail -D 8192 msgid.cache”
    procmail: Unlocking “msgid.lock”
    procmail: Match on “(^((Original-)?(Resent-)?(To|Cc|Bcc)|(X-Envelope|Apparently(-Resent)?)-To):(.*[^a-zA-Z])?).*moblog@dark7.org”
    procmail: Executing “/usr/bin/php,/home/e-smith/files/ibays/journal/html/wp-keitaimail/wp-keitaimail.php”
    procmail: Assigning “LASTFOLDER=/usr/bin/php /home/e-smith/files/ibays/journal/html/wp-keitaimail/wp-keitaimail.php”
    Subject: please work
    Folder: /usr/bin/php /home/e-smith/files/ibays/journal/html/wp-keita 1771
    procmail: Assigning “LASTFOLDER=/home/e-smith/files/users/moblog/Maildir/new/1109965955.29833_1.snoopy”
    Subject: please work
    Folder: /home/e-smith/files/users/moblog/Maildir/new/1109965955.2983 1771

    It’s not posting on the blog, and I’m not too technical so I’m not sure if that’s what the log file should be displaying or not for a successful email. Any ideas?

  33. Well, got it sending properly, and found in a log file that it’s having trouble with the PHP. And now I see the person above me trying to get it workin on 1.5 which is the version of WP that I use. Looking forward to it 🙂

  34. I actually found a different script that uses xmlrpc.php to post to WP1.5, and it works great.

    A link to it and a little tech note are on here

    I’m interested in trying keitai-mail with 1.5 if anyone does get it working though.


  35. Was gonna email ya Moses, but couldn’t find a link. I don’t know why I tried this, but it’s working. I went to http://wp-plugins.net and downloaded Keitaimail from there (it states it works for 1.2 and 1.5. Reset my prefs (take note that by default it’s set to identify the senders email addy for it to work, so make sure you have that set right). Then I got the latest xmlrpc.php from the stable 1.5 WP. Now my only problem is that it’s putting out too much info into the post. This is how a post with the body “hahahahhahah” turned out…



  36. Well, there is a lot of code in there that I forgot to use the tags…



  37. Maybe a blockquote (sorry people, please don’t hate me :))



    if that didn’t post the code, I’ll give up trying.

  38. Pingback: Philosophy Of
  39. I am having the same problem as many others have mentioned here. When I try to send a photo, the following error message is returned.

    This message was created automatically by mail delivery software.

    A message that you sent could not be delivered to one or more of its
    recipients. This is a permanent error. The following address(es) failed:

    pipe to |php /home/japundit/wp-keitaimail/wp-keitaimail.php

    generated by japudit@japundit.com

    The following text was generated during the delivery attempt:

    —— pipe to |php/home/japundit/wp-keitaimail/wp-keitaimail.php

    generated by japundit@japundit.com —-/

  40. Hi,

    I had a specialist install the script but I still get the following error whenever I try to post an image from any machine or using any mail address (machine based or keitai based):

    The following text was generated during the delivery attempt:

    —— pipe to |php /home/japundit/wp-keitaimail/wp-keitaimail.php

    Could anyone please help get me past this hurdle?

    Everything works fine if I remove the FROM address restriction.



  41. Hi,

    Anybody home?

    The guy who installed the plug-in says that everything works fine when he configures it for his sender address.

    When the address is changed to my sender address and I send an image, it is not posted on the page.

    Anyone know what we should do?



  42. Hello everybody…

    OK, a quick word of update: there are probably a few problems between wp-keitai-mail and WP 1.5. In fact, there was at least one major bug present in the original release of 1.5 (it’s been fixed silently ever since, so no easy way to tell whether you have a fixed version or no).
    My version still works fine here, but who knows…

    The sad bottom line is that I really cannot even start looking at wp-keitai-mail right now. Plugin development is a hobby, a time-consuming hobby… and currently, I’m already way beyond what I should reasonably be spending on it… If anything, I must admit I am more eager to get Spam Karma 2 off the ground, seeing how it covers more essential needs and cater to a wider userbase…

    As such, I am afraid I cannot offer any support at the moment. If you do not seem to be able to fix the problem (the code is fairly simple, and has an easy-to-enable debugging mode, for those who know their way around PHP), assume it’s broken and check out other solutions. I believe Flickr.com is a pretty good way to do that without too much trouble.
    As for wp-keitai-mail, there might be an upgrade in a month or two when things will have quieted down, but do not hold your breath…

    Sorry about that and thank you all for your support…

  43. If it does not have any sort of protection to limit posting to the blog owner, then what exactly makes it superior to the mail script already included with WordPress?

Comments are closed.