• 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.
  • Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Der Oktober ist da - Zeit, sich den rauer werdenden Wind um die Ohren pfeifen zu lassen und sich von der Wildheit der Elemente inspirieren zu lassen. Lasst uns an Euren Erlebnissen teilhaben! Zum Wettbewerb --> Klick

PHP-Scripts: Mail2APNS via Prowl oder "Push-Mail für Schotten - Teil II"

Bananenbieger

Golden Noble
Registriert
14.08.05
Beiträge
25.515
Nachdem schon eine Lösung existiert, mit der mal sich via BeeJiveIM und Jabber über eintreffende Mails benachrichtigen lassen kann, werden wir heute mal das ganze mit dem gerade erschienen Prowl machen.


Benötigt werden: Prowl, PEAR Mail_Mime, ProwlPHP und natürlich ein Server, welcher a) PHP-CLI hat und b) Mails an ein Script weitergeben kann (ergo auch einen Mailserver).

ProwlPHP gibt es hier: http://github.com/Fenric/ProwlPHP/tree/master
Mail_Mime lässt sich über PEAR installieren bzw. hier downloaden: http://pear.php.net/package/Mail_Mime

Einfach folgende zwei Scripts auf den Server in ein leeres Verzeichnis packen (z.B. /srv/mail2apns), ProwlPHP.php ins gleiche Verzeichnis wie die beiden Scripts legen und Mail_Mime ins Unterverzeichnis Mail kopieren (z.B. /srv/mail2apns/Mail).

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 for Prowl - Version 0.9
//   Copyright (C) 2009 Bananenbieger. No Rights Reserved.
// 
// MAIL2APNS.PHP - Process incoming mail
//
//
// Configuration
//
$prowl_apikey="Hier den API-Key eintragen - API-Keys lassen sich auf der Prowl-Website erzeugen";
$prowl_appname="Mail"; // App-Name displayed in Prowl
$prowl_path="/srv/apns"; // Path, where the prowl.pl resides
//
// 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'];
echo "\nBody: ";
echo $structure->parts[0]->body;*/

$from_raw=$structure->headers['from'];
$from=trim(substr($from_raw,0,strpos($from_raw,"<")-1));
$prowl_event="Neue eMail empfangen";
$message="\nVon: ". $from. "\nBetreff: ".$structure->headers['subject']." \n\n". substr($structure->parts[0]->body,0,160)."...";
$to=$structure->headers['to'];

include("sendmessage_apns_prowl.php");

?>

sendmessage_apns_prowl:
Code:
<?
include('ProwlPHP.php');
$prowl = new Prowl($prowl_apikey);
$prowl->push(array(
                'application'=>$prowl_appname,
                'event'=>$prowl_event,
                'description'=>$message,
                'priority'=>0
            ));
?>

Wenn alles richtig gemacht wurde, bekommt Ihr nun über eintreffende Mails eine APN. Im

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

Und so sieht es aus, wenn es fertig ist:
IMG_0050-20090711-025245.png

IMG_0047-20090711-025010.png
 
Zuletzt bearbeitet von einem Moderator:

El Pollo Diablo

Erdapfel
Registriert
20.07.09
Beiträge
1
Vielen Dank für dieses Script!
Mir ist aber aufgefallen, dass die ersten 160 Zeichen des Mailinhaltes nicht mitgeschickt werden(sieht man auch auf deinen Screenshots). Ich habe dann probeweise mal das "->parts[0]" aus Zeile 46 gelöscht, dann geht es bei mir.
 

underwaterdub

Gloster
Registriert
16.04.08
Beiträge
62
Haha.. klasse Idee..

Wenn ich nicht schon MobileMe hätte, würde ich es mal ausprobieren...
 

Bananenbieger

Golden Noble
Registriert
14.08.05
Beiträge
25.515
Du kannst ja alles mögliche damit machen. Ist ja nicht auf Mails limitiert.
 

AndyH

Carola
Registriert
23.01.09
Beiträge
115
Ich hab das Script mal als Inspiration genommen und mir einen Push-Service für Twitter gebastelt.
Zusätzlich zu ProwlPHP braucht man noch twitter-php .
Einfach mit beliebigem Zeitintervall in die crontab und das Script pusht beim Aufruf den neuesten neuen Tweet an Prowl.
Könnte man natürlich noch verfeinern (alle neuen Tweets, oder die Anzahl der neuen Tweets, oder ... ), aber mir reichts so.
Code:
#!/usr/bin/php
<?php
//
// Twitter2Prowl - V0.1
//
// 
$tuser = 'Twitter Username';
$tpass = 'Twitter Passwort';
$apikey = 'Prowl API-Key';

require_once('ProwlPHP.php');
require_once('twitter.class.php');

$twitter = new Twitter($tuser, $tpass);

$withFriends = True;
$channel = $twitter->load($withFriends);
$status = $channel->status[0];
if (!file_exists('last.tmp')) {
    $handle = fopen('last.tmp', 'w');
    fclose($handle);
}
$handle = fopen('last.tmp', 'r');
$last = fgets($handle, 140);
fclose($handle);
if (md5($status->text) != $last) {
    $prowl = new Prowl($apikey);
    $prowl->push(array(
            'application'=>'Twitter',
            'event'=>$status->user->name,
            'description'=>$status->text,
            'priority'=>0
        ));
}
$handle = fopen('last.tmp', 'w');
fputs($handle, md5($status->text));
fclose($handle);

?>
 

Bananenbieger

Golden Noble
Registriert
14.08.05
Beiträge
25.515
Mittlerweile gibt es Notifications im AppStore. Als Basis für webbasierte Pushdienste ist das deutlich geeigneter als Prowl: Kann mehr und sieht besser aus.

Edit: Notifications bietet übrigens direkt eine rudimentäre Twitter-Integration. Praktisch ist auch, dass man diverse Twitter-Apps direkt aus dem Push-Popup starten lassen kann.
 
Zuletzt bearbeitet: