@knusterus @knusterus :
Hallo Volker,
ich weiß, der Thread ist schon alt, aber leider wird der immer noch bei Google relativ weit oben angezeigt, wenn man nach "ioBroker Visualisierung Emails anzeigen" sucht, daher hier meine Antwort.
In folgendem Thema hattest du ja auch schon gepostet:
https://forum.iobroker.net/topic/18501/emails-empfangen
Ich habe das Skript dort adaptiert und lasse mir die Emails in Jarvis anzeigen (müsste für VIS aber ähnlich funktionieren):
// Quelle Original: https://github.com/chirag04/mail-listener2
// Quelle Forum: https://forum.iobroker.net/topic/18501/emails-empfangen
createState("IMAP.Email_Eingang");
createState("IMAP.EmailText");
createState("IMAP.Status");
createState("IMAP.EmailsJSON");
createState("IMAP.Emails");
var MailListener = require("mail-listener2");
var mailListener = new MailListener({
username: "siemens", // hier Email Adresse eintragen
password: "verysecretVeryLong!1eins", // hier Passwort eintragen
host: "192.168.1.10", //Mailserver
port: 993, // imap port
tls: true,
connTimeout: 10000, // Default by node-imap
authTimeout: 5000, // Default by node-imap,
debug: null, // Or your custom function with only one incoming argument. Default: null
tlsOptions: { rejectUnauthorized: false },
mailbox: "INBOX", // mailbox to monitor
searchFilter: ["UNSEEN"], // the search filter being used after an IDLE notification has been retrieved
markSeen: true, // all fetched email willbe marked as seen and not fetched next time
fetchUnreadOnStart: true, // use it only if you want to get all unread email on lib start. Default is `false`,
mailParserOptions: {streamAttachments: false}, // options to be passed to mailParser lib.
attachments: false, // download attachments as they are encountered to the project directory
attachmentOptions: { directory: "attachments/" } // specify a download directory for attachments
});
const aMailAll = [];
mailListener.start();
mailListener.on("server:connected", function(){console.warn("------- imapConnected");});
// IMAP-Status als Logausgabe und in Datenpunkt
mailListener.on("server:connected", function(){setState("IMAP.Status",1);});
mailListener.on("server:disconnected", function(){console.error("------- imapDisconnected");});
mailListener.on("server:disconnected", function(){setState("IMAP.Status",0);});
//
mailListener.on("error", function(err){console.error(err);}); // geändert auf Error im Log,
mailListener.on("mail", function(mail, seqno, attributes){
/* log("Absendeadresse: " + mail.from[0].address);
log("Absendername: " + mail.from[0].name);
log("Betreff: " + mail.subject);
log("Inhalt: " + mail.text); */
if (aMailAll.length > 25) {
aMailAll.shift();
}
let aMailsingle =
{
"Datum" : new Date().toLocaleString(),
"Betreff" : mail.subject
}
;
/* aMailSingle[0] = {};
aMailSingle[0].Datum = mail.date;
aMailSingle[0].Betreff = mail.subject; */
aMailAll.push(aMailsingle);
setState("IMAP.Email_Eingang",mail.from[0].address);
setState("IMAP.EmailText",mail.text);
//log(aMailSingle);
setState("IMAP.Emails",aMailAll);
setState("IMAP.EmailsJSON", JSON.stringify(aMailAll));
});
// mailListener.on("attachment", function(attachment){console.log(attachment.path);});
Ich lege mir ein Array mit Objekten an, in denen der Timestamp und der Betreff hineingeschrieben wird, das könntest du nach belieben erweitern. Im IMAP.EmailsJSON findest du dann die Einträge.
Über den Filter searchFilter: [""] kannst du dir definieren, was du abfragen möchtest;
Ich nutze das, um Status- und Fehlerinformationen meiner SPS im Pferdestall darzustellen, die SPS sendet E-Mails an einen lokalen E-Mailserver und der ioBroker greift über das Skript auf diesen zu.
Vielleicht hilft das dir ja noch, wenn nicht hoffentlich den Menschen, die (wie ich) über google hier gelandet sind.
Viele Grüße!