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

Устранение неполадок

Большинство проблем сводится к трём вещам: обработчик не запущен, Mailroom не знает адреса сайта или почта уходит, но не доходит. Начните с отчёта status, затем найдите свой симптом ниже.

Начните здесь

Три места говорят, что не так, одними и теми же словами:

  • bin/plugin mailroom status на сервере: база данных, схема, базовый маршрут, плагин Email, адрес From, адрес сайта, очередь и обработчик, с предупреждением и исправлением для каждой проблемы. Выходит с 1, когда она есть.
  • Экран Health в Mailroom (или bin/plugin mailroom deliverability:check): DNS вашего домена, транспорт, обработчик, адрес сайта и ваши проценты возвратов и жалоб.
  • Баннеры на панели управления Admin Next для всех, кто может читать Mailroom.

Адрес сайта не задан

Баннер «Mailroom does not know this site's address», предупреждение status или непрошедшая проверка Site URL означают, что не заданы ни Site URL Mailroom, ни Custom Base URL Grav. Ссылкам в письме нужен абсолютный адрес, а запросу посетителя никогда не доверяют его называть, поэтому письма подтверждения и всё, что отправляет обработчик, ждут в очереди. Одна строка в журнале Grav говорит об этом.

  • Откройте Settings Mailroom, затем Public Pages и задайте Site URL как адрес, которым пользуются люди, например https://www.example.com.
  • Или просто откройте панель управления Admin Next либо страницу Mailroom как администратор, который может управлять Mailroom, по HTTPS: Mailroom заполнит его из адреса, по которому вы пришли. По обычному HTTP на публичном хосте он этого не делает; там задайте вручную.

Письма, которые ждали, уходят при следующем запуске обработчика. См. Начало работы.

Ничего не отправляется

Кампаниям, автоматизациям, запланированным отправкам, повторным попыткам и импорту нужен обработчик. Если status говорит «The worker has never run» или «has not run for N minutes», планировщик Grav не вызывается.

  1. Добавьте планировщик в crontab пользователя, от которого работает сайт, со строкой PATH (см. Задания и cron). status печатает точную строку.
  2. Запустите bin/grav scheduler -d, чтобы увидеть ошибки каждого задания. env: php: No such file or directory означает, что строки PATH нет или она неверна.
  3. Проверьте, что Run From Grav's Scheduler (worker.scheduler) включена, если вы не запускаете обработчик иначе.
  4. Запустите bin/plugin mailroom work вручную, чтобы отправить то, что ждёт сейчас.

Письмо подтверждения, которое уходит, пока кампании не уходят, — это та же проблема: подтверждения отправляются сразу после собственного запроса подписки, а всему остальному нужен обработчик.

Письма подтверждения не приходят

  1. Проверьте, что человек есть в Subscribers как Waiting to confirm. Если его нет, подписка не дошла до Mailroom (см. Подписки отклоняются).
  2. Проверьте, что Mailroom знает адрес сайта (выше); без него подтверждения ждут.
  3. Проверьте, что Confirmation Emails (messages.confirmation) включены на вкладке Sending.
  4. Проверьте, что плагин Email отправляет: bin/plugin email test-email --to=you@example.com.
  5. Посмотрите в папку спама и на проверки домена экрана Health.

Ссылка подтверждения старше семи дней истекла; человек подписывается снова, чтобы получить свежую.

Кампании уходят, но не доходят

  • Кампания говорит Stopped. Слишком много отправок подряд было отклонено, и она остановила себя. Баннер на панели управления ведёт к ней. Исправьте транспорт плагина Email, затем нажмите Resume; никто из получивших её не получит письмо дважды.
  • Нет адреса From. «No From address is set, in Mailroom or the Email plugin»: задайте его на вкладке Sending или в плагине Email. Большинство транспортов отклоняют почту без отправителя.
  • Проверки домена не проходят. Откройте Health и исправьте SPF, DKIM и DMARC, как говорит каждая проверка, затем нажмите Check again. См. Доставляемость.
  • Высокий процент возвратов. Обычно это импортированный список из устаревшего источника. Каждый жёсткий возврат уже исключён, как только о нём сообщил webhook провайдера; без webhook возвраты вообще не записываются.

Ссылки начинаются с Site URL, затем идёт Custom Base URL Grav. Если Mailroom заполнил Site URL из визита администратора по другому адресу (скажем, по имени стенда), измените его на вкладке Public Pages. Уже отправленные ссылки сохраняют адрес и базовый маршрут, с которыми их отправили.

События провайдера не приходят

Начните с карточки провайдера на вкладке Providers и с того, что провайдер говорит, будто получил в ответ на свой запрос:

Статус Значение
404 Адрес неверен: секрет пересоздали (карточка говорит «The secret changed on ...»), транспортный плагин провайдера отсутствует или устарел либо не умеет сообщать о доставке. Скопируйте URL с карточки снова или нажмите Set up again in.
401 Подпись отклонена. Карточка читается Needs a key, или ключ в настройках транспортного плагина не тот, которым подписывает провайдер. Скопируйте ключ подписи в настройки этого плагина снова.
405 Что-то отправило GET. Провайдеры шлют POST; это получает браузер.
429 Больше Webhook Requests Per Hour с одного из адресов провайдера. Поднимите его или задайте 0.

Панель управления тоже говорит:

  • «... has said nothing in N days»: webhook настроен и кампании ушли, но ни одного события не пришло. Webhook на самом деле указывает не сюда, или его события не отмечены в панели провайдера.
  • «Something is posting to the ... webhook»: провайдер отправляет на карточку, у которой ещё нет секрета, поэтому его события выбрасываются. Нажмите Generate a secret и вставьте новый URL в провайдера. Если это были не вы, оно уйдёт само.

Чтобы увидеть, что делает сохранённая полезная нагрузка, воспроизведите её командой bin/plugin mailroom webhook:replay <provider> <file> (см. CLI): она называет строку отправки, с которой совпала, и что изменила бы.

Подписки отклоняются

Ответ Почему Исправление
429, «That is a few too many tries.» Больше Signups Per Hour с одного адреса посетителя. За прокси, балансировщиком нагрузки или ретранслятором каждый посетитель выглядит как один адрес: перечислите их в Trusted Proxies (см. API подписки). Если что-то перед сайтом уже ограничивает подписки, задайте ограничение 0.
415 Отправка формы без nonce сайта. Отправляйте JSON или сохраните поле nonce, которое рисует partial подписки.
422, consent_required У сайта есть Consent Sentence, а флажок не отмечен (или consent не был отправлен). Отправьте "consent": true от ретранслятора, который показал предложение и получил отметку.
422, list_required Форма, предлагающая списки флажками, была отправлена без единой отметки. Отметьте хотя бы один.

Кого-то нельзя добавить в список

Админка говорит почему:

  • «This address is on the suppression list, so it is never mailed.» Сначала снимите его на вкладке Suppressions и только когда знаете, почему он там оказался.
  • «They left it themselves.» Он отписался по ссылке, кнопкой почтового клиента, через центр предпочтений или жалобой на спам. Если он попросил вернуть его, используйте Put them back on с заметкой о том, как он просил. См. Двойное подтверждение подписки и согласие.

Кнопка отписки не показывается в Gmail

«The unsubscribe button is not reaching inboxes» означает, что ваш транспорт отбрасывает заголовки List-Unsubscribe. Карточка на вкладке Sending говорит, какой транспорт; SMTP2GO старше 1.0.1, например, их отбрасывает. Обновите транспортный плагин или переключите его на SMTP-транспорт, где он есть.

Сегмент не удалось посчитать

«The segment ... could not be counted» обычно означает, что условие называет поле из чего-то уже не установленного. Откройте сегмент, исправьте или удалите условие с пометкой «(no longer available)» и сохраните. bin/plugin mailroom segments:count --id=<id> пересчитывает его и говорит, получилось ли.

Импорт не запускается

«This site has no job queue running, so an import cannot be started.» Импорт выполняется обработчиком; см. Ничего не отправляется. Для большого файла bin/plugin mailroom import:csv выполняется на переднем плане.

Ждут миграции

На MySQL или PostgreSQL изменения таблиц новой версии ждут bin/plugin mailroom migrate, если Update the Tables не By itself, on every database. До этого обработчик и большинство команд отказываются работать. Запустите bin/plugin mailroom migrate --status, чтобы увидеть, что ждёт, затем bin/plugin mailroom migrate.

Базу данных можно скачать на nginx или Caddy

Запрещающий всё .htaccess в user/data/mailroom/ защищает файл SQLite только на Apache. На других серверах запретите user/data/ в настройках сервера. Для nginx:

location ^~ /user/data/ { deny all; }