Перейти к содержимому

connectMailbox

Обновлено 17 октября 2026

Подключает ящик к каналу «Почта» — то же, что «Вход в ящик» в кабинете. Ящики Gmail, Outlook, Яндекса и Mail подключаются входом через сервис: метод вернёт ссылку на страницу входа. Остальная почта — по логину и паролю: метод проверит вход и отправку сразу.

Запрос POST /waInstance{idInstance}/connectMailbox/{apiTokenInstance}
Тело JSON
Каналы почта

Как выбирается способ входа

Способ Когда
Через сервис у почты есть вход через сервис — Gmail и Google Workspace, Outlook и Microsoft 365, Яндекс и Яндекс 360, Mail и VK WorkMail, — а password, imap и smtp не переданы. Или auth: "oauth"
По паролю остальная почта: Рамблер, iCloud, почта хостингов, своя почта. Или передан password, заданы imap и smtp, auth: "password"

Если вход через сервис для этой почты недоступен, нужен пароль. Gmail в этом случае пускает только по паролю приложения; iCloud и часть ящиков Яндекса и Mail тоже пускают почтовые программы только по отдельному паролю — передайте его в password.

Параметры

Параметр Тип Обязательный Описание
email string да адрес ящика
password string нет пароль от ящика или пароль приложения — для входа по паролю
login string нет логин, если не совпадает с адресом
imap string нет сервер входящей почты, если Gratio не нашёл его сам: mail.school.ru:993. Задан — вход по паролю
smtp string нет сервер отправки: starttls://mail.school.ru:587
since string, integer нет прислать уведомлениями письма с этой даты: ГГГГ-ММ-ДД или время Unix. По умолчанию — только письма после подключения
fromName string нет имя в «От кого»
auth string нет oauth или password — способ входа явно
  • Сервер — адрес[:порт]. Без схемы — TLS сразу, порт по умолчанию 993 для IMAP и 465 для SMTP. starttls:// — STARTTLS, порты по умолчанию 143 и 587.
  • С since уведомлениями придут не больше 200 последних писем каждой отслеживаемой папки. Остальные читайте методом getMessages.

Пример запроса

Подключить ящик школы на Яндекс 360 — входом через сервис:

curl

curl -X POST "$GRATIO_URL/waInstance$GRATIO_ID/connectMailbox/$GRATIO_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
    "email": "info@school.ru",
    "fromName": "Школа робототехники"
  }'

Python

import os
import requests

BASE = f"{os.environ['GRATIO_URL']}/waInstance{os.environ['GRATIO_ID']}"
TOKEN = os.environ["GRATIO_TOKEN"]

url = f"{BASE}/connectMailbox/{TOKEN}"
payload = {"email": "info@school.ru", "fromName": "Школа робототехники"}
response = requests.post(url, json=payload, timeout=60)
print(response.status_code, response.json())

Node.js

const { GRATIO_URL, GRATIO_ID, GRATIO_TOKEN } = process.env;
const base = `${GRATIO_URL}/waInstance${GRATIO_ID}`;

const url = `${base}/connectMailbox/${GRATIO_TOKEN}`;
const payload = { email: "info@school.ru", fromName: "Школа робототехники" };
const response = await fetch(url, {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify(payload),
});
console.log(response.status, await response.json());

PHP

<?php
$base = getenv('GRATIO_URL') . '/waInstance' . getenv('GRATIO_ID');
$url = $base . '/connectMailbox/' . getenv('GRATIO_TOKEN');
$payload = ['email' => 'info@school.ru', 'fromName' => 'Школа робототехники'];

$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS => json_encode($payload, JSON_UNESCAPED_UNICODE),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 60,
]);
$response = json_decode(curl_exec($ch), true);
echo curl_getinfo($ch, CURLINFO_HTTP_CODE), PHP_EOL;
print_r($response);

Пример ответа

Ответ 200 OK — ссылка на страницу входа:

{
  "connected": false,
  "auth": "oauth",
  "email": "info@school.ru",
  "provider": "yandex",
  "providerTitle": "Яндекс",
  "authUrl": "https://oauth.yandex.ru/authorize?response_type=code&client_id=…",
  "expiresAt": 1791824858
}

Поля ответа

Поле Тип Описание
connected boolean false: ящик подключится, когда человек войдёт на странице сервиса
auth string oauth — вход через сервис
email string адрес ящика
provider string сервис входа: google, microsoft, yandex, mailru
providerTitle string название для кнопки «Войти через …»: Google, Microsoft, Яндекс, Mail
authUrl string страница входа сервиса
expiresAt integer до какого времени действует ссылка, время Unix

Что делать со ссылкой

Приложение             Gratio                     Сервис почты
    │ connectMailbox ────►│                             │
    │◄── authUrl ─────────│                             │
    │ человек открывает authUrl ───────────────────────►│ вход, «Разрешить»
    │                     │◄── возврат на страницу Gratio
    │                     │ проверка IMAP и SMTP        │
    │◄── stateInstanceChanged: authorized               │
  1. Откройте authUrl человеку, который знает этот ящик, — в новом окне браузера.
  2. Он входит в ящик email и разрешает доступ к почте. Пароль Gratio не видит.
  3. Сервис возвращает его на страницу Gratio: ящик проверяется и подключается, окно можно закрыть.
  4. Канал переходит в authorized — следите за getStateInstance или уведомлением stateInstanceChanged.

Ссылка одноразовая и действует 20 минут, до expiresAt. Человек отказал в доступе или вошёл не в тот ящик — итог показан на странице Gratio, а канал остаётся notAuthorized. Вызовите метод снова за новой ссылкой.

Ещё примеры

По паролю

Ящик на хостинге. Вход и отправка проверяются сразу, пароль сохраняется только после успешной проверки:

curl -X POST "$GRATIO_URL/waInstance$GRATIO_ID/connectMailbox/$GRATIO_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
    "email": "info@school.ru",
    "password": "…",
    "since": "2026-10-01"
  }'

Ответ 200 OK — ящик подключён, канал сразу authorized:

{
  "connected": true,
  "auth": "password",
  "email": "info@school.ru",
  "login": "info@school.ru",
  "provider": "beget",
  "imap": {"host": "imap.beget.com", "port": 993, "security": "ssl"},
  "smtp": {"host": "smtp.beget.com", "port": 465, "security": "ssl"},
  "messages": 1532
}
Поле Тип Описание
connected boolean true — ящик подключён
login string логин, с которым вошли
provider string сервис почты, если Gratio его узнал: yandex, mailru, gmail, rambler, icloud, nicru, beget, timeweb, regru; null — серверы заданы вручную
imap, smtp object серверы: host, port, security — ssl или starttls
messages integer писем во «Входящих»

Почта на своём сервере

Серверы заданы вручную — вход по паролю:

curl -X POST "$GRATIO_URL/waInstance$GRATIO_ID/connectMailbox/$GRATIO_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
    "email": "info@school.ru",
    "password": "…",
    "imap": "mail.school.ru:993",
    "smtp": "starttls://mail.school.ru:587"
  }'

Как Gratio находит серверы

  1. По домену адреса: yandex.ru, mail.ru, gmail.com, outlook.com, rambler.ru, icloud.com и другие домены этих сервисов.
  2. По записи MX домена: почта компании на Яндекс 360, VK WorkMail, Google Workspace, Microsoft 365, RU-CENTER, Beget, Timeweb, REG.RU.
  3. Иначе пробует imap.<домен> и mail.<домен>.

Не нашёл — servers_unreachable: задайте imap и smtp.

Ошибки

Код code Когда Что делать
400 validation нет email; неверный imap, smtp или since исправить запрос
400 bad_address адрес ящика не распознан проверить адрес
400 bad_auth auth — не oauth и не password исправить auth
400 password_required нужен пароль: у почты нет входа через сервис или передан auth: "password" передать password
400 oauth_unavailable auth: "oauth", а вход через сервис для этой почты недоступен войти по паролю
400 unsupported почту не подключить: Outlook и Microsoft 365 без входа через сервис по паролю не пускают подключить ящик на другом сервисе
400 auth_failed почта не приняла логин или пароль проверить логин и пароль; что проверить у этого сервиса — в message
400 app_password_required сервис не пускает почтовые программы по основному паролю создать пароль приложения в настройках почты, передать его в password
400 imap_disabled в настройках почты выключен доступ почтовых программ (IMAP) включить IMAP в настройках почты
400 servers_unreachable серверы почты не отвечают проверить или задать imap и smtp
400 smtp_refused сервер отправки ответил отказом см. message
400 unavailable почта временно не пускает повторить через минуту
501 not_supported канал — не почта вызвать у канала «Почта»

Не повторяйте запрос с тем же паролем после auth_failed: после серии неудачных входов сервис почты может заблокировать вход. Общие правила — в статье Ответы и ошибки.

Что дальше

Была ли статья полезна?