n8n do zero com Docker: instale e receba a cotação do dólar no e-mail

Neste tutorial você vai instalar o n8n no seu próprio computador usando Docker Compose e, logo em seguida, montar sua primeira automação útil: um workflow que busca a cotação do dólar todo dia às 8h e envia um e-mail com os valores. Tudo roda na sua máquina, de graça, e sem precisar de nenhuma senha de e-mail ou chave de API para testar.

Este artigo acompanha o vídeo 1 do canal Orbitacode, n8n do zero com Docker. O vídeo usa um caminho mais rápido, com docker run, e todos os comandos dele estão logo abaixo, na seção Instalação rápida com docker run.


Instalação rápida com docker run (a do vídeo)

No vídeo, a instalação segue o caminho mais simples: um único comando docker run liga o n8n, sem criar nenhum arquivo de configuração. É o jeito mais rápido de conhecer o n8n. Mais adiante, a Parte 1 mostra a alternativa com Docker Compose, que também sobe o Mailpit, a caixa de e-mail de teste usada no workflow da cotação do dólar.

Antes de começar, abra o Docker Desktop e espere o ícone da baleia aparecer. No Windows, use o PowerShell ou o Terminal: os comandos são exatamente os mesmos.

Os comandos, na ordem do vídeo

ComandoO que faz
docker --versionConfere se o Docker está instalado e respondendo. Se aparecer a versão, está tudo certo (o número pode ser diferente no seu computador).
docker volume create n8n_dataCria um volume, a “pasta” onde ficam salvos os seus workflows e as configurações do n8n. Assim, nada se perde quando você desligar o n8n.
docker run -d --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8nCria e liga o container do n8n. -d faz ele rodar em segundo plano e deixa o terminal livre; --name n8n dá o nome n8n ao container; -p 5678:5678 abre a porta 5678, por onde você acessa o n8n no navegador; -v n8n_data:/home/node/.n8n liga o volume à pasta onde o n8n guarda os dados; e docker.n8n.io/n8nio/n8n é a imagem oficial do n8n. Na primeira vez, o Docker baixa a imagem, e isso pode levar alguns minutos.
docker psLista os containers que estão ligados. Procure o n8n com status Up e a porta 5678.
Abrir http://localhost:5678 no navegadorAbre o n8n. Na primeira vez, ele pede para criar a conta de dono: e-mail, nome e uma senha forte, com pelo menos oito caracteres, um número e uma letra maiúscula. Se a página não abrir de primeira, espere alguns segundos e atualize.
docker stop n8nDesliga o n8n. Nada é apagado.
docker start n8nLiga o n8n de novo. Seus workflows continuam lá, guardados no volume.
docker logs -f n8nMostra as mensagens do n8n em tempo real. Aperte Ctrl+C para sair: isso só fecha a visualização, e o n8n continua rodando.

Para copiar e colar, estes são os comandos que instalam e ligam o n8n:

docker --version
docker volume create n8n_data
docker run -d --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n
docker ps

Remover tudo (só se quiser começar do zero)

Esta parte é só para quando você quiser apagar o n8n do computador ou recomeçar do zero. Se não for o seu caso, pode pular.

ComandoO que faz
docker stop n8nDesliga o n8n.
docker rm n8nRemove o container, ou seja, a “caixinha”. A imagem e o volume continuam lá.
docker volume rm n8n_dataAtenção: apaga o volume e, junto com ele, todos os seus workflows. Só rode se tiver certeza.
docker rmi docker.n8n.io/n8nio/n8nApaga a imagem do n8n que o Docker baixou e libera espaço no disco.
docker stop n8n
docker rm n8n
docker volume rm n8n_data
docker rmi docker.n8n.io/n8nio/n8n

Conferir se ficou tudo limpo

ComandoO que faz
docker ps -aMostra todos os containers, até os desligados. O n8n não deve aparecer mais.
docker volume lsLista os volumes. O n8n_data não deve aparecer mais.
docker imagesLista as imagens baixadas. A imagem do n8n não deve aparecer mais.

docker run ou Docker Compose? Para conhecer o n8n, o docker run basta. Para seguir o restante deste artigo, com o e-mail de teste no Mailpit, use a instalação com Docker Compose da Parte 1. Se você já ligou o n8n com docker run, rode antes docker stop n8n e docker rm n8n, porque o Compose usa o mesmo nome (n8n) e a mesma porta (5678). O Compose cria um volume próprio, então os workflows do volume n8n_data não aparecem nele. Outra diferença: no docker run, o n8n usa o fuso horário padrão (America/New_York); no Compose, o .env já configura o horário de Brasília.


O que você vai construir

Ao final, você terá este workflow pronto no editor do n8n, com três nós ligados em sequência:

Editor do n8n com o workflow Cotação do dólar no e-mail: nós Schedule Trigger, HTTP Request e Send Email ligados em sequência
O workflow final “Cotação do dólar no e-mail” no editor do n8n (versão 2.40.7), já publicado.
  • Schedule Trigger: dispara o workflow sozinho, todo dia às 8h (horário de Brasília).
  • HTTP Request: busca a cotação atual do dólar na AwesomeAPI, uma API brasileira pública e sem chave.
  • Send Email: monta o e-mail com os valores e envia para o Mailpit, uma caixa de e-mail de teste que roda junto com o n8n.

Versão usada: n8n 2.40.7, a versão stable indicada na documentação oficial (docs.n8n.io) na data deste tutorial. O n8n lança versões novas quase toda semana, então alguns nomes de botões podem mudar com o tempo.

Pré-requisitos

  • Windows ou Mac: Docker Desktop instalado (ele já inclui o Docker Compose).
  • Linux: Docker Engine com o plugin Docker Compose.
  • Windows: use o WSL 2 e crie a pasta do projeto dentro do Linux (por exemplo, ~/orbitacode-n8n), e não em /mnt/c/..., como recomenda a documentação do n8n.
  • Um terminal e um editor de texto (por exemplo, o VS Code).

Para conferir se o Docker está pronto, rode os dois comandos abaixo. Se cada um responder com um número de versão, está tudo certo.

docker --version
docker compose version

Parte 1: instalar o n8n com Docker Compose

Vamos subir dois serviços com um único arquivo: o próprio n8n e o Mailpit, que recebe os e-mails de teste e mostra tudo numa página no navegador.

1. Crie a pasta do projeto

mkdir orbitacode-n8n && cd orbitacode-n8n

O primeiro comando cria a pasta orbitacode-n8n e o segundo entra nela. Todos os arquivos deste tutorial ficam aqui dentro.

2. Gere a chave de criptografia

openssl rand -hex 32

Esse comando gera uma sequência aleatória de 64 caracteres. O n8n usa essa chave para criptografar as credenciais (senhas, tokens) que você salvar nele. Se você não definir uma, o n8n cria uma sozinho na primeira execução e guarda dentro do volume de dados; definir a sua desde o começo deixa você no controle. Guarde uma cópia num gerenciador de senhas e nunca mostre essa chave para ninguém: sem ela, as credenciais salvas não podem ser lidas.

3. Crie o arquivo .env

Na pasta do projeto, crie um arquivo chamado .env com o conteúdo abaixo e cole a chave que você gerou no lugar de troque-por-uma-chave-aleatoria-longa.

# Versão do n8n: confira a versão "stable" atual antes de instalar
N8N_VERSION=2.40.7

# Fuso horário usado pelo Schedule Trigger e pelo container
GENERIC_TIMEZONE=America/Sao_Paulo

# Chave que criptografa as credenciais salvas no n8n
# Gere com: openssl rand -hex 32  (e guarde uma cópia em local seguro)
N8N_ENCRYPTION_KEY=troque-por-uma-chave-aleatoria-longa
  • N8N_VERSION: fixa a versão do n8n. Assim você atualiza quando quiser, e não quando uma versão nova sair.
  • GENERIC_TIMEZONE: fuso horário que o n8n usa nos agendamentos. O padrão é America/New_York; com America/Sao_Paulo, “8h” significa 8h de Brasília.
  • N8N_ENCRYPTION_KEY: a chave de criptografia do passo anterior.

4. Crie o arquivo docker-compose.yml

Agora crie o arquivo docker-compose.yml, que descreve os serviços que o Docker vai subir:

services:
  n8n:
    image: n8nio/n8n:${N8N_VERSION}
    container_name: n8n
    restart: unless-stopped
    ports:
      - "127.0.0.1:5678:5678"
    environment:
      - GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
      - TZ=${GENERIC_TIMEZONE}
      - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
      - N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
    volumes:
      - n8n_data:/home/node/.n8n

  mailpit:
    image: axllent/mailpit
    container_name: mailpit
    restart: unless-stopped
    ports:
      - "127.0.0.1:8025:8025"
    environment:
      - MP_SMTP_AUTH_ACCEPT_ANY=1
      - MP_SMTP_AUTH_ALLOW_INSECURE=1

volumes:
  n8n_data:

Veja o que cada parte faz:

  • image: n8nio/n8n:${N8N_VERSION}: usa a imagem oficial do n8n, na versão definida no .env.
  • ports: "127.0.0.1:5678:5678": 5678 é a porta padrão do n8n. O prefixo 127.0.0.1 faz o editor ficar acessível só no seu computador, o que é o mais seguro para estudar.
  • environment: passa para o container o fuso horário (GENERIC_TIMEZONE para o n8n e TZ para o sistema), a chave de criptografia e a opção N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true, que exige permissões seguras no arquivo de configuração, como nos exemplos oficiais.
  • volumes: n8n_data:/home/node/.n8n: guarda workflows, credenciais e histórico de execuções num volume do Docker. Sem ele, você perderia tudo ao recriar o container.
  • restart: unless-stopped: o container volta sozinho se o Docker reiniciar, a não ser que você o pare.
  • Serviço mailpit: um servidor de e-mail de teste. A interface web fica em localhost:8025. A porta SMTP (1025) não é publicada: o n8n acessa o Mailpit por dentro da rede do Compose, pelo nome mailpit. As variáveis MP_SMTP_AUTH_* fazem o Mailpit aceitar qualquer usuário e senha, o que serve só para teste local.

Sobre a documentação oficial: o guia atual “Install using Docker Compose” do docs.n8n.io monta uma estrutura maior, com serviços extras para o n8n Assistant (o assistente de IA). Para um primeiro contato, usamos esta versão enxuta. A variável N8N_RUNNERS_ENABLED, que aparece em tutoriais antigos, não é mais necessária: a documentação informa que ela está obsoleta desde o n8n 2.0.

5. Suba os containers

docker compose up -d
docker compose ps
docker compose logs -f n8n
  • docker compose up -d: baixa as imagens (só na primeira vez) e sobe os serviços em segundo plano (-d).
  • docker compose ps: mostra se os dois serviços, n8n e mailpit, estão rodando.
  • docker compose logs -f n8n: acompanha o log do n8n. Quando aparecer a mensagem Editor is now accessible via: http://localhost:5678, está pronto. Aperte Ctrl+C para sair do log; isso não desliga o n8n.

6. Faça o primeiro acesso

Abra o navegador em http://localhost:5678. Na primeira vez, o n8n pede para criar a conta de proprietário (owner) da instância: informe e-mail, nome e uma senha forte. Essa conta existe só no seu n8n. Se aparecer um questionário depois, você pode responder ou pular.

Abra também uma segunda aba em http://localhost:8025: é a caixa de entrada do Mailpit, que por enquanto está vazia.


Parte 2: montar o workflow, nó por nó

Na tela inicial do n8n, crie um workflow novo e dê a ele o nome Cotação do dólar no e-mail. Em seguida, adicione os três nós abaixo, nesta ordem. Cada nó novo é adicionado pelo botão + que aparece à direita do nó anterior.

Nó 1: Schedule Trigger (o agendador)

Todo workflow começa com um gatilho, o nó que decide quando a automação roda. Como queremos um e-mail todo dia de manhã, o gatilho é o Schedule Trigger.

Tela de configuração do nó Schedule Trigger com Trigger Interval Days, Days Between Triggers 1, Trigger at Hour 8am e Trigger at Minute 0
Configuração do Schedule Trigger. À direita, a saída de um teste mostra o fuso America/Sao_Paulo.
CampoValorPor que assim
Trigger IntervalDaysQueremos uma execução por dia, então a unidade do intervalo é “dias”.
Days Between Triggers1Intervalo de 1 dia: roda todos os dias, sem pular nenhum.
Trigger at Hour8amO e-mail deve chegar no começo do dia, às 8h.
Trigger at Minute0Minuto zero, ou seja, exatamente 8h00.

Repare na saída do teste, à direita: o campo Timezone mostra America/Sao_Paulo (UTC-03:00). Isso confirma que o GENERIC_TIMEZONE do .env está funcionando e que “8am” é 8h de Brasília. O aviso amarelo no topo lembra um detalhe importante: o agendamento só passa a valer depois que o workflow é publicado (fazemos isso na Parte 3).

Nó 2: HTTP Request (buscar a cotação)

O HTTP Request é o “canivete suíço” do n8n: com ele você conversa com praticamente qualquer API da internet. Aqui ele vai buscar a cotação do dólar na AwesomeAPI, que é pública, gratuita e não pede cadastro nem chave.

Tela de configuração do nó HTTP Request com método GET e a URL da AwesomeAPI; à direita, a saída em JSON com o objeto USDBRL
HTTP Request configurado. À direita (OUTPUT, modo JSON), a resposta da API com o objeto USDBRL.
CampoValorPor que assim
MethodGETSó queremos ler um dado da API, e GET é o método usado para leitura.
URLhttps://economia.awesomeapi.com.br/json/last/USD-BRLEndereço da AwesomeAPI que devolve a última cotação do par dólar/real (USD-BRL).
AuthenticationNoneA API é pública e não exige login nem chave.
Send Query ParametersdesligadoTudo o que a API precisa já está na URL.
Send HeadersdesligadoA API não exige cabeçalhos especiais.
Send BodydesligadoRequisições GET de leitura não enviam corpo.
Options(nenhuma)As opções padrão bastam para este caso.

Clique em Execute step para testar só este nó. A resposta traz um bloco chamado USDBRL com vários campos. Os que vamos usar no e-mail são:

  • bid: valor de compra;
  • ask: valor de venda;
  • high e low: máxima e mínima do dia;
  • pctChange: variação em porcentagem;
  • create_date: data e hora da atualização.

Os valores mudam a cada dia (e o que aparece no print é só um exemplo). Note que a API devolve os números como texto, com ponto no lugar da vírgula; no fim do artigo há uma dica para formatar no padrão brasileiro.

Nó 3: Send Email (enviar o e-mail)

O último nó, Send Email, envia um e-mail por um servidor SMTP. Ele precisa de uma credencial com os dados desse servidor. Como estamos testando, a credencial vai apontar para o Mailpit, e não para o seu e-mail de verdade.

Primeiro, a credencial SMTP

No campo Credential do nó, escolha criar uma credencial nova e preencha como nas imagens. Dê a ela o nome Mailpit local (teste) e clique em Save. O n8n testa a conexão ao salvar e mostra “Connection tested successfully” quando está tudo certo.

Credencial SMTP Mailpit local (teste) com User e Password vazios, Host mailpit e Port 1025, e a mensagem Connection tested successfully
Credencial SMTP, parte 1: usuário e senha vazios, host mailpit e porta 1025.
Continuação da credencial SMTP com SSL/TLS desligado, Disable STARTTLS ligado e Client Host Name vazio
Credencial SMTP, parte 2: SSL/TLS desligado e Disable STARTTLS ligado.
CampoValorPor que assim
User(vazio)O Mailpit foi configurado para aceitar qualquer usuário, então não precisa.
Password(vazio)Pelo mesmo motivo. Num servidor de verdade, aqui vai a senha (ou senha de app) do provedor.
HostmailpitÉ o nome do serviço no docker-compose.yml. Dentro da rede do Compose, esse nome aponta para o container do Mailpit. Não use localhost: dentro do container do n8n, localhost é o próprio n8n.
Port1025Porta SMTP padrão do Mailpit.
SSL/TLSdesligadoO Mailpit de teste não usa criptografia.
Disable STARTTLSligadoImpede que o n8n tente “promover” a conexão para criptografada, algo que esse servidor de teste não oferece.
Client Host Name(vazio)A documentação orienta deixar vazio, a não ser que o provedor peça.

Atenção: usuário e senha em branco e conexão sem criptografia servem só para o Mailpit, no seu computador. Nunca configure assim um servidor de e-mail real.

Depois, os campos do e-mail

Tela de configuração do nó Send Email com credencial Mailpit local (teste), remetente, destinatário, assunto com expressão, formato Text e opção Append n8n Attribution desligada
Send Email configurado. À esquerda (INPUT), os campos que vieram do HTTP Request; à direita (OUTPUT), a resposta do servidor de e-mail.
CampoValorPor que assim
CredentialMailpit local (teste)A credencial SMTP que acabamos de criar.
OperationSendQueremos só enviar a mensagem (a outra operação, “Send and Wait for Response”, espera uma resposta de quem recebe).
From EmailRobô Orbitacode <robo@seu-dominio.com>Remetente de exemplo, com um nome que aparece na caixa de entrada.
To Emailvoce@seu-dominio.comDestinatário de exemplo. No Mailpit, qualquer endereço chega na mesma caixa.
SubjectDólar hoje: R$ {{ $json.USDBRL.bid }}O assunto já mostra o valor de compra. A parte entre chaves duplas é uma expressão, trocada pelo valor atual a cada execução.
Email FormatTextTexto simples é o formato mais fácil de montar e de ler em qualquer programa de e-mail.
Texto texto do bloco abaixoCorpo do e-mail com todos os campos da cotação, cada um vindo de uma expressão.
Options → Append n8n AttributiondesligadoRemove a assinatura automática do n8n no fim do e-mail. É opcional, questão de gosto.

Este é o conteúdo do campo Text:

Bom dia!

Cotação do dólar comercial (USD → BRL):
Compra: R$ {{ $json.USDBRL.bid }}
Venda: R$ {{ $json.USDBRL.ask }}
Máxima do dia: R$ {{ $json.USDBRL.high }}
Mínima do dia: R$ {{ $json.USDBRL.low }}
Variação: {{ $json.USDBRL.pctChange }}%

Atualizado em: {{ $json.USDBRL.create_date }}
Fonte: AwesomeAPI

Você não precisa digitar as expressões: basta arrastar o campo (por exemplo, bid) do painel INPUT, à esquerda, para dentro do Subject ou do Text. O n8n escreve a expressão sozinho. Para conferir o resultado, abra o editor de expressão do campo Text: à esquerda fica o que você escreveu e, à direita (Result), o texto já com os valores reais.

Editor de expressão do campo Text do Send Email mostrando as expressões à esquerda e o resultado com os valores da cotação à direita
Editor de expressão do campo Text: expressões à esquerda e o resultado já preenchido à direita.

A expressão {{ $json.USDBRL.bid }} significa: “pegue, nos dados que chegaram do nó anterior ($json), o objeto USDBRL e, dentro dele, o campo bid”.


Parte 3: testar, publicar e acompanhar

O workflow completo e o teste de execução

Com os três nós configurados, clique em Execute workflow, na parte de baixo do editor, para rodar tudo de uma vez sem esperar as 8h. Se der certo, cada nó ganha um contorno verde com um ✓ e a indicação “1 item” nas ligações.

Workflow completo após a execução de teste, com os três nós em verde e a indicação 1 item entre eles
O workflow completo depois do teste: os três nós em verde. (Este print foi feito depois da publicação; por isso o botão no topo já mostra Published.)

Agora vá até a aba do Mailpit (http://localhost:8025). O e-mail chegou com a cotação no assunto e todos os detalhes no corpo:

E-mail recebido no Mailpit com assunto Dólar hoje e corpo com compra, venda, máxima, mínima, variação e data de atualização
Resultado do teste: o e-mail recebido na caixa do Mailpit.

No painel OUTPUT do nó Send Email (print do Nó 3), a saída confirma o envio: accepted lista o destinatário aceito, rejected está vazio e response começa com 250, o código SMTP de “mensagem aceita”.

Dica de formatação: para mostrar o valor com duas casas e vírgula (por exemplo, no assunto), troque a expressão por {{ Number($json.USDBRL.bid).toFixed(2).replace('.', ',') }}.

Publicar para rodar no automático

Até aqui, tudo rodou porque você clicou. Para o agendamento das 8h valer, clique em Publish, no canto superior direito do editor (atalho Shift+P). Na janela que abre, você pode dar um nome à versão; depois, clique em Publish de novo.

Janela Publish workflow com o campo Version name, o campo opcional Describe changes e o botão Publish
A janela de publicação do workflow.

Depois de publicado, o botão passa a mostrar Published (veja o canto superior direito do primeiro print do artigo). Se você editar o workflow mais tarde, o n8n salva as mudanças automaticamente, mas elas só entram em produção quando você publicar de novo, o que evita quebrar a automação sem querer.

Conferir as execuções

Na aba Executions, no topo do editor, fica o histórico de cada vez que o workflow rodou, com data, hora e se deu certo ou errado. É aqui que você vem investigar quando algo não sai como esperado.

Aba Executions do workflow com a lista de execuções bem-sucedidas à esquerda e os nós da execução selecionada em verde
A aba Executions com o histórico das execuções de teste.

Erros comuns

  • O e-mail não chega e o Send Email dá erro de conexão: confira se o Host da credencial é mailpit (e não localhost), a porta é 1025, o SSL/TLS está desligado e o Disable STARTTLS está ligado.
  • O workflow não roda sozinho às 8h: ele precisa estar publicado, e o n8n precisa estar ligado nesse horário (o computador e o Docker também).
  • O horário está errado: confira o GENERIC_TIMEZONE no .env e recrie o container com docker compose up -d.
  • A página localhost:5678 não abre: veja o log com docker compose logs -f n8n e confira se nenhum outro programa já usa a porta 5678.

Para desligar tudo, rode docker compose down na pasta do projeto; seus dados continuam no volume. Cuidado com docker compose down -v: o -v apaga os volumes e, com eles, seus workflows e credenciais. Para atualizar o n8n, troque o N8N_VERSION no .env e rode docker compose pull seguido de docker compose up -d.


JSON do workflow para importar

Se preferir, importe o workflow pronto. Baixe o arquivo abaixo ou copie o JSON. No n8n, crie um workflow novo e escolha uma das opções: clique no menu … (três pontinhos) no topo do editor e use Import para abrir o arquivo, ou simplesmente cole o JSON no canvas com Ctrl+V.

O download é um arquivo .zip com o cotacao-do-dolar-no-email.json dentro. Descompacte antes de importar (ou copie o JSON do bloco abaixo).

{
  "name": "Cotação do dólar no e-mail",
  "nodes": [
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "days",
              "daysInterval": 1,
              "triggerAtHour": 8,
              "triggerAtMinute": 0
            }
          ]
        }
      },
      "id": "5a1f0c2e-1111-4a6b-9c01-0a0000000001",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.4,
      "position": [
        0,
        0
      ]
    },
    {
      "parameters": {
        "url": "https://economia.awesomeapi.com.br/json/last/USD-BRL",
        "options": {}
      },
      "id": "5a1f0c2e-2222-4a6b-9c01-0a0000000002",
      "name": "HTTP Request",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.5,
      "position": [
        260,
        0
      ]
    },
    {
      "parameters": {
        "fromEmail": "Robô Orbitacode <robo@seu-dominio.com>",
        "toEmail": "voce@seu-dominio.com",
        "subject": "=Dólar hoje: R$ {{ $json.USDBRL.bid }}",
        "emailFormat": "text",
        "text": "=Bom dia!\n\nCotação do dólar comercial (USD → BRL):\nCompra: R$ {{ $json.USDBRL.bid }}\nVenda: R$ {{ $json.USDBRL.ask }}\nMáxima do dia: R$ {{ $json.USDBRL.high }}\nMínima do dia: R$ {{ $json.USDBRL.low }}\nVariação: {{ $json.USDBRL.pctChange }}%\n\nAtualizado em: {{ $json.USDBRL.create_date }}\nFonte: AwesomeAPI",
        "options": {
          "appendAttribution": false
        }
      },
      "id": "5a1f0c2e-3333-4a6b-9c01-0a0000000003",
      "name": "Send Email",
      "type": "n8n-nodes-base.emailSend",
      "typeVersion": 2.1,
      "position": [
        520,
        0
      ]
    }
  ],
  "connections": {
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "HTTP Request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request": {
      "main": [
        [
          {
            "node": "Send Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "meta": {
    "templateCredsSetupCompleted": false
  }
}

O arquivo não traz nenhuma credencial (por segurança, credenciais nunca vão no JSON). Se você já criou a credencial “Mailpit local (teste)”, o n8n costuma selecioná-la sozinho no nó Send Email ao importar; confira mesmo assim. Se ainda não criou, siga a seção do Nó 3.

Recapitulando

  • O n8n está rodando no Docker, com versão fixa e acessível só no seu computador.
  • Suas credenciais estão protegidas por uma chave de criptografia que só você tem.
  • Workflows, credenciais e execuções ficam salvos no volume n8n_data.
  • Você montou um workflow que busca um dado numa API pública e envia um e-mail sozinho, todo dia.

No próximo tutorial, vamos colocar inteligência artificial nessa história e trocar o Mailpit pelo seu e-mail de verdade. Os arquivos .env e docker-compose.yml deste tutorial estão completos nos passos 3 e 4 da Parte 1, e o workflow pronto está em JSON do workflow para importar.