NEWS
Test Adapter ioBroker.imap latest/stable
-
Wäre zumindest ein Workarround.
Mal schauen ob ich das im Blockly schaffe.Ist das evtl eine Möglichkeit die Funktion "Mail löschen" in den Adapter einzubauen die im Hintergrund so arbeitet?
-
@david-g Du kannst gerne mal von GIT laden.
Zum anlegen oder löschen muss ZWINGEND die inbox + delimiter voran setzen. Siehe Beispiel im Objekt imap.0.xxx.remote.change_folder
"states": { "INBOX": "INBOX", "INBOX.Spam": "INBOX.Spam", "INBOX.Drafts": "INBOX.Drafts", "INBOX.Sent": "INBOX.Sent", "INBOX.Trash": "INBOX.Trash", }
<inbox><delimiter>Spam
Um den Ordner imap anzulegen muss ich also INBOX.imap eintragen.
Neuen Ordner anlegen:
.remote.mailbox_folder_createDann mit move die gewünschten Mails dort einfügen und damit wieder löschen.
.remote.mailbox_folder_deleteGruß//Lucky
-
Cool,
das klappt wunderbar.
Ich habe ein Postfach was als "trigger" für manche Scripte dient von Geräten die Mails senden können und keine http Befehle senden können.
Jetzt kann man den Kram direkt löschen. -
@lucky_esa sagte in Test Adapter ioBroker.imap latest/stable:
Es tut mir Leid aber über imap kann man keine Mails löschen. Du kannst diese nur in den Mülleimer verschieben.
Ich habe eben folgendes gelesen im Bezug auf imap:
1. Sie löschen eine E-Mail → Die E-Mail wird in den Papierkorb verschoben. 2. Sie leeren den Papierkorb → Die E-Mail wird als gelöscht markiert (\Deleted). 3. Der Mail-Client führt den Expunge-Befehl aus → Die E-Mail wird endgültig vom Server entfernt. Unterschiedliche Implementierungen Einige Mail-Clients wie Gmail nutzen eine spezielle Implementierung: Hier wird das Verschieben in den Papierkorb direkt als Löschaktion betrachtet. Wird der Papierkorb geleert, ist die E-Mail sofort weg. Das Löschen von E-Mails im Papierkorb funktioniert, weil der Mail-Client in der Regel den Expunge-Befehl ausführt. Ohne diesen Befehl bliebe die E-Mail technisch noch vorhanden, wäre aber als gelöscht markiert und für den Benutzer unsichtbar.
Kann man diesen "Expunge-Befehl" nicht irgewie ausführen?
Evtl wäre das eine sauberer Lösung. -
@david-g Du kannst die Mails direkt in den Papierkorb verschieben
[Google Mail]/PapierkorbVorher noch den Flag Delete mit imap.0.xxx_gmail_com.remote.flag setzen
Gruß//Lucky
-
Der Weg wäre doch dann viel "simpler" als das mit dem Ordner anlegen und diesen wieder zu löschen oder?
Wenn er auf diesem Weg auch die Mail löscht.
P. S.
Muss das verschieben nach dem Flaf noch sein? Wenn ich Deleted setze finde ich die Mail mit keinem Mailclient wieder. -
Muss das verschieben nach dem Flaf noch sein? Wenn ich Deleted setze finde ich die Mail mit keinem Mailclient wieder.
Wenn die Mail weg ist dann funktioniert das löschen wohl so.
Gruß//Lucky
-
@lucky_esa sagte in Test Adapter ioBroker.imap latest/stable:
Datei_kopieren
Hallo @lucky_esa könntest Du mir vielleicht mit dem Script weiterhelfen.
Der Anhang wird anstandslos im entsprechenden Verzeichnis gespeichert.
Die Datei, wird aber weder umbenannt, noch kann diese gelöscht werden.
Per Telegram bekomme ich auch nur den Pfad zur Datei (/opt/iobroker/iobroker-data/files/0_userdata.0/Anrufe/Anrufbeantworter.wav)javascript.0 2025-01-10 18:07:35.354 error at process.processTimers (node:internal/timers:519:7) javascript.0 2025-01-10 18:07:35.354 error at listOnTimeout (node:internal/timers:581:17) javascript.0 2025-01-10 18:07:35.354 error at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:3219:34) javascript.0 2025-01-10 18:07:35.354 error at Object.<anonymous> (script.js.Test.Skript_1:66:20) javascript.0 2025-01-10 18:07:35.354 error at ProtectFs.unlink (/opt/iobroker/node_modules/iobroker.javascript/lib/protectFs.js:78:9) javascript.0 2025-01-10 18:07:35.354 error at checkProtected (/opt/iobroker/node_modules/iobroker.javascript/lib/protectFs.js:21:19) javascript.0 2025-01-10 18:07:35.354 error Error in callback: Error: Permission denied javascript.0 2025-01-10 18:07:35.353 error May not read /opt/iobroker/iobroker-data/files/0_userdata.0/Anrufe/10.01.25_14.49_Anruf.XXXXXXXXX.wav - use writeFile instead javascript.0 2025-01-10 18:07:28.354 error at process.processTimers (node:internal/timers:519:7) javascript.0 2025-01-10 18:07:28.354 error at listOnTimeout (node:internal/timers:581:17) javascript.0 2025-01-10 18:07:28.354 error at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:3219:34) javascript.0 2025-01-10 18:07:28.354 error at Object.<anonymous> (script.js.Test.Skript_1:60:41) javascript.0 2025-01-10 18:07:28.354 error Error in callback: ReferenceError: Datei_kopieren is not defined
Ich vermute, dass sich der eine oder andere Befehl geändert hat.
Ein Blockly wäre mir eigentlich am liebsten. Leider fehlt mir der Ansatz dazu.Vielen Dank
-
-
@lucky_esa sagte in Test Adapter ioBroker.imap latest/stable:
@bahnuhr Leider hatte ich noch 2 Fehler. Bitte neu vom GIT laden. Sorry für die Umstände aber ich bekomme den Adapter nicht in latest da apollo77 keine Zeit hat.
Versuche dann mal dieses Blockly zu importieren.
Gruß//Lucky
Das hier ist das Blockly, was ich hier gefunden habe.
Das Spuckt mir aber immer eine Fehlermeldung aus.javascript.0 2025-01-11 06:33:16.859 error script.js.Test.AB: Cannot parse "timeout": SyntaxError: Unexpected token 'i', "timeout" is not valid JSON imap.0 2025-01-11 06:32:56.860 error Fehlende Fetch meine_mailadresse_de
Habe gedacht, das ich mir damit den Mailanhang per Telegram schicken kann.
Dann habe ich das Javascript von Dir gefunden:
// Datei vom Anrufbeantworter speichern und per telegram senden function weiter() { // Variablen var i, result, j, json, fs = require('fs'), vText = "", vUser = "Dieter"; var uid = getState("imap.0.ppc_dbrp-mueller_de.email.email_01.uid").val; var subject = getState("imap.0.ppc_dbrp-mueller_de.email.email_01.subject").val; var text = getState("imap.0.ppc_dbrp-mueller_de.email.email_01.text").val; // Script if (text.indexOf("Anrufbeantworter") > - 1) { // Anrufbeantworter ist im Text enthalten // Variablen var Anruf_von = text.substring(text.indexOf("Der Anrufer:") + 13, text.indexOf("hat für Sie") - 1) var Datum = text.substring(text.indexOf("Datum:") + 7, text.indexOf("Uhrzeit") - 1) var Uhrzeit = text.substring(text.indexOf("Uhrzeit:") + 9, text.indexOf("Aufnahme") - 1) var Laenge = text.substring(text.indexOf("Aufnahme") + 15, text.indexOf("Die Weiter") - 2) + " (min/sek)" // Datei speichern sendTo("imap.0", "getIMAPRequest", { name: "ppc@dbrp-mueller.de", max: 20, search: '["ALL"]', fetch: JSON.parse('{"fetch": true, "uid": [' + uid + ']}'), bodie: '{bodies: "", markSeen: false}', parse: true, }, async function (result) { if (!result) { log("No result found!"); return; } for (var i_index in result) { i = result[i_index]; var j_list = getAttr(i, 'body.attachments'); for (var j_index in j_list) { j = j_list[j_index]; json = JSON.stringify(getAttr(j, 'content')); //log(getAttr(j, 'filename')); writeFile('vis.0', '/Anrufe/'+ getAttr(j,'filename'), JSON.stringify(getAttr(json, 'data')), function (error) { if(error) { log('Fehler beim Speichern von Datei ' + getAttr(json, 'filename') +' Fehler:' + error, 'warn'); } else { log('Datei: ' + getAttr(j, 'filename') +' wurde gespeichert'); } }); // Datei kopieren mit anderem Filenamen setTimeout(function() { Datei_kopieren("/opt/iobroker/iobroker-data/files/vis.0/Anrufe/" + getAttr(j, 'filename'), "/opt/iobroker/iobroker-data/files/vis.0/Anrufe/Anrufbeantworter.wav"); }, 3000); // Datei wieder löschen setTimeout(function() { fs.unlink("/opt/iobroker/iobroker-data/files/vis.0/Anrufe/" + getAttr(j, 'filename'), function (err) { if (err) throw err; log('Datei: ' + getAttr(j, 'filename') + ' wurde gelöscht.'); }); fs.unlink("/opt/iobroker/iobroker-data/files/vis.0/Anrufe/Anrufbeantworter.wav", function (err) { if (err) throw err; log('Datei: Anrufbeantworter.wav wurde gelöscht.'); }); }, 10000); // Datei per telegram versenden setTimeout(function() { vText = "Anruf von: " + Anruf_von + "\nDatum: " + Datum + "\nUhrzeit: " + Uhrzeit + "\nAufnahme: " + Laenge; log (vText); //vText = "test"; sendTo('telegram.0', {user: vUser, text: '/opt/iobroker/iobroker-data/files/vis.0/Anrufe/Anrufbeantworter.wav', caption: vText}); }, 5000); } } }); } else { log ("Anrufbeantworter ist im Text nicht enthalten; Script wird abgebrochen."); } } on({id: "imap.0.ppc_dbrp-mueller_de.email.email_01.uid", change: "ne"}, function(obj) { // uid von Email 1 hat sich geändert log("Auslöser Email imap hat sich geändert; UID= " + obj.state.val); weiter(); }); weiter();
Hier habe ich eigentlich nur den Speicherpfad angepasst (auch mit dem originalen kommt diese Fehlermeldung)
// Datei vom Anrufbeantworter speichern und per telegram senden function weiter() { // Variablen var i, result, j, json, fs = require('fs'), vText = "", vUser = "Telegramuser"; var uid = getState("imap.0.meine_mail_de.email.email_01.uid").val; var subject = getState("imap.0.meine_mail_de.email.email_01.subject").val; var text = getState("imap.0.meine_mail_de.email.email_01.text").val; // Script if (text.indexOf("Anrufbeantworter") > - 1) { // Anrufbeantworter ist im Text enthalten // Variablen var Anruf_von = text.substring(text.indexOf("Der Anrufer:") + 13, text.indexOf("hat für Sie") - 1) var Datum = text.substring(text.indexOf("Datum:") + 7, text.indexOf("Uhrzeit") - 1) var Uhrzeit = text.substring(text.indexOf("Uhrzeit:") + 9, text.indexOf("Aufnahme") - 1) var Laenge = text.substring(text.indexOf("Aufnahme") + 15, text.indexOf("Die Weiter") - 2) + " (min/sek)" // Datei speichern sendTo("imap.0", "getIMAPRequest", { name: "meine@mail.de", max: 20, search: '["ALL"]', fetch: JSON.parse('{"fetch": true, "uid": [' + uid + ']}'), bodie: '{bodies: "", markSeen: false}', parse: true, }, async function (result) { if (!result) { log("No result found!"); return; } for (var i_index in result) { i = result[i_index]; var j_list = getAttr(i, 'body.attachments'); for (var j_index in j_list) { j = j_list[j_index]; json = Buffer.from(getAttr(j, 'content'));; //log(getAttr(j, 'filename')); writeFile('0_userdata.0', '/Anrufe/'+ getAttr(j,'filename'), json, function (error) { if(error) { log('Fehler beim Speichern von Datei ' + getAttr(json, 'filename') +' Fehler:' + error, 'warn'); } else { log('Datei: ' + getAttr(j, 'filename') +' wurde gespeichert'); } }); // Datei kopieren mit anderem Filenamen setTimeout(function() {Datei_kopieren ("/opt/iobroker/iobroker-data/files/0_userdata.0/Anrufe/" + getAttr(j, 'filename'), "/opt/iobroker/iobroker-data/files/0_userdata.0/Anrufe/Anrufbeantworter.wav"); }, 3000); // Datei wieder löschen setTimeout(function() { fs.unlink ("/opt/iobroker/iobroker-data/files/0_userdata.0/Anrufe/" + getAttr(j, 'filename'), function (err) { if (err) throw err; log('Datei: ' + getAttr(j, 'filename') + ' wurde gelöscht.'); }); // fs.unlink("/opt/iobroker/iobroker-data/files/0_userdata.0/Anrufe/Anrufbeantworter.wav", function (err) { if (err) throw err; // log('Datei: Anrufbeantworter.wav wurde gelöscht.'); }); }, 10000); // Datei per telegram versenden // setTimeout(function() { // vText = "Anruf von: " + Anruf_von + "\nDatum: " + Datum + "\nUhrzeit: " + Uhrzeit + "\nAufnahme: " + Laenge; // log (vText); //vText = "test"; // sendTo('telegram.0', {user: vUser, text: '/opt/iobroker/iobroker-data/files/0_userdata.0/Anrufe/Anrufe/Anrufbeantworter.wav', caption: vText}); // }, 5000); } } }); } else { log ("Anrufbeantworter ist im Text nicht enthalten; Script wird abgebrochen."); } } on({id: "imap.0.meine_mail_de.email.email_01.uid", change: "ne"}, function(obj) { // uid von Email 1 hat sich geändert log("Auslöser Email imap hat sich geändert; UID= " + obj.state.val); weiter(); }); weiter();
das spuckt mir aber die Fehlermeldungen aus:
javascript.0 2025-01-10 18:07:35.354 error at process.processTimers (node:internal/timers:519:7) javascript.0 2025-01-10 18:07:35.354 error at listOnTimeout (node:internal/timers:581:17) javascript.0 2025-01-10 18:07:35.354 error at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:3219:34) javascript.0 2025-01-10 18:07:35.354 error at Object.<anonymous> (script.js.Test.Skript_1:66:20) javascript.0 2025-01-10 18:07:35.354 error at ProtectFs.unlink (/opt/iobroker/node_modules/iobroker.javascript/lib/protectFs.js:78:9) javascript.0 2025-01-10 18:07:35.354 error at checkProtected (/opt/iobroker/node_modules/iobroker.javascript/lib/protectFs.js:21:19) javascript.0 2025-01-10 18:07:35.354 error Error in callback: Error: Permission denied javascript.0 2025-01-10 18:07:35.353 error May not read /opt/iobroker/iobroker-data/files/0_userdata.0/Anrufe/10.01.25_14.49_Anruf.XXXXXXXXX.wav - use writeFile instead javascript.0 2025-01-10 18:07:28.354 error at process.processTimers (node:internal/timers:519:7) javascript.0 2025-01-10 18:07:28.354 error at listOnTimeout (node:internal/timers:581:17) javascript.0 2025-01-10 18:07:28.354 error at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:3219:34) javascript.0 2025-01-10 18:07:28.354 error at Object.<anonymous> (script.js.Test.Skript_1:60:41) javascript.0 2025-01-10 18:07:28.354 error Error in callback: ReferenceError: Datei_kopieren is not defined
In den Script habe ich halt nur die vorhandenen Einstellungen an meine eigenen angepasst.
Seit AVM irgendetwas am Codec der Aufnahmedatei geändert hat, kann ich diese nicht mehr mit Spexx in ein wav konvertieren und suche jetzt halt nach einer Alternative, die funktioniert. -
@falke69 Ich verstehe das mit dem kopieren nicht aber egal. Als erstes bitte mal das hier entfernen Datei_kopieren damit die erste Fehlermeldung weg ist. Zum kopieren, schreiben oder löschen immer die Wrappers (Funktion von Java bzw. iobroker) nehmen und nicht fs!
Weiter oben ist doch ein Script...Ich schau mal ob das auch mit Blockly geht...Melde mich...Hier mal ein Blockly als Bsp.
common.Skript_104.xmlUnter Aktion gibt es noch ein Blockly womit du die Datei einlesen kannst und dann per Telegram versenden.
Der Blockly Data hat dann das Attachment.Gruß//Lucky
-
Perfekt!
Funktioniert wunderbar.
Jetzt bekomme ich wieder meine Nachrichten von der Fritzbox per Telegram.Ich wünsche Dir noch ein schönes Wochenende.