Zusätzlich zum Skript werden noch weitere Einstellungen und Dateien benötigt:
In der php.ini (Root von IP-Symcon) muss folgendes ergänzt werden, falls noch nicht vorhanden:
----PHP.ini----
extension_dir=c:\Programme\IP-SYMCON
extension=php_imap.dll
----PHP.ini----
Dann braucht man noch die php_imap.dll (auch ins Root) und die class.smtp.php (in Verzeichnis Scripts) (s. Zip-Datei unten)
Wenn alle Dateien da sind, müssen folgende Variablen angepasst werden:
- mailserver, mailserver_out, username, password
- zugelassene_subjects und zugelassene_absender
- sendermail, sendername, subject_out
Die Variablen sind selbstsprechend - die Doku ist im Code selbst. Falls ihr Fehler findet, immer her damit.
…und jetzt das Skript:
<?
/*
*******************************
IP-SYMCON Event Scripting
*******************************
File : MailRunScript.ips.php
Trigger : none, but timer
Interval :Timer @ 600 secs
Descr: Aufgabe:
ein anderes Skript nach Eingang von Mail ausführen
Anwendungsgebiete:
Schalten per Mail oder SMS
Ablauf:
- Checken der Mail
- Interpretation Mail (Absender, Betreff, Skriptname)
- Falls der Absender nicht bekannt ist (Definition über Variable) wird
nichts gemacht, außer die Mail gelöscht
- ebenso bei Betreff und Skriptname
Skriptname muss im Body der Mail in eckigen Klammern stehen !!!
z.B: [Heizung_aus]
- falls alles in Ordnung ist, wird das Skript ausgeführt, die Mail gelöscht
und der Absender bekommt eine Antwortmail, dass es funktioniert hat
Anmerkung:
Die POP-Mailbox muss ausschließlich dem IPS vorbehalten sein, da JEDE
Mail nach dem angucken sofort gelöscht wird. Aber so sammeln sich
auch keine SPAMS an ;-)
*/
@error_reporting(7);
$zugelassene_subjects = "IPS Mail von Vodafone-SMS"; //durch leerzeichen getrennt
$zugelassene_absender = "*.zi**e*@d***b.de j******e*@*a*l.com 0172***42*@vodafone-sms.de"; //durch leerzeichen getrennt
//Klasse für Mailversand importieren
//(c) by http://phpmailer.sourceforge.net/
include("scripts/class.smtp.php");
//Allg. Variablen
$CRLF = "
";
//Variablen für Serverzugriff
$mailserver="pop3.*****.de";
$mailserver_out = "smtp.*****.de";
$username="ips@*****.de";
$password="********";
//Absender für Bestätigungsmail
$sendermail = "ips@*****.de";
$sendername = "IP-SYMCON-Statusmail";
//Betreff für Bestätigungsmail
$subject_out = "IPS-Statusmail";
//First: Mit Domain-Socket-Verbindung testen, ob der host überhaupt da ist
$fp = @fsockopen ($mailserver, 110, $errno, $errstr, 3);
if ($fp) {
@fclose($fp);
echo "MailRunScript: Host gefunden ".$mailserver." ";
} else {
echo "Error connecting to Server ".$mailserver.":110 "
.$errno." ".$errstr." ->Stopping MailRunScript";
exit;
}
//Connect to mailbox
$mailbox = imap_open ("{".$mailserver.":110/pop3}INBOX", $username, $password)
or die("MailRunScript: Keine Verbindung bzw. Login ins Postfach. ".imap_last_error());
// Mail auslesen
$nMessages = imap_num_msg($mailbox);
if($nMessages == 0) {
echo "MailRunScript-> Keine neuen Nachrichten";
exit;
}
//Alle Mails durchlaufen
for($i = 1; $i <= $nMessages; $i++)
{
//Immer Nachricht Nummer 1 abarbeiten, da die vorherige Nummer 1
//bereits expunged (gelöscht) wurde und sich die Numerierung verschoben hat
$header = imap_header($mailbox, 1);
$subject = $header->subject;
$body = imap_fetchbody($mailbox,1,"1");
$absender_email = $header->from[0]->mailbox."@".$header->from[0]->host;
//IPS Nachricht löschen (dadurch wird die nächste wieder
//die Nummer 1 !!
//Auch Mails, die keine Schaltungen verursachen werden
//gelöscht !!! (SPAM, falsche Absender......)
imap_delete($mailbox,1);
imap_expunge ($mailbox);
//Falls Nachrichten nicht gelöscht werden,
//kommt es zu Problemen, falls mehrere
//Nachrichten auf dem Server sind !! (siehe Numerierung immer 1)
//Betreff checken
$pos = strpos($zugelassene_subjects, $subject);
if ($pos === false) { // Achtung: 3 Gleichheits-Zeichen !!!
echo "MailRunScript-> Unzulässiger Betreff in eMail: ".$absender_email."->Stopping MailRunScript";
exit;
}
//E-Mail Inhalt ausführen
$k_auf = strpos($body,"[");
$k_zu = strpos($body,"]");
$script = substr($body, $k_auf + 1 , $k_zu - $k_auf - 1 );
echo "MailRunScript->Skript das ausgeführt werden soll: ".$script;
if (file_exists("c:/Programme/IP-SYMCON/scripts/".$script.".ips.php")) {
$pos = strpos ($zugelassene_absender,$absender_email);
if ($pos === false) { // Achtung: 3 Gleichheits-Zeichen !!!
//NICHT ZULÄSSIGER ABSENDER
echo "MailRunScript-> Unzulässiger Absender in eMail: ".$absender_email."->Stopping MailRunScript";
exit;
} else {
//Zulässiger Absender
IPS_RunScript ($script);
echo "MailRunScript-> E-Mail Ausgeführt: Befehl -> ".$script;
}
//--- Script für Mailversand ---
//* Keine weitere Konfiguration nötig
//Object erstellen
$mail = new SMTP();
//Zum SMTP Server verbinden
if(!$mail->Connect($mailserver_out)) {
echo "MailRunScript-> Error connecting to MAIL SERVER";
exit;
}
//Handshake
if(!$mail->Hello()) {
echo "MailRunScript-> Error in HELLO";
exit;
}
//Anmelden
if(!$mail->Authenticate($username, $password)) {
echo "MailRunScript-> Error in AUTH";
exit;
}
//Mail generieren
$message_out = $script." erfolgreich ausgeführt";
$header_out ="From: \"$sendername\" <$sendermail>".$CRLF;
$header_out.="To: $absender_email".$CRLF;
$header_out.="Subject: $subject_out".$CRLF;
$header_out.=$CRLF;
//Absender angeben
if(!$mail->Mail($sendermail)) {
echo "MailRunScript-> Sender not Accepted";
} else { //empänger
if(!$mail->Recipient($absender_email)) {
echo "MailRunScript-> Receptor not accepted!";
} else {
if(!$mail->Data($header_out.$message_out)) {
echo "MailRunScript-> Error Sending MAIL!";
}
}
}
} else {
echo "MailRunScript-> E-Mail-Anweisung: c:/Programme/IP-SYMCON/scripts/".$script.".ips.php -> Script nicht gefunden -> Stopping MailRunScript".$CRLF;
}
//}
}
// Mailbox schließen
imap_close($mailbox);
?>
smtp und imap.zip (353 KB)