Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Javascript E-Mail Anhang abrufen und Speichern

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.5k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    827

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

Javascript E-Mail Anhang abrufen und Speichern

Geplant Angeheftet Gesperrt Verschoben JavaScript
4 Beiträge 3 Kommentatoren 335 Aufrufe 2 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • Sebastian MöllerS Offline
    Sebastian MöllerS Offline
    Sebastian Möller
    schrieb am zuletzt editiert von
    #1

    Hallöchen,

    Ich bin wieder neu im Bereich ioBroker und Javascript.
    Ich habe ein Script was in ein IMAP Postfach schaut, ob dort eine neue E-Mail von einem bestimmten Absender ist. Wenn ja, soll das Script den PDF Anhang lokal abspeichern. Dies Funktioniert auch wunderbar.
    Allerdings der Teil wo ein Objekt in 0_userdata auf true gesetzt werden soll, da sagt mir das Script immer das das Objekt nicht existiert.
    Dies ist allerdings das Objekt was bereits bei der Installation angelegt war.

    Bei ioBrokerObjectID wird das Objekt eingetragen.

    const Imap = require('imap');
    const { simpleParser } = require('mailparser');
    const fs = require('fs');
    const path = require('path');
    const { exec } = require('child_process');
    
    const imapConfig = {
        user: 'xxxx',
        password: 'xxxxx',
        host: 'imap.xxxx.xx',
        port: 993,
        tls: true
    };
    
    const searchCriteria = ['UNSEEN', ['FROM', 'email@absender.de']];
    const pdfSaveDirectory = '/mailtemp'; 
    const ioBrokerObjectID = '0_userdata.0.example_state';
    const imap = new Imap(imapConfig);
    
    function openInbox(cb) {
        imap.openBox('INBOX', false, cb);
    }
    
    imap.once('ready', function() {
        openInbox(function(err, box) {
            if (err) throw err;
            imap.search(searchCriteria, function(err, results) {
                if (err) throw err;
                if (results.length === 0) {
                    console.log('No unread emails from the specified sender.');
                    imap.end();
                    return;
                }
                const f = imap.fetch(results, { bodies: '', struct: true });
    
                f.on('message', function(msg, seqno) {
                    msg.on('body', function(stream, info) {
                        simpleParser(stream, async (err, parsed) => {
                            if (err) throw err;
                            let newPdfSaved = false;
                            parsed.attachments.forEach(attachment => {
                                if (attachment.contentType === 'application/pdf') {
                                    const filePath = path.join(pdfSaveDirectory, attachment.filename);
                                    fs.writeFile(filePath, attachment.content, (err) => {
                                        if (err) throw err;
                                        console.log(`Saved attachment to ${filePath}`);
                                        newPdfSaved = true;
                                        // Setze das ioBroker-Objekt auf true
                                        exec(`iobroker set ${ioBrokerObjectID} true`, (err, stdout, stderr) => {
                                            if (err) {
                                                console.error(`Error setting ioBroker object: ${stderr}`);
                                            } else {
                                                console.log(`ioBroker object set to true: ${stdout}`);
                                            }
                                        });
                                    });
                                }
                            });
                        });
                    });
                    msg.once('attributes', function(attrs) {
                        const { uid } = attrs;
                        imap.addFlags(uid, ['\\Seen'], (err) => {
                            if (err) console.log(err);
                        });
                    });
                });
    
                f.once('error', function(err) {
                    console.log('Fetch error: ' + err);
                });
    
                f.once('end', function() {
                    console.log('Done fetching all messages!');
                    imap.end();
                });
            });
        });
    });
    
    imap.once('error', function(err) {
        console.log(err);
    });
    
    imap.once('end', function() {
        console.log('Connection ended');
    });
    
    imap.connect();
    

    mailtemp.png

    Vielen Dank

    paul53P Marc BergM Sebastian MöllerS 3 Antworten Letzte Antwort
    0
    • Sebastian MöllerS Sebastian Möller

      Hallöchen,

      Ich bin wieder neu im Bereich ioBroker und Javascript.
      Ich habe ein Script was in ein IMAP Postfach schaut, ob dort eine neue E-Mail von einem bestimmten Absender ist. Wenn ja, soll das Script den PDF Anhang lokal abspeichern. Dies Funktioniert auch wunderbar.
      Allerdings der Teil wo ein Objekt in 0_userdata auf true gesetzt werden soll, da sagt mir das Script immer das das Objekt nicht existiert.
      Dies ist allerdings das Objekt was bereits bei der Installation angelegt war.

      Bei ioBrokerObjectID wird das Objekt eingetragen.

      const Imap = require('imap');
      const { simpleParser } = require('mailparser');
      const fs = require('fs');
      const path = require('path');
      const { exec } = require('child_process');
      
      const imapConfig = {
          user: 'xxxx',
          password: 'xxxxx',
          host: 'imap.xxxx.xx',
          port: 993,
          tls: true
      };
      
      const searchCriteria = ['UNSEEN', ['FROM', 'email@absender.de']];
      const pdfSaveDirectory = '/mailtemp'; 
      const ioBrokerObjectID = '0_userdata.0.example_state';
      const imap = new Imap(imapConfig);
      
      function openInbox(cb) {
          imap.openBox('INBOX', false, cb);
      }
      
      imap.once('ready', function() {
          openInbox(function(err, box) {
              if (err) throw err;
              imap.search(searchCriteria, function(err, results) {
                  if (err) throw err;
                  if (results.length === 0) {
                      console.log('No unread emails from the specified sender.');
                      imap.end();
                      return;
                  }
                  const f = imap.fetch(results, { bodies: '', struct: true });
      
                  f.on('message', function(msg, seqno) {
                      msg.on('body', function(stream, info) {
                          simpleParser(stream, async (err, parsed) => {
                              if (err) throw err;
                              let newPdfSaved = false;
                              parsed.attachments.forEach(attachment => {
                                  if (attachment.contentType === 'application/pdf') {
                                      const filePath = path.join(pdfSaveDirectory, attachment.filename);
                                      fs.writeFile(filePath, attachment.content, (err) => {
                                          if (err) throw err;
                                          console.log(`Saved attachment to ${filePath}`);
                                          newPdfSaved = true;
                                          // Setze das ioBroker-Objekt auf true
                                          exec(`iobroker set ${ioBrokerObjectID} true`, (err, stdout, stderr) => {
                                              if (err) {
                                                  console.error(`Error setting ioBroker object: ${stderr}`);
                                              } else {
                                                  console.log(`ioBroker object set to true: ${stdout}`);
                                              }
                                          });
                                      });
                                  }
                              });
                          });
                      });
                      msg.once('attributes', function(attrs) {
                          const { uid } = attrs;
                          imap.addFlags(uid, ['\\Seen'], (err) => {
                              if (err) console.log(err);
                          });
                      });
                  });
      
                  f.once('error', function(err) {
                      console.log('Fetch error: ' + err);
                  });
      
                  f.once('end', function() {
                      console.log('Done fetching all messages!');
                      imap.end();
                  });
              });
          });
      });
      
      imap.once('error', function(err) {
          console.log(err);
      });
      
      imap.once('end', function() {
          console.log('Connection ended');
      });
      
      imap.connect();
      

      mailtemp.png

      Vielen Dank

      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von paul53
      #2

      @sebastian-möller
      In einer Javascript-Instanz lautet die Funktion setState(id, val, ack) zum Setzen des Wertes eines Datenpunktes.

                                          // Setze das ioBroker-Objekt auf true
                                          setState(ioBrokerObjectID, true, true);
      

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      1 Antwort Letzte Antwort
      0
      • Sebastian MöllerS Sebastian Möller

        Hallöchen,

        Ich bin wieder neu im Bereich ioBroker und Javascript.
        Ich habe ein Script was in ein IMAP Postfach schaut, ob dort eine neue E-Mail von einem bestimmten Absender ist. Wenn ja, soll das Script den PDF Anhang lokal abspeichern. Dies Funktioniert auch wunderbar.
        Allerdings der Teil wo ein Objekt in 0_userdata auf true gesetzt werden soll, da sagt mir das Script immer das das Objekt nicht existiert.
        Dies ist allerdings das Objekt was bereits bei der Installation angelegt war.

        Bei ioBrokerObjectID wird das Objekt eingetragen.

        const Imap = require('imap');
        const { simpleParser } = require('mailparser');
        const fs = require('fs');
        const path = require('path');
        const { exec } = require('child_process');
        
        const imapConfig = {
            user: 'xxxx',
            password: 'xxxxx',
            host: 'imap.xxxx.xx',
            port: 993,
            tls: true
        };
        
        const searchCriteria = ['UNSEEN', ['FROM', 'email@absender.de']];
        const pdfSaveDirectory = '/mailtemp'; 
        const ioBrokerObjectID = '0_userdata.0.example_state';
        const imap = new Imap(imapConfig);
        
        function openInbox(cb) {
            imap.openBox('INBOX', false, cb);
        }
        
        imap.once('ready', function() {
            openInbox(function(err, box) {
                if (err) throw err;
                imap.search(searchCriteria, function(err, results) {
                    if (err) throw err;
                    if (results.length === 0) {
                        console.log('No unread emails from the specified sender.');
                        imap.end();
                        return;
                    }
                    const f = imap.fetch(results, { bodies: '', struct: true });
        
                    f.on('message', function(msg, seqno) {
                        msg.on('body', function(stream, info) {
                            simpleParser(stream, async (err, parsed) => {
                                if (err) throw err;
                                let newPdfSaved = false;
                                parsed.attachments.forEach(attachment => {
                                    if (attachment.contentType === 'application/pdf') {
                                        const filePath = path.join(pdfSaveDirectory, attachment.filename);
                                        fs.writeFile(filePath, attachment.content, (err) => {
                                            if (err) throw err;
                                            console.log(`Saved attachment to ${filePath}`);
                                            newPdfSaved = true;
                                            // Setze das ioBroker-Objekt auf true
                                            exec(`iobroker set ${ioBrokerObjectID} true`, (err, stdout, stderr) => {
                                                if (err) {
                                                    console.error(`Error setting ioBroker object: ${stderr}`);
                                                } else {
                                                    console.log(`ioBroker object set to true: ${stdout}`);
                                                }
                                            });
                                        });
                                    }
                                });
                            });
                        });
                        msg.once('attributes', function(attrs) {
                            const { uid } = attrs;
                            imap.addFlags(uid, ['\\Seen'], (err) => {
                                if (err) console.log(err);
                            });
                        });
                    });
        
                    f.once('error', function(err) {
                        console.log('Fetch error: ' + err);
                    });
        
                    f.once('end', function() {
                        console.log('Done fetching all messages!');
                        imap.end();
                    });
                });
            });
        });
        
        imap.once('error', function(err) {
            console.log(err);
        });
        
        imap.once('end', function() {
            console.log('Connection ended');
        });
        
        imap.connect();
        

        mailtemp.png

        Vielen Dank

        Marc BergM Offline
        Marc BergM Offline
        Marc Berg
        Most Active
        schrieb am zuletzt editiert von
        #3

        @sebastian-möller sagte in Javascript E-Mail Anhang abrufen und Speichern:

        iobroker set ${ioBrokerObjectID} true

        Damit können Einstellungen einer Instanz geändert werden. Das, was du suchst ist wahrscheinlich

         iobroker state set <id> <value> [<ack>] 
        

        NUC10I3+Ubuntu+Docker+ioBroker+influxDB2+Node Red+EMQX+Grafana

        Pi-hole, Traefik, Checkmk, Conbee II+Zigbee2MQTT, ESPSomfy-RTS, LoRaWAN, Arduino, KiCad

        Benutzt das Voting im Beitrag, wenn er euch geholfen hat.

        1 Antwort Letzte Antwort
        0
        • Sebastian MöllerS Sebastian Möller

          Hallöchen,

          Ich bin wieder neu im Bereich ioBroker und Javascript.
          Ich habe ein Script was in ein IMAP Postfach schaut, ob dort eine neue E-Mail von einem bestimmten Absender ist. Wenn ja, soll das Script den PDF Anhang lokal abspeichern. Dies Funktioniert auch wunderbar.
          Allerdings der Teil wo ein Objekt in 0_userdata auf true gesetzt werden soll, da sagt mir das Script immer das das Objekt nicht existiert.
          Dies ist allerdings das Objekt was bereits bei der Installation angelegt war.

          Bei ioBrokerObjectID wird das Objekt eingetragen.

          const Imap = require('imap');
          const { simpleParser } = require('mailparser');
          const fs = require('fs');
          const path = require('path');
          const { exec } = require('child_process');
          
          const imapConfig = {
              user: 'xxxx',
              password: 'xxxxx',
              host: 'imap.xxxx.xx',
              port: 993,
              tls: true
          };
          
          const searchCriteria = ['UNSEEN', ['FROM', 'email@absender.de']];
          const pdfSaveDirectory = '/mailtemp'; 
          const ioBrokerObjectID = '0_userdata.0.example_state';
          const imap = new Imap(imapConfig);
          
          function openInbox(cb) {
              imap.openBox('INBOX', false, cb);
          }
          
          imap.once('ready', function() {
              openInbox(function(err, box) {
                  if (err) throw err;
                  imap.search(searchCriteria, function(err, results) {
                      if (err) throw err;
                      if (results.length === 0) {
                          console.log('No unread emails from the specified sender.');
                          imap.end();
                          return;
                      }
                      const f = imap.fetch(results, { bodies: '', struct: true });
          
                      f.on('message', function(msg, seqno) {
                          msg.on('body', function(stream, info) {
                              simpleParser(stream, async (err, parsed) => {
                                  if (err) throw err;
                                  let newPdfSaved = false;
                                  parsed.attachments.forEach(attachment => {
                                      if (attachment.contentType === 'application/pdf') {
                                          const filePath = path.join(pdfSaveDirectory, attachment.filename);
                                          fs.writeFile(filePath, attachment.content, (err) => {
                                              if (err) throw err;
                                              console.log(`Saved attachment to ${filePath}`);
                                              newPdfSaved = true;
                                              // Setze das ioBroker-Objekt auf true
                                              exec(`iobroker set ${ioBrokerObjectID} true`, (err, stdout, stderr) => {
                                                  if (err) {
                                                      console.error(`Error setting ioBroker object: ${stderr}`);
                                                  } else {
                                                      console.log(`ioBroker object set to true: ${stdout}`);
                                                  }
                                              });
                                          });
                                      }
                                  });
                              });
                          });
                          msg.once('attributes', function(attrs) {
                              const { uid } = attrs;
                              imap.addFlags(uid, ['\\Seen'], (err) => {
                                  if (err) console.log(err);
                              });
                          });
                      });
          
                      f.once('error', function(err) {
                          console.log('Fetch error: ' + err);
                      });
          
                      f.once('end', function() {
                          console.log('Done fetching all messages!');
                          imap.end();
                      });
                  });
              });
          });
          
          imap.once('error', function(err) {
              console.log(err);
          });
          
          imap.once('end', function() {
              console.log('Connection ended');
          });
          
          imap.connect();
          

          mailtemp.png

          Vielen Dank

          Sebastian MöllerS Offline
          Sebastian MöllerS Offline
          Sebastian Möller
          schrieb am zuletzt editiert von
          #4

          Ich danke euch beiden.
          Hat Funktioniert.

          1 Antwort Letzte Antwort
          0
          Antworten
          • In einem neuen Thema antworten
          Anmelden zum Antworten
          • Älteste zuerst
          • Neuste zuerst
          • Meiste Stimmen


          Support us

          ioBroker
          Community Adapters
          Donate

          693

          Online

          32.6k

          Benutzer

          82.1k

          Themen

          1.3m

          Beiträge
          Community
          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
          ioBroker Community 2014-2025
          logo
          • Anmelden

          • Du hast noch kein Konto? Registrieren

          • Anmelden oder registrieren, um zu suchen
          • Erster Beitrag
            Letzter Beitrag
          0
          • Home
          • Aktuell
          • Tags
          • Ungelesen 0
          • Kategorien
          • Unreplied
          • Beliebt
          • GitHub
          • Docu
          • Hilfe