Workflow: Emailreadimap Nextcloud

Workflow Details

Download Workflow
{
    "nodes": [
        {
            "name": "IMAP Email",
            "type": "n8n-nodes-base.emailReadImap",
            "position": [
                240,
                420
            ],
            "parameters": {
                "format": "resolved",
                "mailbox": "Invoices",
                "options": {
                    "customEmailConfig": "[\"ALL\"]"
                }
            },
            "typeVersion": 1
        },
        {
            "name": "Nextcloud",
            "type": "n8n-nodes-base.nextCloud",
            "position": [
                940,
                420
            ],
            "parameters": {
                "path": "=Documents\/Invoices\/{{$json[\"date\"]}}_{{$json[\"from\"]}}_{{$binary.file.fileName}}",
                "binaryDataUpload": true,
                "binaryPropertyName": "file"
            },
            "typeVersion": 1
        },
        {
            "name": "Map each attachment",
            "type": "n8n-nodes-base.function",
            "position": [
                620,
                420
            ],
            "parameters": {
                "functionCode": "const _ = require('lodash')\n\nconst sanitize = str => _.chain(str)\n  .replace(\/[^A-Za-z0-9&.-]\/g, '-') \/\/ sanitise via whitelist of characters\n  .replace(\/-(?=-)\/g, '') \/\/ remove repeated dashes - https:\/\/regexr.com\/6ag8h\n  .trim('-') \/\/ trim any leading\/trailing dashes\n  .truncate({\n    length: 60,\n    omission: '-' \/\/ when the string ends with '-', you'll know it was truncated\n  })\n  .value()\n\nconst result = _.flatMap(items.map(item => {\n  \/\/console.log({item})\n\n  \/\/ Maps each attachment to a separate item\n  return _.values(item.binary).map(file => {\n    console.log(\"Saving attachement:\", file.fileName, 'from:', ...item.json.from.value)\n    \n    \/\/ sanitize filename but exclude extension\n    const filename_parts = file.fileName.split('.')\n    const ext = _.slice(filename_parts, filename_parts.length-1)\n    const filename_main = _.join(_.dropRight(filename_parts), '.')\n    file.fileName = sanitize(filename_main) + '.' + ext\n    \n    return {\n      json: {\n        from: sanitize(item.json.from.value[0].name),\n        date: sanitize(new Date(item.json.date).toISOString().split(\"T\")[0]) \/\/ get date part \"2020-01-01\"\n      }, \n      binary: { file }\n    }\n  })\n}))\n\n\/\/console.log(result)\nreturn result"
            },
            "typeVersion": 1
        }
    ],
    "connections": {
        "IMAP Email": {
            "main": [
                [
                    {
                        "node": "Map each attachment",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Map each attachment": {
            "main": [
                [
                    {
                        "node": "Nextcloud",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        }
    }
}
Back to Workflows

Related Workflows

HDW Lead Geländewagen
View
Google Site Index - sitemap.xml example
View
Webhook Code Send Webhook
View
Stopanderror Extractfromfile Send Webhook
View
Telegram Stickynote Update Triggered
View
Dialpad to Syncro
View
Connect Airtable Contacts to telli for Automated AI Voice Call Scheduling
View
Trello GoogleCalendar Create Scheduled
View
Splitout Code Create Webhook
View
Chinese Translator
View