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

Splitout Filter Import Webhook
View
Functionitem Manual Create Triggered
View
Telegram Googletaskstool Create Triggered
View
Wait Splitout Create Webhook
View
Calendly Notion Automate Triggered
View
Generate google meet links in slack
View
Clockify to Syncro
View
GoogleSheets Slack Send Triggered
View
Manual Bannerbear Automate Triggered
View
HTTP Telegram Send Webhook
View