Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Sebastian Möller

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Profile
    • Following 0
    • Followers 1
    • Topics 1
    • Posts 2
    • Best 0
    • Groups 0

    Sebastian Möller

    @Sebastian Möller

    0
    Reputation
    7
    Profile views
    2
    Posts
    1
    Followers
    0
    Following
    Joined Last Online

    Sebastian Möller Follow

    Latest posts made by Sebastian Möller

    • RE: Javascript E-Mail Anhang abrufen und Speichern

      Ich danke euch beiden.
      Hat Funktioniert.

      posted in JavaScript
      Sebastian Möller
      Sebastian Möller
    • Javascript E-Mail Anhang abrufen und Speichern

      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

      posted in JavaScript
      Sebastian Möller
      Sebastian Möller
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo