imap Modul nicht verfügbar

@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

Bin jetzt auch soweit, dass ich mein Zuhause von 4.4 auf 5.0 umgestellt haben und dabei auch von Windows auf einen PI umgestiegen bin. Leider bin ich jetzt auch an der Stelle angekommen, an der mir die Imap-Funktionalität fehlt.
Da es bei 4.x beim internen IMAP immer wieder zu Problemen gekommen ist bin ich seit einiger Zeit schon zum Nativen IMAP-Modul von PHP gewechselt. Das Löschen der Mails habe ich ohnehin schon immer darüber gemacht.

Jetzt stehe ich vor dem Problem, dass mir die Funktionen gar nicht zur Verfügung stehen :eek:

Eure Entscheidung das PHP-Modul nicht in IPS unterzubringen kann ich ja noch nachvollziehen aber dann muss das IMAP vom IPS wenigstens die Grundfunktionen unterstützen. Dazu gehört ganz klar das Löschen von Nachrichten! Ich will die Mails automatisiert verarbeiten und dabei keine „Leichen“ im Postfach zurücklassen, die mir dann nach ner Zeit das Genick brechen können :frowning:

Mit dem Abrufen der Mails via IPS kann ich leben aber Löschen muss möglich sein.

Hallo,

hilft Dir das Script IMAP auf Raspberry: Mail löschen (etc) vielleicht?

Gruss
demel

Im nächsten 5.0 Update wird es eine IMAP_DeleteMail und POP3_DeleteMail Funktion geben.

paresy

Perfekt :ok_hand:
Freue mich schon drauf :grinning: