IMAP auf Raspberry: Mail löschen (etc)

in verschieben Posts wurde nach dem Löschen von IMAP-Mail auf dem raspberry gefragt.

Da das IPS-eigene PHP ja nicht die imap-Funktionalität umfasst (hier) und das Hinzufügen von ‚php_imap.dll‘ nur unter Windows funktionieren kann, benutze ich auf dem raspberry die folgende Funktion:


<?

function Imap_Request($instID, $url_pfx, $request) {

    $cfg = json_decode(IPS_GetConfiguration($instID), true);
    $host = $cfg['Host'];
    $port = $cfg['Port'];
    $username = $cfg['Username'];
    $password = $cfg['Password'];

    $url = 'imaps://' . $host . ':' . $port . '/' . $url_pfx;

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $request);
    curl_setopt($ch, CURLOPT_USERPWD, $username . ':' . $password);

    $response = curl_exec($ch);
    $errno = curl_errno($ch);

    curl_close($ch);

    if ($errno) {
        echo "Imap_Request: gor error $errno
";
        return(false);
    }

    // echo "response=$response
";
    return(true);

}

function Imap_DeleteMessage($instID, $uid) {

    $request = 'UID STORE ' . $uid . ' +FLAGS \DELETED';
    $ret = Imap_Request($instID, 'INBOX/', $request);

    if ($ret) {
        $ret = Imap_Request($instID, 'INBOX/', 'EXPUNGE');
    }

    return $ret;
}

?>

Aufruf:


Imap_DeleteMessage(1234 /*IMAP-Abruf-Instanz*/, 4 /* UID */);

Die Mail ist im Mailaccount gelöscht und nach der nächsten Aktualisierung des IMAP-Caches auch im IPS nicht mehr vorhanden.

Mit dem curl-Interface kann man nicht nur löschen, es steht einem damit auch grundsätzlich die komplette IMAP-Funktionalität zur Verfügung, wie Verschieben von Mails, (gelesen/ungelesen) markieren etc.

weitere Informationen siehe zB. hier:
https://curl.haxx.se/mail/lib-2013-03/0104.html, https://www.phpgangsta.de/das-imap-protokoll-im-detail-betrachtet, https://debian-administration.org/article/726/Performing_IMAP_queries_via_curl, …

Ob curl auch auf Symbox in einer entsprechenden Version vorhanden ist kann ich mangels Testmöglichkeit nicht sagen, bei Debian-Systemen sollte es verfügbar sein.

Auf Shell-Ebene kann man das natürlich auch leicht testen


curl --insecure --url "imaps://<host>:<port>/" --user "<username>:<password>"

sollte z.B. das ergebe


* LIST (\HasChildren) "/" "INBOX"
* LIST (\HasNoChildren) "/" "INBOX/Junk"
* LIST (\HasNoChildren) "/" "INBOX/Draft"
* LIST (\HasNoChildren) "/" "INBOX/Trash"
* LIST (\HasNoChildren) "/" "INBOX/Sent"

Hinweis: nicht bei jedem Mailserver lautete das Root-Verzeichnis „INBOX“ bzw sind Mailordner unterhalb von „INBOX“ zu
finden. GGfs. muss die URL (url_pfx bei Aufruf Imap_Request()) von dann angepasst werden.