Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Emails empfangen.

    NEWS

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    Emails empfangen.

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      Marty56 last edited by

      Ich möchte Emails empfangen und weiterverarbeiten.

      Dazu habe ich von https://github.com/chirag04/mail-listener2 im Javascript Adapter mail-listener2 installiert und das

      Beispiel vom GitHub geringfügig angepasst.

      schedule("*/15 * * * *", function (obj) {
          var MailListener = require("mail-listener2");
          var mailListener = new MailListener({
            username: "<email adresse="">",    // hier Email Adresse eintragen
            password: "<passwort>",	      // hier Passwort eintragen	
            host: "imap.gmail.com",
            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: true}, // 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
          });
      
          mailListener.start();
          mailListener.on("server:connected", function(){console.log("imapconconnected");});
          mailListener.on("server:disconnected", function(){console.log("imapDisconnected");});
          mailListener.on("error", function(err){console.log(err);});
          mailListener.on("mail", function(mail, seqno, attributes){
              log(mail.from[0].address);
              log(mail.from[0].name);
              log(mail.subject);
              log( mail.text);
              var mailobj = {val:
                      {
                          from:  mail.from[0].name,
                          topic: mail.subject,
                          text:  mail.text
                      }
                  };
              setState("Email_Reception",mailobj);
          });
          mailListener.on("attachment", function(attachment){console.log(attachment.path);});
          setTimeout(function(){mailListener.stop();},20000);
      });</passwort></email> 
      

      Es scheint zu funktionieren. In dem State "Email_Reception" wird ein Object gesetzt, das Absender, Betreff und den Text enthält.

      Die Auswertung machen ich in anderen Skripten, die dann durch den State Email_Reception getriggert werden

      Ich stoße diese Abfrage alle 15 Minuten an und gehe nach 20 Sekunden wieder auf disconnected.

      Spricht etwas dagegen die ganze Zeit verbunden zu bleiben bzw. spricht grundsätzlich etwas gegen dieses Vorgehen?

      1 Reply Last reply Reply Quote 1
      • wendy2702
        wendy2702 last edited by

        Wenn du ein IMAP Konto benutzt kannst du die eigentlich die ganze Zeit verbunden bleiben.

        Wüsste nichts was dagegen spricht.

        Habe das mal so ähnlich genutzt, auf einer anderen Plattform. Da gab es keine Probleme

        1 Reply Last reply Reply Quote 0
        • V
          vogtländer last edited by

          Hallo Marty56,
          ich bin gerade am selben Projekt wie du. Ich möchte im iobroker E-Mails empfangen und weiterverarbeiten. Ich benutze das selbe Script wie du.
          Soweit ich das sehen kann wird auch eine Verbindung zu meinem Email-Postfach aufgebaut. Ich kann aber das Objekt "Email_Reception" nicht finden bzw. auswerten. Wenn ich das richtig verstanden habe sollte "Email_Reception" ein Datenpunkt sein. Es wäre toll wenn du mir erklären könntest wie du das 'Script weiterverarbeitest.

          M 1 Reply Last reply Reply Quote 0
          • P
            pix last edited by

            Hallo,

            das liest sich sehr interessant. Ich brauche auch einen Email Eingang, um Werte in ioBroker zu setzen. Bisher habe ich auf den Node in Node Red gesetzt, bin aber noch nicht dazu gekommen, etwas zu bauen.
            Bildschirmfoto 2019-02-19 um 09.29.03.jpg

            Gruß
            Pix

            M 1 Reply Last reply Reply Quote 0
            • M
              Marty56 @vogtländer last edited by

              @vogtländer sagte in Emails empfangen.:

              Email_Reception

              Email_Reception einfach mit createState anlegen.

                      var mailobj = {val:
                              {
                                  from:  "",
                                  topic: "",
                                  text: "")
                              }
                          };
                      createState("Email_Reception",mailobj);
              

              Es wird in dem Script mit einem Object beschreiben, dass from, topic und text enthält.
              Auf den Datenpunkt kannst Du dann triggern.
              Auf die Werte kann Du dann dort mit
              obj.state.val.topic, obj.state.val.from und obj.state.val.text zugreifen.

              P Neuschwansteini 2 Replies Last reply Reply Quote 1
              • M
                Marty56 @pix last edited by

                @pix Hatte ich auch mal.
                Aber Node Red hat einen ziemlichen Speicherbedarf.
                Außerdem habe ich nach einem längeren Test von Node Red erkannt, dass ich mit Javascript erheblich schneller bin als mit Node Red. Für mich war Node Red - bis auf ein paar Ausnahmefälle - ein Produktivitätkiller.

                V 1 Reply Last reply Reply Quote 0
                • V
                  vogtländer @Marty56 last edited by

                  @Marty56 Danke für die schnelle Antwort. Ich werde das gleich mal testen.

                  1 Reply Last reply Reply Quote 0
                  • P
                    pix @Marty56 last edited by

                    @Marty56 sagte in Emails empfangen.:

                    var mailobj = {val:
                    {
                    from: "",
                    topic: "",
                    text: "")
                    }
                    };
                    createState("Email_Reception"

                    Funktioniert super, danke!

                    Pix

                    1 Reply Last reply Reply Quote 0
                    • Neuschwansteini
                      Neuschwansteini @Marty56 last edited by

                      @Marty56 hmm da kommt bei mir nur ein [object Object], wenn ich aber die einzelnen variablen in einen State schreibe, gehts, also die Daten werden ausgelesen, aber nicht Email_Reception eingetragen.. ?
                      Ich brauchs nicht unbedingt, möchte aber wissen, warum das nicht geht.. 🙂

                      Hier mal mein Script, es wird unter javascript.0. ein Verzeichnis Email angelegt, wo alle Datenpunkte dann eingetragen werden ( so habe ich mehr übersicht )

                      var mailobj = {val:
                                      {
                                          from:  "",
                                          topic: "",
                                          text: "",
                                      }
                                  };
                      createState("Email.Reception",mailobj);
                      createState("Email.from_address");
                      createState("Email.from_name");
                      createState("Email.mail_subject");
                      createState("Email.mail_text");
                              
                      schedule("*/2 * * * *", function (obj) {
                          var MailListener = require("mail-listener2");
                          var mailListener = new MailListener({
                            username: "blabla.com",    // hier Email Adresse eintragen
                            password: "geheimespassword",	      // hier Passwort eintragen	
                            host: "imap.gmail.com",
                            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: true}, // 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
                          });
                      
                          mailListener.start();
                          mailListener.on("server:connected", function(){console.log("imapconconnected");});
                          mailListener.on("server:disconnected", function(){console.log("imapDisconnected");});
                          mailListener.on("error", function(err){console.log(err);});
                          mailListener.on("mail", function(mail, seqno, attributes){
                              log(mail.from[0].address);
                              log(mail.from[0].name);
                              log(mail.subject);
                              log( mail.text);
                              var mailobj = {val:
                                      {
                                          from:  mail.from[0].name,
                                          topic: mail.subject,
                                          text:  mail.text
                                      }
                                  };
                              setState("Email.Reception", mailobj);
                              setState("Email.from_address", mail.from[0].address);
                              setState("Email.from_name", mail.from[0].name);
                              setState("Email.mail_subject", mail.subject);
                              setState("Email.mail_text", mail.text);
                      
                          });
                          mailListener.on("attachment", function(attachment){console.log(attachment.path);});
                          setTimeout(function(){mailListener.stop();},20000);
                      });
                      
                      M gelberlemmy liv-in-sky 3 Replies Last reply Reply Quote 0
                      • M
                        Marty56 @Neuschwansteini last edited by

                        @ilovegym
                        Ich kappier den Satz
                        "mm da kommt bei mir nur ein [object Object], wenn ich aber die einzelnen variablen in einen State schreibe, gehts, also die Daten werden ausgelesen, aber nicht Email_Reception eingetragen.. ?" nicht.

                        Was wird denn bei den log angezeigt. Kommen da die erwarteten Werte?

                        Neuschwansteini 2 Replies Last reply Reply Quote 0
                        • Neuschwansteini
                          Neuschwansteini @Marty56 last edited by

                          @Marty56 ja, es kommen die Werte, aber er schreibt mir nicht alles in einen State, sondern nur in die getrennten, die ich angelegt habe. Wenn ich also dein Script nehme, dann kommen die Werte im Log, aber in dem State Email_Reception steht nur object Object sonst nix..

                          1 Reply Last reply Reply Quote 0
                          • Neuschwansteini
                            Neuschwansteini @Marty56 last edited by

                            @Marty56 Screenshot_2019-02-19 objects - ioBroker(2).png

                            1 Reply Last reply Reply Quote 0
                            • V
                              vogtländer last edited by

                              Hi ich bekomme es einfach nicht hin.
                              Die Datenpunkte werden zwar erstellt sind aber leer.
                              Es hat für mich den Anschein als ob alles was innerhalb der Fkt.

                              mailListener.start();
                              mailListener.on("server:connected", function(){console.log("imapconconnected");});
                              mailListener.on("server:disconnected", function(){console.log("imapDisconnected");});
                              mailListener.on("error", function(err){console.error(err);});
                              mailListener.on("mail", function(mail, seqno, attributes){
                                  log(mail.from[0].address);
                                  log(mail.from[0].name);
                                  log(mail.subject);
                                  log( mail.text);
                                  var mailobj = {val:
                                          {
                                              from:  mail.from[0].name,
                                              topic: mail.subject,
                                              text:  mail.text
                                          }
                                      };
                                  setState("Email.Reception", mailobj);
                                  setState("javascript.0.Email.from_address", mail.from[0].address);
                                  setState("javascript.0.Email.from_name", mail.from[0].name);
                                  setState("javascript.0.Email.mail_subject", mail.subject);
                                  setState("javascript.0.Email.mail_text", mail.text);
                              
                              });
                              

                              steht zwar ausgeführt wird aber nicht an iobroker weitergegeben wird.
                              Auch wird der erste Datenpunkt "Email.Reception" nicht erzeugt.

                              Neuschwansteini 1 Reply Last reply Reply Quote 0
                              • Neuschwansteini
                                Neuschwansteini @vogtländer last edited by

                                @vogtländer hast du das komplette script kopiert, bei deinem code fehlt ja einiges..??

                                1 Reply Last reply Reply Quote 0
                                • V
                                  vogtländer last edited by

                                  ja ich habe das komplette Script kopiert.
                                  Es kommen auch keine Fehler beim Ausführen.
                                  Aber es ist als ob alles was in der Funktion ? mailListener.on(...) steht
                                  nicht zurückgegeben wird.

                                  1 Reply Last reply Reply Quote 0
                                  • V
                                    vogtländer last edited by

                                    jetzt geht es auch bei mir ich habe JS Adapter neu installiert und alles neu
                                    gestartet. nur "Email.Reception", mailob funktioniert auch bei mir nicht

                                    Neuschwansteini 1 Reply Last reply Reply Quote 0
                                    • Neuschwansteini
                                      Neuschwansteini @vogtländer last edited by

                                      @vogtländer jetzt wo du es schreibst... manchmal muss man bei neuen Scripts den javascript-adapter neu starten, das reicht meist schon...

                                      1 Reply Last reply Reply Quote 0
                                      • M
                                        Marty56 last edited by Marty56

                                        Das in der Objektansicht nur [object Object] angezeigt wird, ist ganz normal, weil ich ja keinen String in dem Datenpunkt ablege, sondern ein Object.

                                        Wenn Du auf die Werte zugreifen willst, dann kannst Du das entweder machen, in dem Du ein Script macht, dass auf Email_Reception triggert.

                                        on({id: "Email_Reception"}, function(obj) {
                                           log(obj.state.val.topic);
                                        });
                                        

                                        oder was auch natürlich geht ist.

                                        var emailobj = getState("Email_Reception").val;
                                        log(emailobj.topic);
                                        
                                        Neuschwansteini 1 Reply Last reply Reply Quote 0
                                        • Neuschwansteini
                                          Neuschwansteini @Marty56 last edited by

                                          @Marty56 ah, danke, ja jetzt ist mir das klar!

                                          1 Reply Last reply Reply Quote 0
                                          • T
                                            thiel_marvin last edited by thiel_marvin

                                            Wenn man Mails triggern will, die immer ähnlich aufgebaut sind - Lassen sich verschiedenen "createState" so erstellen, dass nur ein bestimmter Teil der Mail-Nachricht damit gefüllt wird?

                                            In der Mail findet man beispielsweise
                                            Ort:
                                            Zeit:
                                            Energie:

                                            In jeder Mail ist das so und ich möchte in den verschiedenen States nur den Teil hinter beispielsweise "Energie:" anzeigen.

                                            umbm 2 Replies Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate
                                            FAQ Cloud / IOT
                                            HowTo: Node.js-Update
                                            HowTo: Backup/Restore
                                            Downloads
                                            BLOG

                                            746
                                            Online

                                            31.6k
                                            Users

                                            79.5k
                                            Topics

                                            1.3m
                                            Posts

                                            31
                                            119
                                            17044
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo