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

Grist Stickynote Create Webhook
View
Wise Airtable Automate Triggered
View
Schedule Removeduplicates Create Webhook
View
Create, update and get a user from Iterable
View
Scrape Books from URL with Dumpling AI, Clean HTML, Save to Sheets, Email as CSV
View
Dynamic credentials using expressions
View
HTTP Respondtowebhook Import Webhook
View
Splitout GoogleCalendar Create Webhook
View
Loading data into a spreadsheet
View
Receive updates for events in ClickUp
View