Почтовый сервис / {{ pageTitle }}
{{ user ? roleLabel(user.role) : 'ВХОД' }}{{ user ? user.username.charAt(0).toUpperCase() : '—' }}
{{ page === 'logs' ? 'ДИАГНОСТИКА' : page === 'dashboard' ? 'СОСТОЯНИЕ СИСТЕМЫ' : page === 'settings' ? 'ИНТЕГРАЦИИ' : page === 'users' ? 'ДОСТУП И БЕЗОПАСНОСТЬ' : page === 'services' ? 'ПРАВИЛА РАСПОЗНАВАНИЯ' : page === 'proxies' ? 'СЕТЬ И ИЗОЛЯЦИЯ' : 'ПОЧТОВЫЕ ЯЩИКИ' }}

{{ pageTitle }}

{{ pageDescription }}

{{ notice.text }}
{{ stat.label }}{{ stat.value }}{{ stat.description }}
i
Осталось настроить OAuth Google

Добавьте аккаунты сейчас. Подключение станет доступно после настройки Client ID и Client Secret в .env.

Не настроен
i
{{ imapEnabled ? 'Уведомления IMAP IDLE включены' : 'Работает периодическая сверка' }}

{{ imapEnabled ? 'Слушатель будит очередь при изменениях. Gmail API загружает письма и проверяет пропуски.' : 'Быстрые уведомления доступны через отдельный IMAP-слушатель. Сверка Gmail API работает независимо.' }}

↗
Выпуск токенов · {{ oauthLabel }}

Добавьте аккаунт и нажмите «Подключить». Прокси назначается автоматически. После ручного входа refresh-токен сохранится в зашифрованном виде.

Готово

Загрузчик ProxyLine

Получение уже купленных IPv4-прокси. Ручные прокси остаются в общем пуле.

Ключ хранится зашифрованным и не возвращается в браузер.
SOCKS4/5, HTTP/HTTPS, с авторизацией или без. Используется только для загрузки из ProxyLine. Реквизиты хранятся зашифрованными.

Исключённые страны

Отметьте страны, из которых не нужно брать прокси.

Состояние загрузчика

{{ proxylineState?.syncing ? 'Загрузка…' : proxylineState?.enabled ? 'Включён' : 'Выключен' }}

API-ключ
{{ proxylineState?.keyConfigured ? 'Сохранён' : 'Не задан' }}
Доступ к API
{{ proxylineState?.useApiProxy ? 'Через ' + proxylineState.apiProxyAddress : 'Напрямую' }}
Последняя попытка
{{ dateTime(proxylineState?.lastAttemptAt) }}
Успешная синхронизация
{{ dateTime(proxylineState?.lastSyncAt) }}
Прокси после фильтров
{{ proxylineState?.importedCount || 0 }}

После загрузки чекер проверяет прокси. Только проверенные рабочие участвуют в распределении аккаунтов. Выключение загрузчика прекращает синхронизацию; уже загруженные прокси сохраняются.

Стабильность и обслуживание

{{ operationsError }}
0 — без очистки. Активная аренда защищает письма аккаунта.

Очистка выполняется небольшими пачками после свежей копии базы. Без успешной копии письма не удаляются.

Обслуживание

Последний сигнал процесса
{{ dateTime(operationsState?.maintenanceSeenAt) }}
Резервная копия
{{ dateTime(operationsState?.lastBackupAt) }}
Файл
{{ operationsState?.lastBackupFile || '—' }}
Последняя очистка
{{ dateTime(operationsState?.lastCleanupAt) }}
Удалено старых писем
{{ operationsState?.cleanupCount || 0 }}
{{ operationsState.backupError || operationsState.lastError }}

Тревоги видны на странице «Обзор». История автоматических замен — в карточке аккаунта.

Загружаем показатели…
{{ logError }}
Настройки логирования и хранения

Применяется ко всем сервисам в течение 2 секунд. debug — подробные события, info — основные этапы, warn — проблемы, silent — отключение записи. Старые файлы удаляются при превышении лимита или срока.

{{ (logStorage.bytes / 1048576).toFixed(1) }} МБ · {{ logStorage.files }} файлов · лимит {{ logSettings.maxTotalMB }} МБ

Поиск ограничен по времени. Уточните период или фильтры; результат может быть неполным.

ВРЕМЯУРОВЕНЬ / СЕРВИСАККАУНТСОБЫТИЕ
{{ logTime(row.time) }}PID {{ row.pid }} {{ row.level }}{{ row.service }} —Прокси #{{ row.data.proxyId }} {{ row.message }}{{ row.data.stage }}{{ row.data.error || row.data.reason }}Следующая попытка: {{ dateTime(row.data.nextAttemptAt) }}
Подробности
{{ JSON.stringify(row.data, null, 2) }}
Пропущено при перегрузке: {{ row.dropped }}

{{ logLoading ? 'Загружаем события…' : 'Нет событий по выбранным фильтрам.' }}

До 100 событий на странице
Поиск по тексту — первые 16 000 символов.
ПИСЬМО АККАУНТ / ПОЛУЧАТЕЛЬ ТИП ПОЛУЧЕНО
{{ row.sender }}{{ row.preview }} {{ row.account }}{{ row.to_address }} {{ row.type === 'free' ? 'Бесплатное' : 'Арендное' }} {{ dateTime(row.added_at) }}
{{ mailLoading ? 'Загружаем письма…' : 'Письма не найдены. Попробуйте изменить фильтры.' }}
Найдено: {{ mailTotal }} · по 25 на странице
Блокировки входа
10 попыток на логин · 40 на IP · окно 15 минут
{{ blockError }}
ТипIP / логинПопыткиБлокировка доОсталось
{{ block.kind === 'ip' ? 'IP' : 'Логин' }}{{ block.subject }} {{ block.attempts }}{{ dateTime(block.expires_at) }}{{ Math.ceil(block.retry_after / 60) }} мин.
Активных блокировок нет
Обновляется автоматически. Если заблокированы и IP, и логин — снимите оба ограничения. Если войти уже невозможно, используйте другую действующую сессию администратора или команду на сервере: npm run admin:unblock -- ip IP / login ЛОГИН.
Показаны первые 500 блокировок.
Аккаунты прокси #{{ proxyAccountFilter }}
СЕРВИС ПРАВИЛА РАСПОЗНАВАНИЯ СОВПАДЕНИЕ СТАТУС ПИСЬМА ДЕЙСТВИЯ
#{{ service.id }} · {{ date(service.added_at) }} Отправитель{{ service.match_sender || '(не задано)' }}Тема{{ service.match_subject || '(не задано)' }} {{ service.strict ? 'Оба условия' : 'Любое условие' }} {{ service.enabled ? 'Включён' : 'Выключен' }}
ПРОКСИ ДОСТУПНОСТЬ ЗАДЕРЖКА АККАУНТЫ СРОК ДЕЙСТВИЯ ДЕЙСТВИЯ
⇄
{{ proxy.address }}{{ proxy.source === 'proxyline' ? 'ProxyLine' : 'Добавлен вручную' }}#{{ proxy.id }} · {{ proxy.country === 'ZZ' ? 'Страна не указана' : proxy.country }}{{ proxy.working ? '' : ' · Выключен' }}
{{ proxyLabel(proxy) }}{{ proxy.checking ? 'Соединяемся с Google' : proxy.checkedAt ? 'Проверка ' + relative(proxy.checkedAt) : 'Ещё не проверяли' }}{{ proxy.error }} {{ proxy.latency == null ? '—' : proxy.latency + ' мс' }} {{ date(proxy.expiresAt) }}{{ expiryLabel(proxy) }}
АККАУНТ СТАТУС ПРОКСИ СИНХРОНИЗАЦИЯ ОЧЕРЕДЬ ДЕЙСТВИЯ
#{{ account.id }} · {{ account.is_free === 'Y' ? 'Бесплатный' : 'Арендный' }} · {{ account.mail_transport === 'gmail' ? 'Gmail API' : 'IMAP' }} Добавлен {{ date(account.added_at) }}
{{ accountLabel(account) }}{{ account.last_error }} {{ account.rental_enabled ? 'Заказы разрешены' : 'Заказы запрещены' }} {{ account.last_sync_at ? relative(account.last_sync_at) : '—' }}{{ dateTime(account.last_sync_at) }} {{ account.pending || 0 }}{{ account.failed }} ошибок
ПОЛЬЗОВАТЕЛЬ РОЛЬ СТАТУС ПОСЛЕДНИЙ ВХОД ДЕЙСТВИЯ
{{ item.username }}{{ item.id === user.id ? ' (вы)' : '' }}#{{ item.id }} · Создан {{ date(item.createdAt) }}
{{ roleLabel(item.role) }} {{ item.enabled ? 'Активен' : 'Заблокирован' }}Ожидает смены пароля {{ item.lastLoginAt ? dateTime(item.lastLoginAt) : 'Ещё не входил' }}
{{ page === 'proxies' ? '⇄' : '▤' }}

{{ search || filter !== 'all' ? 'Ничего не найдено' : page === 'services' ? 'Добавьте первый сервис' : page === 'proxies' ? 'Добавьте первый прокси' : 'Добавьте почтовые аккаунты' }}

{{ search || filter !== 'all' ? 'Попробуйте другой запрос или фильтр.' : page === 'services' ? 'Задайте код и правила распознавания писем.' : page === 'proxies' ? 'Укажите SOCKS-адрес и срок действия — проверку возьмём на себя.' : 'Импортируйте список адресов, затем подключите каждый через Google.' }}

{{ filteredRows.length ? (currentPage - 1) * pageSize + 1 : 0 }}–{{ Math.min(currentPage * pageSize, filteredRows.length) }} из {{ filteredRows.length }}
{{ currentPage }} / {{ totalPages }}
{{ page === 'dashboard' ? 'Показатели обновляются каждые 5 секунд. Сигнал процесса подтверждает его доступность, а отставание — результат работы.' : page === 'services' ? 'Правила применяются к новым письмам. Если подходят несколько сервисов, выбирается первый по ID.' : page === 'users' ? 'Изменение прав, блокировка или сброс пароля завершают все сессии пользователя.' : page === 'settings' ? 'Загрузчик работает, пока запущена админка. Настройки доступны только администраторам.' : page === 'proxies' ? 'HTTPS-проверка Google через SOCKS. Автопроверка каждые 5 минут.' : page === 'logs' ? 'Журнал записывается с момента включения. Пароли, токены и содержимое писем не сохраняются.' : 'Новые аккаунты доступны для аренды только после успешной авторизации.' }}{{ updatedAt ? 'Обновлено ' + dateTime(updatedAt) : '' }}
ПРАВИЛА ПИСЕМ

{{ serviceForm.id ? 'Сервис ' + serviceForm.scode : 'Новый сервис' }}

{{ formError }}
Код используется клиентами API. После создания не меняется. До 50 символов. Пустое условие не совпадает ни с одним письмом. Чтобы разрешить любое значение, укажите .* . Если заполнено только одно поле, выберите «отправитель или тема».

Выключение запрещает новую аренду и распознавание новых писем этого сервиса. Сохранённые письма и существующие заказы остаются в базе.

m

Вход в Mailspider

Войдите под своей учётной записью.

После 30 минут бездействия потребуется повторный вход.

Сменить пароль

{{ user?.mustChangePassword ? 'Перед началом работы замените временный пароль.' : 'После смены пароля все ваши сессии будут завершены.' }}

От 12 до 128 символов. Можно использовать длинную парольную фразу.

{{ userForm.id ? 'Управление пользователем' : 'Новый пользователь' }}

Латинские буквы, цифры, точка, дефис, подчёркивание.
{{ userForm.role === 'admin' ? 'Полное управление, включая пользователей и права доступа.' : userForm.role === 'operator' ? 'Управление аккаунтами, прокси, подключением OAuth и синхронизацией.' : 'Просмотр аккаунтов, прокси и статусов. Изменения запрещены.' }}
{{ userForm.id ? 'Оставьте пустым, чтобы сохранить текущий пароль.' : 'Минимум 12 символов. При первом входе пользователь задаст собственный пароль.' }}
ПРОКСИ

{{ proxyForm.id ? 'Редактировать прокси' : 'Новый прокси' }}

{{ proxyForm.id ? 'Оставьте адрес пустым, чтобы сохранить текущие реквизиты.' : 'Данные авторизации не будут отображаться в списках.' }}

Удалить аккаунты?

Выбрано аккаунтов: {{ deleteAccountIds.length }}.

Будут удалены письма, OAuth-токены, пароли, дополнительные данные и алиасы этих аккаунтов. Восстановления через админку нет.

Прокси и история завершённых заказов сохранятся. Если у любого выбранного аккаунта есть действующая аренда, вся операция будет отменена.

GMAIL

Добавить аккаунты

Вставьте строки с данными, выберите разделитель и назначьте колонки. Рабочие прокси выбираются автоматически.

Ссылки с http:// и https:// распознаются целиком, включая порт. Если разделитель есть в пароле или пути ссылки, заключите поле в двойные кавычки.

Количество частей может отличаться. Пустые и отсутствующие дополнительные поля пропускаются. Для пропуска поля в середине оставьте два разделителя подряд.

Предпросмотр первых 5 строк · всего {{ importPreview.accounts.length }}

{{ column.label || importKinds[column.kind] }}
{{ value }}
После импорта нажмите «Подключить». Откроется отдельный чистый Chrome с прокси аккаунта. Войдите в Google и разрешите доступ — дальше всё сохранится автоматически.

Подключение Gmail

{{ browserMessage }}

При ручном открытии используйте отдельный браузерный профиль с прокси этого аккаунта.
Открыть ссылку вручную ↗