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

Gmail GoogleDrive Import
View
Splitout Filter Export Scheduled
View
Splitout Manual Import Webhook
View
My workflow
View
Send the Astronomy Picture of the day daily to a Telegram channel
View
Create a new contact in Agile CRM
View
Elasticsearch Cron Create Webhook
View
Perform a domain search (single) with Icypeas
View
Create, update and get records in Quick Base
View
FetchGithubIssues
View