1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. In diesem Bereich findet ihr Tutorials und Reviews. Die Forenrechte zur Erstellung neuer Themen sind hier eingeschränkt, da Problemdiskussionen bitte in den übrigen Forenbereichen auf Apfeltalk zu führen sind. Wer ein Tutorial oder Review einstellen möchte, kann im Unterforum "Einreichung neuer Tutorials" ein neues Thema erstellen. Die Moderatoren verschieben den Beitrag dann in den passenden Bereich.
    Information ausblenden
  3. Unsere jährliche Weihnachts-Banner-Aktion hat begonnen! Wir freuen uns auf viele, viele kreative Vorschläge.
    Mehr dazu könnt Ihr hier nachlesen: Weihnachtsbanner 2016

    Information ausblenden

PHP-Scripts: Mail2APNS via BeejiveIM und Jabber oder "Push-Mail für Schotten"

Dieses Thema im Forum "iPhone-Tutorials" wurde erstellt von Bananenbieger, 24.06.09.

  1. Bananenbieger

    Bananenbieger Golden Noble

    Dabei seit:
    14.08.05
    Beiträge:
    24.564
    Kinder, gebt fei Acht, Bananenbieger hat Euch etwas mitgebracht!

    Heute: Wie basteln wir uns ein Mail2APNS-Gateway.

    Benötigt werden: BeeJiveIM, 2 Jabber-Accounts (einen sendenden, und einen empfangenden für das iPhone) , XMPPHP, PEAR Mail_Mime und natürlich ein Server, welcher a) PHP-CLI hat und b) Mails an ein Script weitergeben kann (ergo auch einen Mailserver).


    Einfach folgende beiden Scripts auf den Server in ein leeres Verzeichnis packen (z.B. /srv/mail2apns) und XMPPHP und Mail_Mime in die Unterverzeichnisse XMPPHP und Mail kopieren (z.B. /srv/mail2apns/XMPPHP und /srv/mail2apns/Mail).
    Das sollte dann so aussehen:
    [​IMG]

    Danach die Konfigurationsvariablen in mail2apns.php setzen. Beispielhaft habe ich mal ein paar Daten eingetragen.

    mail2apns.php (an dieses Script die Mails pipen):
    Code:
    #!/usr/bin/php  
    <?php
    // Mail2APNS Gateway - Version 0.8
    //   Copyright (C) 2009 Bananenbieger. No Rights Reserved.
    // 
    // MAIL2APNS.PHP - Process incoming mail
    //
    //
    // Configuration
    //
    // Jabber-Server to use for sending
    //$jabber_srv="talk.google.com";
    $jabber_srv="jabber.org";
    // Port to use for Jabber Server
    $jabber_srv_port=5222;
    // Login data for sending user
    $jabber_from_id="testi.testmann"; // It's "someone@gmail.com" for Google.
    $jabber_id_domain="jabber.org"; // It's "gmail.com" for Google.
    $jabber_from_passwd="topsecret";
    // Where to send message to? (Must be different from sending user)
    $jabber_to_id="myiphoneaccount@jabber.org";
    //
    // Do not change anything below this.
    
    
    
    
    include("Mail/mimeDecode.php");
    
    // read eMail from stdin
    $fd = fopen("php://stdin", "r");
    $email = "";
    while (!feof($fd)) {
        $email .= fread($fd, 1024);
    }
    fclose($fd);
    
    $params['include_bodies'] = true;
    $params['decode_bodies'] = true;
    $params['decode_headers'] = true;
    $params['input'] = $email;
    
    
    $structure = Mail_mimeDecode::decode($params);
    /*echo "\nTo: ";
    echo $structure->headers['to'];
    echo "\nSubject: ";
    echo $structure->headers['subject'];
    */
    
    $from_raw=$structure->headers['from'];
    $from=trim(substr($from_raw,0,strpos($from_raw,"<")-1));
    $message='Neue eMail von '.$from.' eingetroffen!   Betreff: '.$structure->headers['subject'].'';
    $to=$structure->headers['to'];
    
    //echo "\nMessage check:".$message."\n";
    
    include("sendmessage_apns.php");
    
    ?>
    
    sendmessage_apns:
    Code:
    <?php
    
    // activate full error reporting
    //error_reporting(E_ALL & E_STRICT);
    
    include 'XMPPHP/XMPP.php';
    
    #Use XMPPHP_Log::LEVEL_VERBOSE to get more logging for error reports
    #If this doesn't work, are you running 64-bit PHP with < 5.2.6?
    $conn = new XMPPHP_XMPP($jabber_srv, $jabber_srv_port, $jabber_from_id, $jabber_from_passwd, 'xmpphp', $jabber_id_domain, $printlog=false, $loglevel=XMPPHP_Log::LEVEL_INFO);
    	
    try {
        $conn->connect();
        $conn->processUntil('session_start');
        $conn->presence();
        $conn->message($jabber_to_id, $message);
        $conn->disconnect();
    } catch(XMPPHP_Exception $e) {
        die($e->getMessage());
    }
    ?>
    
    Wenn alles richtig gemacht wurde, bekommt Ihr nun über eintreffende Mails eine APN.

    Mit einer leichten Änderung kann dieses Script auch für andere Dinge verwendet werden ;)

    Und so sieht es aus, wenn es fertig ist:
    [​IMG]
     
    #1 Bananenbieger, 24.06.09
    Zuletzt bearbeitet: 24.06.09
    ace777 gefällt das.
  2. Nathea

    Nathea Admin
    AT Administration

    Dabei seit:
    29.08.04
    Beiträge:
    13.547
    Danke für dies tolle Tutorial, das auch gleich seinen verdienten Platz im Tutorial-Bereich und der iPhone-FAQ gefunden hat.
     
  3. AndyH

    AndyH Carola

    Dabei seit:
    23.01.09
    Beiträge:
    115
    Tipp: Natürlich kann man an die Empfänger-JID auch die entsprechende Ressource dranhängen, damit die PN unabhängig von der Priorität z. B. nur am iPhone landen und nicht am Desktop-Client
     
  4. Bananenbieger

    Bananenbieger Golden Noble

    Dabei seit:
    14.08.05
    Beiträge:
    24.564
    Nachtrag:

    die mail2apns.php muss natürlich vom Mailserver ausführbar sein. Folglich bitte die Rechte +x für den User oder die Gruppe, unter der der Mailserver läuft, setzen.
     
  5. gonzolo2k

    gonzolo2k Erdapfel

    Dabei seit:
    23.07.07
    Beiträge:
    3
    Hallo,
    das klingt ja sehr interessant und ich würde es gerne mal ausprobieren. Verstehe nur einen Punkt nicht genau:

    wie meinst du das mit dem pipen. Beispiel: ich habe eine E-Mail xyz@abc.de was nuormalerweise durch den Mailserver in ein IMAP Postfach landet. Heißt das nun, dass das die mail zusätzlich noch an das skript geleitet werden soll, damit die PNS funktioniert? Dazu benötigt man doch noch was extra à la procmail/maildrop oder?

    Oder denke ich mal wieder zu kompliziert??

    Gruß,
    gonzolo2k
     
  6. Bananenbieger

    Bananenbieger Golden Noble

    Dabei seit:
    14.08.05
    Beiträge:
    24.564
    Exakt so ist es. Du musst die Mail zusätzlich an das Skript leiten. Exim kann das z.B. direkt, bei anderen Mailservern muss man eventuell ein Hilfsprogramm bemühen.
     
  7. gonzolo2k

    gonzolo2k Erdapfel

    Dabei seit:
    23.07.07
    Beiträge:
    3
    ah kapiert, fein. Ich benutze postfix mit cyrus IMAP. Habs jetzt probiert mit nem sieve skript -> geht wunderbar. Wenn das jetzt noch multiuser-fähig wäre (mehrere email-adressen, selbe domain) dann wärs PERFEKT. Mal sehen, vielleicht kriege ich das auch selber hin.

    bye,
    gonzolo2k
     
  8. luke-r2d2

    luke-r2d2 Antonowka

    Dabei seit:
    26.12.08
    Beiträge:
    357
    Wie ist das eigentlich genau bei IMAP-Diensten via Standard Mail-App... Werden die in dem einstellbaren Rhythmus geprüft?

    Wenn ja wäre ja eventuell auch ein Skript interessant, das einfach z.B. jede Minute ein IMAP-Postfach prüft und entsprechend eine "APN" schickt. Dann kämen auch Leute, die nicht Mobile Me nutzen in den Genuss von Push-Diensten...

    Edit: Klar, man braucht einen eigenen Server. Ich hab z.B. einen, benutze aber auf Grund der Oberläche trotzdem GMail.
     
  9. Bananenbieger

    Bananenbieger Golden Noble

    Dabei seit:
    14.08.05
    Beiträge:
    24.564
    Eigentlich gar nicht so schwer. Brauchst nur $structure->headers['to'] abfragen und $jabber_to_id entsprechend setzen lassen.


    Das wäre aber eine recht ineffiziente Lösung, oder?

    Ich nutze auch nicht wirklich den Mailserver auf meinem Server. Meine Mail lasse ich ganz stressfrei von HostEurope managen. Von da lasse ich per Filterregel eine Kopie jeder eingehenden Mail an meinen Mailserver schicken, der dann die APNS auslöst.
    Sollte mit Google ähnlich gehen.
     
  10. luke-r2d2

    luke-r2d2 Antonowka

    Dabei seit:
    26.12.08
    Beiträge:
    357
    Wahrscheinlich ;)


    Hmm... Ich probiers mal aus, coole Idee...
     
  11. Bananenbieger

    Bananenbieger Golden Noble

    Dabei seit:
    14.08.05
    Beiträge:
    24.564
    Vorankündigung: Es gibt jetzt auch Prowl im AppStore.
    Sobald ich Zeit habe, werde ich das Script anpassen, so dass man statt BeejiveIM/Jabber auch einfach Prowl nutzen kann.
     
  12. luke-r2d2

    luke-r2d2 Antonowka

    Dabei seit:
    26.12.08
    Beiträge:
    357
    interessant wäre dann auch eine erkennung, ob der mac läuft -> umleitung auf mac, oder nicht -> umleitung aufs iphone ;)
     
  13. Bananenbieger

    Bananenbieger Golden Noble

    Dabei seit:
    14.08.05
    Beiträge:
    24.564
    Das wird schwierig...
     
  14. luke-r2d2

    luke-r2d2 Antonowka

    Dabei seit:
    26.12.08
    Beiträge:
    357
    Klar :p Aber hilfreich...

    Mit Jabber geht das ja praktisch, wenn sich iphone und mac einen Account teilen.
     
  15. Bananenbieger

    Bananenbieger Golden Noble

    Dabei seit:
    14.08.05
    Beiträge:
    24.564

Diese Seite empfehlen