Перейти к содержанию

Интеграция Email, IMAP и Gmail в n8n: парсинг писем, вложения и задачи

Обновлено: 2026-05-30

AI summary: Problem/Solution-гайд по Email, IMAP, Gmail и n8n: как превращать входящие письма в задачи, заявки или файлы без дублей, потери вложений и обработки автоответов.
Готовый blueprint для внедрения

Импортируйте JSON в n8n, замените credentials, URL API, IDs, папки, каналы, лимиты и правила под вашу инфраструктуру.

Проблема: Письма остаются главным входом для заявок, счетов и обращений, но простая обработка inbox в n8n быстро создаёт дубли, ловит автоответы и теряет вложения.

Решение: Надёжная email-интеграция через n8n фильтрует inbox по label/folder, использует Message-ID как idempotency key, парсит тему и тело, сохраняет вложения и создаёт задачу, лид или ticket только один раз.

Схема интеграции Email IMAP Gmail и n8n для парсинга писем и вложений
Схема показывает путь письма от Gmail/IMAP до задачи или ticket с фильтрацией, dedupe и сохранением вложений.

Проблема: почему простая интеграция создаёт дубли и ручной хаос

Email выглядит простым источником данных, пока не появляются пересылки, треды, автоответчики, подписи, HTML-тело, вложения, одинаковые темы и письма от no-reply. Поэтому workflow должен работать не с “последним письмом”, а с устойчивым контрактом: message_id, from, subject, body_text, attachments и thread context.

Для Gmail лучше использовать Gmail API/labels, когда нужны стабильные IDs и вложения. Для общего почтового ящика подойдёт IMAP, но тогда особенно важны folder, seen/unseen state и журнал обработанных Message-ID.

Архитектура workflow для n8n

БлокЗадачаProduction-проверка
Email/Gmail triggerчитает новые письма из label/folderправильный label, query, unseen state
Normalize messageготовит from, subject, text, html и message_idнет автоответов и no-reply
Parse intentвыделяет тип письма: заявка, счёт, support, спамправила до создания задачи
Handle attachmentsсохраняет PDF/CSV/изображения в облакопроверка размера и типа
Check idempotencyне обрабатывает Message-ID повторноуникальный ключ mailbox+message_id
Create task/ticketсоздаёт задачу, лид или ticketссылка на письмо и вложения

Email workflow должен сначала решить, надо ли письмо обрабатывать вообще. Создавать задачу до фильтров — значит переносить мусор из inbox в CRM.

Контракт входных данных

{
  "mailbox": "support@example.ru",
  "message_id": "<CA+n8n-demo-10492@example.ru>",
  "from": "client@example.ru",
  "subject": "Счет и договор по проекту n8n",
  "body_text": "Добрый день, отправляю счет и договор во вложении.",
  "attachments": [
    {
      "filename": "invoice-10492.pdf",
      "mime_type": "application/pdf",
      "size_bytes": 284112
    },
    {
      "filename": "contract.docx",
      "mime_type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
      "size_bytes": 491230
    }
  ],
  "received_at": "2026-05-30T10:15:00Z"
}

Контракт нужен для тестов и повторного запуска. Даже если источник — Gmail Trigger, внутри workflow лучше привести письмо к единому виду: message_id, sender, subject, body_text, attachments.

Code Node: нормализация, mapping и guard-условия

const src = $json.body ?? $json;
const headers = src.headers ?? {};
const messageId = String(src.message_id ?? headers['message-id'] ?? src.id ?? '').trim();
if (!messageId) throw new Error('No email Message-ID or provider id');
const from = String(src.from ?? '').toLowerCase();
const subject = String(src.subject ?? '').trim();
const body = String(src.body_text ?? src.text ?? '').trim();
const ignored = /(auto.?reply|out of office|delivery status|mailer-daemon|no-reply)/i;
if (ignored.test(from) || ignored.test(subject)) {
  return [{ json: { action: 'ignore', reason: 'auto_or_system_email', from, subject } }];
}
const attachments = Array.isArray(src.attachments) ? src.attachments.filter(a => {
  const size = Number(a.size_bytes ?? 0);
  const name = String(a.filename ?? '').toLowerCase();
  return size > 0 && size < 25 * 1024 * 1024 && !name.endsWith('.exe');
}) : [];
const intent = /счет|invoice|оплат/i.test(subject + ' ' + body) ? 'invoice' : /договор|contract/i.test(subject + ' ' + body) ? 'contract' : 'support_request';
return [{ json: {
  action: 'create_task_or_ticket',
  idempotency_key: `email:${src.mailbox ?? 'default'}:${messageId}`.toLowerCase(),
  from, subject, intent,
  body_preview: body.slice(0, 600),
  attachment_count: attachments.length,
  attachments,
  received_at: src.received_at ?? new Date().toISOString()
}}];
Gmail API или IMAP: что выбрать

Gmail API удобнее для Gmail/Google Workspace: стабильные message ids, labels и отдельный attachments.get. IMAP универсальнее для любого ящика, но требует аккуратного управления folder, seen/unseen и повторной обработкой.

Готовый workflow JSON: скачать и импортировать

Скачать готовый workflow JSON Скачать тестовый payload

{
  "name": "Nodbot - Email IMAP Gmail parser with attachments",
  "nodes": [
    {
      "name": "Email or Gmail Trigger",
      "type": "n8n-nodes-base.webhook",
      "purpose": "Получить новое письмо"
    },
    {
      "name": "Normalize message",
      "type": "n8n-nodes-base.code",
      "purpose": "Собрать единый контракт письма"
    },
    {
      "name": "Classify email intent",
      "type": "n8n-nodes-base.code",
      "purpose": "Определить заявку, счёт или support"
    },
    {
      "name": "Check Message-ID dedupe",
      "type": "n8n-nodes-base.postgres",
      "purpose": "Не обработать письмо повторно"
    },
    {
      "name": "Save attachments",
      "type": "n8n-nodes-base.httpRequest",
      "purpose": "Сохранить вложения в облако"
    },
    {
      "name": "Create task or ticket",
      "type": "n8n-nodes-base.httpRequest",
      "purpose": "Создать задачу/тикет/лид"
    }
  ],
  "connections": "Email or Gmail Trigger → Normalize message → Classify email intent → Check Message-ID dedupe → Save attachments → Create task or ticket"
}

Пошаговая настройка связки

  1. Выберите источник: Gmail API для Google Workspace или IMAP для общего ящика.
  2. Настройте label/folder только для писем, которые должны попадать в автоматизацию.
  3. Импортируйте workflow JSON и замените credentials.
  4. Добавьте idempotency storage по mailbox+message_id.
  5. Протестируйте письмо с вложением, письмо без вложений и автоответ.

Тесты перед production

curl -X POST "https://YOUR-N8N-DOMAIN/webhook/integration-email-imap-gmail-n8n-parser" \
  -H "Content-Type: application/json" \
  --data @integration-email-imap-gmail-n8n-parser-payload.json
  1. Повторный payload не создаёт дубль и возвращает тот же output key.
  2. Некорректный mapping останавливается до запроса к внешнему API.
  3. Пустые необязательные поля не ломают workflow.
  4. Ошибка API уходит в alert или DLQ с безопасным payload.
  5. Execution data не содержит секретов, токенов и лишних персональных данных.

Production-риски

  • Обрабатывается весь inbox. Workflow создаст задачи из рассылок, автоответов и системных писем.
  • Нет Message-ID dedupe. Пересылка или повторный trigger создаст второй ticket.
  • HTML тело парсится как plain text. В задачу попадает мусор из подписи и стилей.
  • Вложения не проверяются. Большие или опасные файлы ломают execution.
  • Нет ссылки на исходное письмо. Менеджер не может быстро восстановить контекст.
Карточка результата email parser с отправителем, intent и количеством вложений
Пример результата: письмо превращено в задачу один раз, вложения проверены и сохранены.

Критерии готовности

  1. Источник ограничен label/folder/query, а не всем inbox.
  2. Message-ID или provider id сохраняется как idempotency key.
  3. Автоответы, no-reply и delivery status отфильтрованы.
  4. Вложения проверяются по размеру, типу и имени.
  5. Созданная задача содержит ссылку на письмо, preview и файлы.
Нужно превратить входящие письма в управляемые задачи?

Nodbot настроит Email/IMAP/Gmail + n8n: фильтры, Message-ID idempotency, парсинг тела, вложения, облачное хранение и создание задач в CRM/helpdesk.

Обсудить email-автоматизацию