AutomationFlowsWeb Scraping › Wyślij Mail Transakcyjny Przez Mailstack

Wyślij Mail Transakcyjny Przez Mailstack

Wyślij mail transakcyjny przez mailstack. Uses httpRequest. Event-driven trigger; 8 nodes.

Event trigger★★★★☆ complexity8 nodesHTTP Request
Web Scraping Trigger: Event Nodes: 8 Complexity: ★★★★☆ Added:

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "name": "Wy\u015blij mail transakcyjny przez mailstack",
  "nodes": [
    {
      "id": "trigger",
      "name": "When clicking Execute",
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [
        0,
        300
      ],
      "parameters": {}
    },
    {
      "id": "config",
      "name": "Configuration (EDIT ME)",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        300,
        300
      ],
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "a1",
              "name": "baseUrl",
              "value": "https://mail.yourdomain.com",
              "type": "string"
            },
            {
              "id": "a2",
              "name": "apiKey",
              "value": "your-mailstack-api-key",
              "type": "string"
            },
            {
              "id": "a3",
              "name": "brand",
              "value": "acme",
              "type": "string"
            },
            {
              "id": "a4",
              "name": "template",
              "value": "payment",
              "type": "string"
            },
            {
              "id": "a5",
              "name": "to",
              "value": "customer@example.com",
              "type": "string"
            },
            {
              "id": "a6",
              "name": "name",
              "value": "Jane Smith",
              "type": "string"
            },
            {
              "id": "a7",
              "name": "amount",
              "value": "149.00",
              "type": "string"
            },
            {
              "id": "a8",
              "name": "currency",
              "value": "PLN",
              "type": "string"
            },
            {
              "id": "a9",
              "name": "item",
              "value": "Pro Plan",
              "type": "string"
            },
            {
              "id": "a10",
              "name": "orderId",
              "value": "ORD-7788",
              "type": "string"
            },
            {
              "id": "a11",
              "name": "date",
              "value": "2026-07-19",
              "type": "string"
            },
            {
              "id": "a12",
              "name": "invoiceUrl",
              "value": "https://example.com/invoice/ORD-7788.pdf",
              "type": "string"
            },
            {
              "id": "a13",
              "name": "orderUrl",
              "value": "https://example.com/orders/ORD-7788",
              "type": "string"
            }
          ]
        },
        "includeOtherFields": false,
        "options": {}
      }
    },
    {
      "id": "build",
      "name": "Build request body",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        600,
        300
      ],
      "parameters": {
        "jsCode": "// Assemble the mailstack /v1/send body from Configuration, keeping baseUrl/apiKey\n// out of it (those configure the HTTP request itself, not the email content).\nconst c = $input.first().json;\nconst body = {\n  brand: c.brand,\n  template: c.template,\n  to: c.to,\n  name: c.name,\n  amount: c.amount,\n  currency: c.currency,\n  item: c.item,\n  orderId: c.orderId,\n  date: c.date,\n  invoiceUrl: c.invoiceUrl,\n  orderUrl: c.orderUrl,\n};\nreturn [{ json: { baseUrl: c.baseUrl, apiKey: c.apiKey, body } }];"
      }
    },
    {
      "id": "send",
      "name": "Send email via mailstack",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        900,
        300
      ],
      "onError": "continueRegularOutput",
      "parameters": {
        "method": "POST",
        "url": "={{ $json.baseUrl }}/v1/send",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "=Bearer {{ $json.apiKey }}"
            }
          ]
        },
        "sendBody": true,
        "contentType": "json",
        "specifyBody": "json",
        "jsonBody": "={{ JSON.stringify($json.body) }}",
        "options": {}
      }
    },
    {
      "id": "st0",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -60,
        -420
      ],
      "parameters": {
        "content": "## Wysy\u0142aj self-hostowane maile transakcyjne przez mailstack\n\n[mailstack](https://github.com/jurczykpawel/mailstack) to darmowy, samodzielnie hostowany wysy\u0142acz e-maili (Cloudflare Worker + Amazon SES), kt\u00f3ry wdra\u017casz raz i wywo\u0142ujesz sk\u0105dkolwiek - bez SaaS-owego API do maili, bez p\u0142acenia za sztuk\u0119, bez vendor lock-inu.\n\n### Jak to dzia\u0142a\n- Node **Configuration** trzyma adres mailstacka, klucz API i tre\u015b\u0107 maila (ten przyk\u0142ad wysy\u0142a potwierdzenie `payment` - mailstack ma te\u017c szablony `welcome`, `received` i `notice`).\n- **Build request body** buduje JSON, jakiego oczekuje mailstack (adres i klucz API zostaj\u0105 poza tre\u015bci\u0105 body).\n- **HTTP Request** wysy\u0142a POST na `/v1/send` z kluczem API jako Bearer token (tryb zaufany) - mailstack renderuje branded mail HTML+text i wysy\u0142a go przez Amazon SES.\n- Ustawienie `orderUrl` sprawia, \u017ce mailstack automatycznie dodaje przycisk akcji w Gmailu (\"Zobacz zam\u00f3wienie\") - bez dodatkowej konfiguracji.\n\n### Konfiguracja\n1. Wdr\u00f3\u017c mailstack (`git clone` + `wrangler deploy` - patrz README repo) i zanotuj jego adres oraz id brandu.\n2. Utw\u00f3rz klucz API: ustaw sekret `API_KEY` przez `wrangler secret put API_KEY`.\n3. Podmie\u0144 trigger **When clicking Execute** na w\u0142asny (webhook, formularz, event z CRM, cron...).\n4. Uzupe\u0142nij **Configuration (EDIT ME)**: `baseUrl`, `apiKey`, `brand` i pola maila.\n5. Uruchom raz - sprawd\u017a skrzynk\u0119 odbiorcy.\n\n### Wskaz\u00f3wki\nZmie\u0144 `template` na `welcome`, `received` lub `notice` dla innych typ\u00f3w maili (pola ka\u017cdego szablonu - patrz README mailstacka). Podepnij `to`/`name`/`amount`/itd. z danych triggera zamiast wpisywa\u0107 je na sztywno.\n",
        "width": 1020,
        "height": 340,
        "color": 1
      }
    },
    {
      "id": "sec1",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -60,
        160
      ],
      "parameters": {
        "content": "## 1. Co wys\u0142a\u0107\nUruchom flow, potem uzupe\u0142nij odbiorc\u0119, szablon i tre\u015b\u0107 w Configuration.",
        "width": 480,
        "height": 420,
        "color": 7
      }
    },
    {
      "id": "sec2",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        560,
        160
      ],
      "parameters": {
        "content": "## 2. Wy\u015blij\nZbuduj JSON, jakiego oczekuje mailstack, i wy\u015blij POST z kluczem API jako Bearer token.",
        "width": 460,
        "height": 420,
        "color": 7
      }
    },
    {
      "id": "st1",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        280,
        620
      ],
      "parameters": {
        "content": "## Chro\u0144 sw\u00f3j klucz API\nKlucz API mailstacka odblokowuje tryb zaufany (dowolny odbiorca, dowolny szablon). W produkcji trzymaj go w credentials/zmiennych \u015brodowiskowych n8n - nie commituj workflowa z prawdziwym kluczem.",
        "width": 300,
        "height": 160,
        "color": 3
      }
    }
  ],
  "connections": {
    "When clicking Execute": {
      "main": [
        [
          {
            "node": "Configuration (EDIT ME)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Configuration (EDIT ME)": {
      "main": [
        [
          {
            "node": "Build request body",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Build request body": {
      "main": [
        [
          {
            "node": "Send email via mailstack",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  }
}
Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Wyślij mail transakcyjny przez mailstack. Uses httpRequest. Event-driven trigger; 8 nodes.

Source: https://github.com/jurczykpawel/mailstack/blob/33cd942efbff78b7637f0a910bdbe1b6a9f44964/examples/n8n/workflows/send-transactional-email-PL.json — original creator credit. Request a take-down →

More Web Scraping workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Web Scraping

This workflow listens for an “Approved” label on a Trello card, reads the AI draft bookkeeping JSON from card comments, and posts the corresponding transaction to Xero. It then adds a Xero deep link b

Trello Trigger, HTTP Request
Web Scraping

02_LLM_Pipeline v1.0. Uses executeWorkflowTrigger, httpRequest, seaTable. Event-driven trigger; 65 nodes.

Execute Workflow Trigger, HTTP Request, Sea Table
Web Scraping

This workflow allows you to import any workflow from a file or another n8n instance and map the credentials easily. A multi-form setup guides you through the entire process At the beginning you have t

Execute Command, Read Write File, HTTP Request +3
Web Scraping

[n8n] Advanced URL Parsing and Shortening Workflow - Switchy.io Integration. Uses splitInBatches, stickyNote, httpRequest, html. Event-driven trigger; 56 nodes.

HTTP Request, GitHub, Stop And Error +1
Web Scraping

[](https://youtu.be/c7yCZhmMjtI)

HTTP Request, GitHub, Stop And Error +1