Auswertung von Mailinhalten

Moin Moin,
aktuell suche ich nach einer Herangehensweise, um Mail-Betreffs und Inhalte von eingehenden Mails auswerten zu können.

Auswertung:

  • Betreff

  • Wertigkeit Prüfen
    -> Nicht eingegangen - 0
    -> Error - 1
    -> Success - 2

  • Mit der Auswertung sollen die entsprechenden Daten in einem Array hinterlegt werden, um anschließend die ausgewerteten Mails an Ordner A oder Ordner B zuschicken. Falls keine Mail eingegangen ist(wo an dieser stelle, die Information aus dem Array greifen soll), sollte eine Mail mit dem entsprechenden Inhalt an eine bestimmte Person geschickt werden.

Das Ganze soll nun über IP-SymCon/PHP realisiert werden.
Bisherige Ansätze sind:

  • via POP3 die Mails abfangen und anschließend in einem Skript die Mails auszuwerten.

Meine Hauptanliegen aktuell:

  • Wie schaffe ich es, Mails über ein PHP Skript aus der „E-Mail, Receive (POP3)“ auszuwerten.
  • Wie kann ich die ausgewerteten Mails weiterschicken
  • Wie kann ich bei nicht eintreten einer Mail aus dem Skript heraus eine Info an eine Person schicken.

In der Hoffnung, dass ich hier den richtigen Platz für meine Frage gefunden habe, danke ich schon mal für jeden Support.

//Grundkenntnisse in PHP und noch keine Erfahrungen im Umgang mit IPS [eine andere Umsetzung als IPS ist keine Option]
Ich bin mir unsicher, ob dies Schaltbefehle per E-Mail an IP-Symcon schicken bereits eine Grundlage liefert oder ob ich da eine andere Herangehensweise braucht.

Hallo,

ich habe zwar keinen Abruf via POP3 sonder IMAP, aber das dürfte ähnlich sein.

Unsere Abfallentsorger schickt am Tag vor der Entsorgung eine Mail, die ich dann auswerte und in eine von drei Variablen (graue/gelbe/blaue Tonne) das angekündigte Datum einsetze.

Er geht alle Nachrichten durch und in jeder Nachricht alle Zeilen um da ein bestimmtes Muster zu erkennen („xx.xx.xxxx Abfuhr graue Tonne“).

Nach erfolgreicher Verarbeitung dieser Nachricht wird diese gelöscht.

Getriggert wird das Script bei einer Änderung der Variable „ungelesenen Nachricht“ der Instanz „IMAP-Abruf“.


<?php

declare(strict_types=1);

$scriptName = IPS_GetName($_IPS['SELF']) . '(' . $_IPS['SELF'] . ')';
$scriptInfo = IPS_GetName(IPS_GetParent($_IPS['SELF'])) . '\\' . IPS_GetName($_IPS['SELF']);

$inbox = IMAP_GetCachedMails(17633);
foreach ($inbox as $item) {
    $subject = $item['Subject'];
    $uid = $item['UID'];
    $date = date('d.m.Y H:i:s', $item['Date']);
    IPS_LogMessage($scriptName, $scriptInfo . ': Mail #' . $uid . ' von ' . $date . ': "' . $subject . '"');

    $msg = IMAP_GetMailEx(17633, $uid);
    $text = $msg['Text'];
    $lines = explode("
", $text);

    $n = 0;
    $goodcount = 0;
    $failcount = 0;
    foreach ($lines as $line) {
        $r = preg_replace('/^- [^,]*, ([0-9\.]*) Abfuhr ([A-Za-z]*).*$/', '$1;$2', $line);
        if ($r != $line) {
            $vals = explode(';', $r);
            switch (strtolower($vals[1])) {
                case 'grau':
                    $oid = 25592;
                    break;
                case 'gelb':
                    $oid = 39213;
                    break;
                case 'blau':
                    $oid = 39628;
                    break;
                default:
                    $oid = '';
                    break;
            }
            if ($oid) {
                $ts = intval(strtotime($vals[0]));
                SetValueInteger($oid, $ts);
                IPS_LogMessage($scriptName, $scriptInfo . ':  ... decoded line #' . $n . ' "' . $line . '"');
                $goodcount++;
            } else {
                echo 'unable to decoded line #' . $n . ' "' . $line . '"' . "
";
                $failcount++;
            }
        }
        $n++;
    }

    if ($goodcount && !$failcount) {
        Imap_DeleteMessage(17633, $uid);
    }
}

demel