imap Modul nicht verfügbar

Hallo liebe Symcon-Community,

ich habe mir kürzlich eine Symbox bestellt, um diese Zusammen mit dem IP-Symcon-System und meinen eigen entwickelten Skripts bei meinen Kunden zu installieren.

Entwickelt habe ich die Skripte allesamt auf meinem IPS-System 4.0 auf meinem Windows-PC. Nachdem ich nun heute das Symbox-System bei meinem Kunden in Betrieb nehmen wollte, musste ich leider feststellen, dass das Symbox-System und das IPS-System auf meinem Windows-System nicht identisch sind.

Unter anderem musste ich feststellen, dass die imap-Funktionalität von PHP fehlt, da schon der Befehl „imap_open()“ mit dem Hinweis auf eine unbekannte Funktion fehlschlägt. Dies ist besonders kritisch, da dies eine Kern-Funktion meiner Skripte darstellt. Ich musste daher das System bei meinem Kunden wieder entfernen und diesen auf einen unbekannten späteren Zeitpunkt vertrösten.

Ich hoffe nun sehr, dass mir hier in der Community geholfen wird und sich der Fehler möglichst schnell beseitigen lässt. Über eine Hilfestellung würde ich mich sehr freuen.

Gibt es sonst noch PHP-Module, welche bei der Symbox nicht funktionieren?

Vielen Dank und beste Grüße,
bition

Ist schon länger Thema
IMAP-Fehler Version b8e305638ab9 - Seite 2

Gruß
Bruno

Hallo Bruno,

danke für die schnelle Antwort.

Ich bin mir noch nicht sicher, ob das Thema IPS-IMAP-Connector und PHP-IMAP-Modul zusammen hängen.

Ich möchte gerne ein eingenes PHP-Skript zum Abrufen und Verwalten von meinem IMAP-E-Mails nutzen, da ich ganz besondere Funktionalität benötige. Dazu nutze ich unter anderen die Funktionen
imap_open
imap_search
imap_fetchbody
imap-rfc822-parse-headers

Hängt das bereits bekannte Problem mit meinem Problem, dass Symcon die PHP-Funktionen nicht kennt zusammen?

Danke für die Hilfe,
bition

Servus bition,

ob das 100% oder irgendwie zusammenhängt, keine Ahnung. Das weiss paresy.

Sollte mehr ein Hinweis sein, daß da wohl ein grundsätzliches Problem mit IMAP vorliegt. Helfen kann ich Dir leider nicht bei der Geschichte. :wink:

Schönen Abend
Bruno

@Powerfreddy: Bei dir ist eine E-Mail, welche nicht dekodiert werden kann :slight_smile: Grundsätzlich gibt es kein Problem mit dem IMAP Modul.
@Bition: Wir kompilieren für Linux/RPi/OSX ein eigenes PHP, welches ein festes Set an Extensions mitliefert. Dies ist hier auch entsprechend vermerkt (Systemvoraussetzungen — IP-Symcon :: Automatisierungssoftware) Insbesondere die PHP IMAP Extension werden wir nicht einbinden können, da die Abhängigkeiten beim Erstellen dafür enorm sind und wir unser eigenes IMAP Modul liefern, welches unserer Meinung nach besser in IP-Symcon integriert ist.


phpinfo();

paresy

Hallo paresy,

dazu noch eine Frage: wie kann ich denn dann beispielsweise eine Mail löschen oder als gelesen markieren? Denn das IPS-Imap-Modul kann ja nur die Nachrichten abfragen.
Ich hab meine Unwetterwarnung per Mail am laufen; wenn eine Warnung kommt, liest das System diese aus und löscht die Nachricht, damit das beim nächsten Prüfen der Mails nicht erneut erkannt wird. Und das funktioniert jetzt leider nicht mehr.

Gruß
dfhome

Das ist natürlich auf der SymBox so nicht möglich. Wir können nur die Mail auslesen. Unter Windows kannst du aber wie gewohnt die IMAP Extension nutzen.

paresy

Hmm. Schade. Hab nur noch nen Raspi. [emoji20]

Ich finde das auch sehr schade, dass nicht die komplette IMAP-Funktionalität bei der Symbox zur Verfügung steht.

Insbesondere die Lösch-Funktion imap_delete(), welche dfhome beschrieben hat, ist enorm wichtig für mich, damit Mails nicht mehrfach interpretiert werden. Da alle meine Kunde eine gemeinsame Inbox benutzen, welche von mir zur Verfügung gestellt wird, ist auch deswegen die Lösch-Funktion notwendig, damit das Postfach nicht überläuft. Pro Kunden und Tag kommen zwischen 15 und 20 E-Mails zusammen. Dies sind 7300 Mails für nur einen Kunden in einem Jahr. Ohne Mails zu löschen, schafft das mein Postfach auf Dauer nicht für all meine Kunden.

Ebenso benötige ich sehr dringend die IMAP-Funktionen imap_open() sowie imap_search() damit ich für jeden Kunden einen gefilterten Zugriff (gefiltert nach einem Kundenspezifischen Betreff) erstellen kann und andere Mails, welche nicht für den einen Kunden gedacht sind auch nicht mit ausgewertet werden.

Unter den aktuellen Voraussetzungen kann ich meinen Kunden leider keine Symbox als Hardware-Komponente empfehlen und konfigurieren, da das zentrale Element meiner Skripte nicht unterstützt wird. Ich muss dann schweren Herzens, aber gezwungener Maßen wieder Zurückfallen und meinen Kunden ein eigenes Hardware-System zusammen stellen. Ich hoffe dennoch sehr, dass sich hieran zeitnah etwas ändert und ich nicht nur die Software, sondern auch die komplette Hardware von Symcon nutzen kann.

Beste Grüße,
bition

bei mir kommt bei folgendem Befehl

$mbox*=*imap_open($hostname,$username,$kennwort);

die Fehlermeldung :

Fatal error: Call to undefined function *imap_open() in C:\IP-Symcon\scripts\30425.ips.php on line 28
Abort Processing during Fatal-Error: Call to undefined function *imap_open()

offensichtlich fehlt das Imap Modul im IPS

Wie kann ich sonst alte Mails löschen ?

Viele Grüße
Georg

Hast du die IMAP Extension denn installiert bei dir im Ext Ordner? (php_imap.dll)

paresy

Da sind wieder * im Code anstatt Leerzeichen.
Wenn du es aus dem Forum kopiert hast, nimm Mal einen anderen Browser.
Michael

php_imap.dll aus PHP 5.6.3 X64 ist im Ext-Verzeichnis und in der PHP.ini vorhanden.
Trotzdem kommt die Fehlermeldung

Hallo
Das hat eigentlich noch nichts zu sagen.
Wichtig ist ob beim Starten von IPS im Logfile ein „IMAP geladen“ auftaucht
oder eine Fehlermeldung.
Schau mal da nach.

Falsch:

Richtig:
$mbox = imap_open($hostname,$username,$kennwort);

Michael

klappt jetzt, war anscheinend doch die falsche Version im Ext-Verzeichnis

Hallo Zusammen,

Bin mit meinem IPS vor einigerzeit auf einen PI umgestiegen. Bis jetzt läuft alles sehr gut bin aber jetzt noch mit meiner letzten Script anpassug am kämpfen. Ich habe mit hilfe des Forum ein Script gebaut welches E-Mails abruft und Schaut ob eine Mülltone abgeholt wird. Wenn ja trgae ich den Termin im Googel-Karlender ein und lösche die Mails.

Nun habe ich verstanden das es mit einem PI nicht mehr machbar ist. :frowning:

Aber hat jemand eine Idee wie ich das Problem lösen kann ??

Anbei auch mal mein Script.

<?

// =====================================================
// Abfallmail auslesen
// =====================================================

// Variablen einlesen bzw. Festlegen
//------------------------------------------------------

$Uhrzeit = date('H:i:s');

$MailServer = 35825 /*[Mail\E-Mail empfangen (IMAP)]*/;

//#################################### Bitte einstellen #####################################################################
$Calender_ID                   =     "Max.Mustermann@googlemail.com";
$Client_ID                    =  "164652644.apps.googleusercontent.com";
$EMail                           =  "24646461614@developer.gserviceaccount.com";
$key_file_location           =  IPS_GetKernelDir()."scripts/certificates/IPS-Kalender-9de3f4b5ae3c.p12";
//$id_ausfuehrung = 44514 /*[Skripte\Skripte\Karlender\Termine Eintragen\Einstellen]*/; // ID vom Ausführscript
//###########################################################################################################################

// Zeiten für Googel eintrag
$StartHour = "08";
$StartMinute ="00";
$EndHour = "12";
$EndMinute ="00";

$Where = "Am Brackler Ostholz";

// Script Ablauf
//------------------------------------------------------

// Auwerten wieviele Ungelesene Mails sich im Post eingang befinden;
$text1 = GetValue(34847 /*[Mail\E-Mail empfangen (IMAP)\Unread_messages]*/);
$text2 = "Es befinden sich $text1 ungelesene Mails im Post Eingang";
$id_Anzeige_Email = 34911 /*[Mail\E-Mail empfangen (IMAP)\Anzeige_Email]*/;
SetValue($id_Anzeige_Email, $text2);

$tonne = "";

$mbox = IMAP_GetCachedMails($MailServer);

// 						E-Mails durchsuchen
//==============================================================================
for ($i = 0; $i < count($mbox); $i++) {
        $subject = $mbox[$i]['Subject'];
        if (preg_match('/digitaler Abfallkalender/', $subject) == true) { 
           $mail = IMAP_GetMailEx($MailServer, $mbox[$i]['UID']); // E-Mail mit passenden betraff abrufen
           $text = $mail['Text']; 								  // Mailtext in Variable schreiben
		   
		   // Suche welche Tonne gelert werden soll
		   If (preg_match('/Restabfalltonne/', $text) == true) {$tonne = "Restabfalltonne";}
		   If (preg_match('/Bioabfalltonne/', $text) == true) {$tonne = "Bioabfalltonne";}
		   If (preg_match('/Wertstofftonne/', $text) == true) {$tonne = "Wertstofftonne";} 
		   If (preg_match('/Altpapiertonne/', $text) == true) {$tonne = "Altpapiertonne";}
		   
		   // Termin Informationen für Googel vorbereiten
		   $datum = $mbox[$i]['Date'];   // E-Mail Einangsdatum
		   $StartYear = date ('Y' ,$datum);
		   $StartMonth = date ('m' ,$datum);
		   $StartDay = date ('d' ,$datum)+1;
		   $datum = date ('Y-m-d' ,$datum);
		   $Description = "$tonne wird abgeholt";
			 
		   //E-Mail Löschen
		   If($_IPS['SENDER'] != "Execute"){
		   		$imap = imap_open("{bla.imap.de:993/imap/ssl}", "haus@bla.de", "passwort");
                $retval = imap_search($imap, 'SUBJECT "digitaler Abfallkalender"');
                if ($retval != false) {
                    imap_delete($imap, $retval[0]);
                    imap_expunge($imap);
                    imap_close($imap);
		    		}
		  }
		}
	}
//print_r ($mbox);

// 						Googel Kalendereintag erstellen
//==============================================================================
If($_IPS['SENDER'] != "Execute" and $tonne != ""){
	
	//benötigte Funktionen/Klassen
	// ===========================================
	set_include_path(IPS_GetKernelDir()."scripts\\google-api-php-client\\src");
	require_once 'google-api-php-client/autoload.php';
	
	// Die Verbindung zum Kalender aufbauen
	// ===========================================
	$client = new Google_Client();
	$client->setApplicationName("Kalender");
	$service = new Google_Service_Calendar($client);
	$key = file_get_contents($key_file_location);
	$cred = new Google_Auth_AssertionCredentials($EMail, array('https://www.googleapis.com/auth/calendar'), $key);
	$client->setAssertionCredentials($cred);

	// Event schreiben
	//============================================
	$event = new Google_Service_Calendar_Event();
	$event->setSummary($Description);
	$event->setLocation($Where);
	$event->setDescription($Description);
	
	$start = new Google_Service_Calendar_EventDateTime();
	$end = new Google_Service_Calendar_EventDateTime();

    $start = new Google_Service_Calendar_EventDateTime();
    $start->setDateTime($StartYear."-".$StartMonth."-".$StartDay."T".$StartHour.":".$StartMinute.":00.000+01:00");
    $start->setTimeZone('Europe/Berlin');
    $event->setStart($start);
    $end = new Google_Service_Calendar_EventDateTime();
    $end->setDateTime($StartYear."-".$StartMonth."-".$StartDay."T".$EndHour.":".$EndMinute.":00.000+01:00");
    $end->setTimeZone('Europe/Berlin');
    $event->setEnd($end);
	
	$createdEvent = $service->events->insert($Calender_ID, $event);
}


// 								Testanzeige
//==============================================================================
if($_IPS['SENDER'] == "Execute")
{
    echo "<pre>";
    echo " Ausführungszeit: $Uhrzeit  
";
    		If ($tonne != ""){echo " Welche Tonne wird geholt: $tonne  
";
							  echo " Mail empfangsdatum: $datum 
";
							  echo " Googel Startzeit: $StartYear-$StartMonth-$StartDay $StartHour:$StartMinute 
";
					    	  echo " Googel Endzeit: $StartYear-$StartMonth-$StartDay $EndHour:$EndMinute"; 
							  echo " 
 Mailtext: $text  
";}
	else { echo " Kein E-Mail gefunden 
";}
    echo " Variable 4 
" ;
}
?>

Gruß Stephan

Hallo,
ich habe inzwischen in meiner IPS Windows Umgebung das gleiche Problem, habe die DLL aus dem PHP-Windows-X86-ZIP (PHP 5.6.36) genommen und bekomme in den Skripten den gleichen Fehler. Welche Version aus welchem PHP-Archiv hast Du denn final und erfolgreich verwendet?

Danke Dir & viele Grüße
Detlefp

Du müsstest auch die X64 und TS Variante nutzen :slight_smile:

paresy

Vielen Dank! Jetzt funktioniert es auch und ich hab nur noch mit Zertifikatsfehlern zu tun. :slight_smile:

IPS4.4 mit Eaton xComfort