Postie via WP-Cron aufrufen

Ich habe das Plugin Postie für WordPress installiert, um von meinem Mobilteil Texte und Photos via E-Mail auf dieses Blog zu posten.

Das funktioniert hervorragend!

Nicht funktionieren tun hingegen die vielen kostenlosen Dienste der Cron-Anbieter, die die notwendige URL von Postie in regelmäßigen Abständen aufrufen sollen. Der von mir gewählte Anbieter ist seit zwei Tagen offline…

Eine Lösung: Das Plugin WP-Cron ist ein Pseudo-Cron-Ersatz. Mit WP-Cron kann man also den Aufruf der Postie-URL automatisieren, ohne einen externen cron-job aufzusetzen.

Die Installation und Aktivierung ist selbsterklärend. WP-Cron bringt auch eine Reihe von Skripten mit, die sich bei WP-Cron als Dienst registrieren und von diesem regelmässig aufgerufen werden.

Das von WP-Cron mitgelieferte Skript als Ersatz für wp-mail.php kann allerdings keine Attachments in E-Mail (Fotos) verwalten, so dass Postie weiterhin erforderlich ist und *irgendwie* über WP-Cron aufgerufen werden muss.

Die Lösung ist über wp-admin -> Plugins -> Plugin-Editor -> WP-Cron die Funktion:

function wp_cron_15_exec()

um folgende Zeile zu erweitern:

file_get_contents('http://deinblog.de/wp-content/plugins/postie/get_mail.php');

Dann klappt es auch mit dem automatisierten Moblogging…

Postscriptum: Mr. – php-Wizard – Borho erklärte mir, dass include evil sei und ich lieber die Funktion file_get_contents nutzen möchte. Warum auch immer…

34 thoughts on “Postie via WP-Cron aufrufen”

  1. Hallo,

    Du schreibst, dass postie hervorragend klappt. Auch mit Umlauten? Das klappt bei mir leider nicht. Hast Du einen Tip?

    Viele Grüße aus Bonn
    Harald

  2. Mmmh, habe es gerade ausprobiert: Funktioniert hier einwandfrei.

    Unter /wp-admin -> Options -> Reading ist bei mir unter “Encoding Pages and Feeds” UTF-8 eingestellt. Das sollte eigentlich genuegen!

  3. Hallo
    Mein deutch ist nicht so gut so ich hoffe es ist OK diese comment in english zu schreiben.

    I’m on to installing a blog with WordPress right now and I want to use the postie-plugin for mobloging, because the wp-mail couldn’t handle the swedish special-characters OK.
    I’m new in the world of php and WordPress and, as i mentioned, my german isn’t that good. So I didn’t really understand your solution.
    I’m running WordPress on windows 2000, so I don’t have the unix cron-table. Therefor I want to use the wp-cron-plugin.
    How did you solve all this? Did you create a new plugin-file or did you just edit one of the default wp-cronfiles? What was the change, could you send me the file?

    Best regards from Sweden

  4. Hello Jonas,

    ok, my solution was that I installed the postie-plugin to get things on my blog via email.

    postie needs the repeated call of a defined url to get this done.

    wp-cron as a plugin manages thoses repeated calls to a url or something. to do so, you have to edit the wp-cron(.php) via the admin-interface.

    add the following line to the function wp_cron_15_exec():

    file_get_contents(”http://yourblog.se/wp-content/plugins/postie/get_mail.php”);

  5. Thanks for a very quick answer.
    I had no problem installing the postie-plugin, but I’m sorry to say that your solution didn’t work on my server.
    Everything seems fine and the updated plugin-file is activated but it doesn’t run automaticly.
    When I use the wp-cron-Mail it all works OK, but as i told you before, the swedish special-characters don’t work.
    When I run ../postie/get_mail.php manually everything works OK.
    The only activated plugins are your wp-cron and the postie plugin. Do I need anything more?
    Do you run the software on a windows webserver with IIS, or do you use Apache?
    The file_get_contents should work on windows and iis, shouldn’t it?
    Do you have any ideas?

  6. Hallo trebron,

    Vielleicht canst du mich helfen. Ich habe Postie installiert und ein cron job gemacht. Leider funktioniert es nicht weil ich diese message bekomme:

    “There does not seem to be any new mail.”

    The problem is that I have sent 6 emails and can see them in my InBox. Would you have an idea where the problem might be? get_mail.php doesn’t seem to find the email messages!

    Vielen Dank für deine Hilfe.

    Grüss,
    Olivier

  7. @Olivier: Hatte auch erst Probleme mit dem Einlesen der Mailbox. Bei einem Postfach bei meinem Hoster hat das nicht funktioniert, aber als ich mir bei GMX extra eine Adresse angelegt habe, funktionierte das einwandfrei. Ich vermute mal, dass die User-ID eine Email-Adresse sein muss.

    @nanu, Jonas: Wegen der Umlaute: scheint ein Problem der Latin zu UTF Kodierung zu sein. Hier findest du einen Filter, der in den Posts Latin nach UTF wandelt: http://www.kackreiz.net/wordpress/latin2utf.php.txt (hier sollte natürlich die IF-Bedingung, die auf ein Datum prüft, noch gelöscht werden, damit alle Einträge umgewandelt werden). Eleganter wäre es natürlich, diese Funktion im postie direkt unterzubringen.

  8. Die Umlaut Umwandlung kann einfach in Postie vorgenommen werden. Dazu ist im File postie-functions.php die Methode PostEmail mit diesem Latin2UTF Konverter Code zu ergänzen. Bei Fragen wendet euch vertrauensvoll an mich, raymi at gmx dot ch

  9. Oh, der Thread hat ja ein gutes Eigenleben waehrend meines Urlaubes entwickelt; Ich hoffe, die Fragen von Olivier sind von raymi ausreichend beantwortet worden:)

    Oh, the thread took a good run during my holidy-absence. To me the question from Olivier is adequately answered by raymi:)

  10. I did the also the coding, for those who are not able to do it themselves, here it is:

    1. I inserted the latin2utf-function somewhere before the “PostEmail” function:

    —snipp—

    /**
    * Latin 2 UTF-Funktion, wegen Umlauten
    */

    function latin2utf($string){
    $search = array (‘Ä’,’Ö’,’Ü’,’ä’,’ö’,’ü’,’ß’);
    $replace = array (‘Ä’,’Ö’,’Ãœ’,’ä’,’ö’,’ü’,’ß’);
    $string = str_replace($search,$replace,$string);
    return $string;
    }

    /**
    *This function just outputs a simple html report about what is being posted in
    */
    […..]

    —-snipp—-

    Then insert into the “PostEmail” function:

    […]
    FilterTextParts(&$mimeDecodedEmail);
    $content = GetContent($mimeDecodedEmail,$IMAGES);
    $subject = GetSubject($mimeDecodedEmail,$content);

    $content=latin2utf($content);
    $subject=latin2utf($subject);

    if ( $config[“DROP_SIGNATURE”] ) {
    $content = RemoveSignature($content,$config[“SIG_PATTERN_LIST”]);
    […]

    Enjoy!

  11. Thanks Marco, but this obviously does not apply to the newest Postie version, which has a working charset-conversion from Latin1 to UTF-8. However, it only works for the body text, not the subject/title. Does anybody have an idea on how to get Postie to correctly convert Latin1-characters in the subject line? Probably somewhere near the function HandleMessageEncoding…

    PS: Gerne auch auf Deutsch antworten! ;-)

  12. Hallo Norbert,
    verstehe ich dass richtig, dass du folgende Zeilen in deiner

    wp-cron.php

    Datei stehen hast:

    —–schnipp—-

    //////////////////////////
    // these execute the various hooks
    function wp_cron_15_exec() {
    file_get_contents(“http://pfad/zum/meinem/blog/wp-content/plugins/postie/get_mail.php”);
    do_action(‘wp_cron_15’);
    }

    —–schnapp—–

    Und das wars? Mehr muss man nicht machen? Verstehe ich das Richtig, dass nun alle 15 Minuten die Datei

    get_mail.php

    ausgeführt wird?

    Falls das oben von mir geschriebene richtig ist, dann funktioniert es leider bei mir nicht :-(

    Oder muss ichnoch etwas zusätzlich machen? (Das Postie funktioniert wenn ich es über mein Blog manuell starte, nur den verd***ten Cron-Job bekomme ich noch nicht hin.

    Word Press hat was geschrieben von

    “Set up a cron job to 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
    Link: http://codex.wordpress.org/Blog_by_Email

    Nur das verstehe ich mal partout nicht… Ich denke das brauche ich nicht, ODER???

    Über eine Antwort odr nen Link zu ner Anleitung würde ich mich sehr freuen!

    Grüssle Damien

  13. Hallo Norbert,

    nun gut, ich weiß nicht was ich gemacht habe, aber nun scheint es zu klappen. Kann mit meinem Handy Emails mit Bildern im Anhang an meine (geheime ;-) Blogadresse schreiben und das ganze erscheint dann als Beirag in meinem Blog…
    Warum es jetzt geht und weshalb kann ich leier nicht sagen, aber der o.g. Code ist der, den ich ich als letztes eingebaut habe und der funktioniert (bei mir ;-).
    Schönen Tag noch…
    Grüssle Damien

  14. Hat sich bezüglich der Postie-Umlaut-Geschichte schon was neues getan? Andreas meinte ja, dass die neueste Version etwas anders aufgebaut sei…

  15. @Damien

    keim Wunder das es nicht geht mit

    // these execute the various hooks
    function wp_cron_15_exec() {
    file_get_contents(”http://pfad/zum/meinem/blog/wp-content/plugins/postie/get_mail.php”);
    do_action(’wp_cron_15′);
    }

    die (“) müssen durch (‘) ersetzt werden! Also:

    // these execute the various hooks
    function wp_cron_15_exec() {
    file_get_contents(‘http://pfad/zum/meinem/blog/wp-content/plugins/postie/get_mail.php’);
    do_action(’wp_cron_15′);
    }

    dann gehts!

  16. Ja, dann nochmal persönlich DANKE (mein blog hat den Eintrag hier drüber selbständig gepostet ?!). Funzt echt prima und ist eigentlich so einfach (und elegant), dass man selber drauf kommen sollte … ;-)

    VG Eberhard

  17. Hallo,

    auch ich habe mir Postie installiert und es funktioniert so weit auch. Allerdings habe auch ich Probleme mit der Sache um WP-Cron. Ich habe nun deine Zeile eingefügt – unter Berücksichtigung dessen, dass die “” durch ” ersetzt werden müssen, aber dennoch klappt es nicht. :(

    Hast du wirklich nur WP-Cron als Plugin dafür installiert? WP-Cron-Mail braucht man dazu nicht?!

    Was kann ich noch falsch gemacht haben? Wenn ich Postie händisch abrufe, klappt alles.

    Wäre dankbar für jede Hilfe.
    pati

  18. Hui, ein Pingback. ;)

    Kurze Meldung: Es klappt. Ich hätte mir allerdings viel Arbeit sparen können, wenn ich die Kommentare hier gleich mal eingehender studiert hätte, denn dann wäre mir aufgefallen, das die ” durch ‘ ersetzt werden müssen. Ich kam dann erst drauf als ich die wp-cron.php mal in einen Editor mit Syntaxhighlightning gepackt hatte und somit das Problem erkannte.

  19. Hallo, nachdem ich nun schon sehr oft die vorgehensweise ,wie hier beschrieben, angewendet habe, tut sich beimir leider immer noch nichts.

    wenn ich die zeile
    file_get_contents(’http://deinblog.de/wp-content/plugins/postie/get_mail.php’);
    in die funktion so einfüge wie gesagt, dann kannich meine domain nicht mehr aufrufen, bzw. es wird mir nichts mehr angezeigt. dann hilft nur noch das löschen der wp-cron.php über ftp login.

    muss cih keine andere datei editieren?
    die installierten plugins postie, wp-cron und wp-cron-mail habe ich aktiviert, aber es tut sich nix??

    kann mir dazu vielleict jemand nochmal helfen?

  20. Hallo zusammen,

    ich habe auch das gleiche cron probleme. Aber meine scheint ein bisschen anders zu sein. Ich habe fast null Ahnung und möchte jede 10. Minute automatisch cron.php datei ausgeführt wird. Wie kann ich das machen?

    Hier mein cron.php datei (nur bis start)
    \n”;
    }

    function closeLogFile ()
    {
    global $logFileHandle;
    global $cronScriptHTMLOutput;
    if ($logFileHandle)
    fclose ($logFileHandle);

    if ($cronScriptHTMLOutput)
    print “\n”;
    }

    function printLog ($str)
    {
    global $logFileHandle;
    global $cronScriptHTMLOutput;
    if ($logFileHandle)
    {
    if (substr($str,strlen($str)-1,1)!=”\n”)
    $str .= “\n”;

    fwrite ($logFileHandle, $str);
    if ($cronScriptHTMLOutput)
    print “”.$str;
    }
    }

    function printLogL ( $str,$level )
    {
    for($i=1;$i

  21. printLog (“========= CRON Start: “.date(“d.m.Y H:i:s”));
    $cron00 = “========= CRON Start: “.date(“d.m.Y – H:i:s”).” ====”; // für cronjob.txt
    fwrite($handle,$cron00.$br); // für cronjob.txt

  22. Nachdem ich diesen Beitrag hier gefunden hatte, habe ich die Zeile in wp-cron.php entsprechend geändert.
    Daraufhin wurde das wp_cron-Plugin von WordPresse deaktiviert. Ein nochmaliges Aktivieren erbrachte nur den Kommentar “Das Plugin kann nicht aktiviert werden, da es einen fatalen Fehler erzeugt.”

    Die Lösung: Man muss aufpassen wie ein Fuchs, dass die Anführungszeichen stimmen: Oben im Post steht zwar ein einfaches Hochkomma

    file_get_contents(’http://pfad/zum/meinem/blog/wp-content/plugins/postie/get_mail.php’);

    aber das war das Falsche. Mit dem Hochkomma (dem auf der #-taste) geht es endlich:

    file_get_contents(‘http://pfad/zum/meinem/blog/wp-content/plugins/postie/get_mail.php’);

  23. PS: Scheinbar wird dieser feine Unterschied bei den verschiedenen Hochkomma-Zeichen auf dieser Seite grundsätzlich nicht dargestellt.

  24. Hi. I’m trying to get blogging by email to work with WP2.5. I’m trying to edit wp-cron, but it doesn’t appear in the plugins directory and when I ftp wp-con.php and open it in a text editor, I can’t find a function called function wp_cron_15_exec():

    Can you suggest anything?

    Thanks in advance!

Leave a Reply

Your email address will not be published. Required fields are marked *