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.