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

Wait Datetime Send Scheduled
View
Workflow Results to Markdown Notes in Your Obsidian Vault, via Google Drive
View
Awssns Automate Triggered
View
Summarize Glassdoor Company Info with Google Gemini and Bright Data Web Scraper
View
Receive updates when an event occurs in Asana
View
Zendesk-to-slack
View
New WooCommerce refund to Slack
View
Filter Extractfromfile Create Triggered
View
Code Slack Create Webhook
View
Summarize emails with A.I. then send to messenger
View