Подключает ящик к каналу «Почта» — то же, что «Вход в ящик» в кабинете. Ящики 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 │
- Откройте
authUrlчеловеку, который знает этот ящик, — в новом окне браузера. - Он входит в ящик
emailи разрешает доступ к почте. Пароль Gratio не видит. - Сервис возвращает его на страницу Gratio: ящик проверяется и подключается, окно можно закрыть.
- Канал переходит в
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 находит серверы
- По домену адреса:
yandex.ru,mail.ru,gmail.com,outlook.com,rambler.ru,icloud.comи другие домены этих сервисов. - По записи MX домена: почта компании на Яндекс 360, VK WorkMail, Google Workspace, Microsoft 365, RU-CENTER, Beget, Timeweb, REG.RU.
- Иначе пробует
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: после серии неудачных входов сервис почты может заблокировать вход. Общие правила — в статье Ответы и ошибки.
Что дальше
- getStateInstance — дождаться
authorized. - getMailboxInfo — что подключилось: серверы, папки, квота.
- disconnectMailbox — отключить ящик.
- Почта — подключение ящика в кабинете.
