Почта в веб-окружении - пункт меню, отправка, журнал
Разбираемся с почтой со стороны сервера: что делает пункт меню окружения, чем машина отдаёт письмо дальше и где смотреть ответ почтового сервера. Настройки самого сайта здесь не трогаем.
Решение
Настройка почты сайта
Открываем настройку почты нужного сайта:
/root/menu.sh# 8. Manage sites in the pool -> нужный сайт -> 4. e-mail/opt/webdir/bin/bx-sites -a email # тот же шаг в обход интерактивного меню# соседний пункт 3. cron переводит письма и агенты сайта на расписаниеМеню спрашивает ящик, сервер, порт и пароль, после чего переписывает настройки отправки само. Почта задаётся отдельно для каждого сайта пула, а не одна на всю машину сразу.
Чем сервер отправляет письмо
Смотрим, через что уходит письмо:
grep -rn 'sendmail_path' /etc/php.d/ /etc/php.inised -n '1,15p' /home/bitrix/.msmtprc# по блоку на каждый сайт: account, host, port, from, auth, tlsgrep -c '^account' /home/bitrix/.msmtprc # сколько сайтов уже настроеноСвоего почтового сервера в окружении нет: отправляющая программа только передаёт письмо тому ящику, который указан в её учётной записи. Отправка от имени самой машины требует полноценной почтовой службы и ставится отдельно.
Журнал отправки
Читаем журнал отправляющей программы:
tail -20 /home/bitrix/msmtp_default.loggrep -c 'exitcode=EX_OK' /home/bitrix/msmtp_default.log # сколько принятоgrep 'smtpstatus=' /home/bitrix/msmtp_default.log | tail -3 # отказы сервера# у сайта пула свой файл вида msmtp_<имя сайта>.log рядомСтрока журнала называет узел, ящик отправителя, получателя и ответ почтового сервера дословно. Очереди на машине при этом нет: отклонённое письмо теряется сразу, и повторную попытку никто не делает.
Проверка отправки с консоли
Отправляем пробное письмо от пользователя сайта:
# от пользователя сайта: его домашний каталог хранит учётные записи отправкиsu - bitrix -c 'php -r "mail(\"check@example.com\", \"Test\", \"Test\");"'echo 'test' | /usr/bin/msmtp --debug -t -i check@example.com# ключ отладки печатает весь разговор с почтовым сервером построчноПроверка из-под своей учётной записи не доказывает ничего: настройки отправки читаются из домашнего каталога того, кто запустил команду. Отсюда самая частая жалоба: с консоли письмо уходит, а из кода сайта нет.
Письма из заданий по расписанию
Смотрим задание сайта в планировщике:
cat /etc/cron.d/bx_<имя базы сайта># php -d sendmail_path="msmtp -t -i -a <аккаунт>" -f .../cron_events.php# ключ аккаунта выбирает учётную запись отправки именно этого сайтаgrep -n 'MAILTO' /etc/cron.d/bx_* # пустое значение глушит письма планировщикаЗадание задаёт способ отправки своим ключом запуска, поэтому письма с посещений сайта и письма по расписанию уходят разными путями. Служебные письма самого планировщика идут от системной учётной записи, и почтовый сервис их отклоняет.
После обновления окружения
Проверяем отправку после обновления пакетов:
php -m | grep -i curl # часть почтовых шаблонов ходит через curlgrep -rn 'sendmail_path' /etc/php.d/ # настройка отправки после обновленияsystemctl restart bx-php-fpm httpd # новые настройки PHP читаются при стартеОбновление возвращает сгенерированные файлы окружения к своему виду, а выключенные расширения PHP включают заново через меню. Ручная правка учётных записей отправки живёт до первого захода в пункт e-mail: меню перепишет файл целиком.
Типичные проблемы
С консоли письмо уходит, а с сайта нет.
Настройки отправки читаются из домашнего каталога того пользователя, от которого работает PHP. После правки файла перезапускают процессы PHP вместе с веб-сервером.
В журнале envelope from address bitrix not accepted.
Это служебные письма самого планировщика с системным адресом отправителя. Их глушат строкой MAILTO="" в начале файла задания.
Почтовый сервис отклоняет пароль ящика.
Публичные сервисы требуют отдельный пароль приложения и разрешение на отправку сторонней программой. Обычный пароль от веб-почты они не принимают даже при верном логине.
После перехода на новую версию окружения письма пропали.
Обновление сбросило включённые расширения PHP, а часть почтовых шаблонов обращается к curl. Расширение возвращают через меню и перезапускают процессы PHP.
Письма нет ни в ящике, ни в очереди сервера.
Отправляющая программа окружения очереди не держит и повторов не делает. Отказ виден только в её журнале, а очередь почтовой службы на такой машине пуста всегда.
Один сайт пула шлёт письма, второй молчит.
Учётная запись отправки заводится на каждый сайт отдельно, и у второго её просто нет. Настройку повторяют в разделе этого сайта тем же пунктом меню.
Частые вопросы
Как настроить отправку писем из BitrixVM?
Пунктом e-mail в разделе нужного сайта консольного меню: ящик, сервер, порт и пароль. Меню перепишет настройки отправки само, править файлы руками для этого не нужно.
Почему с консоли почта уходит, а из битрикса нет?
PHP на сайте работает от другого пользователя и читает настройки отправки из его домашнего каталога. Проверяют из-под пользователя сайта, а после правок перезапускают процессы PHP.
Можно ли отправлять письма прямо с сервера, без чужого ящика?
Штатная программа окружения умеет только передавать письмо указанному ящику, почтового сервера здесь нет. Отправку от имени машины поднимают отдельной службой, и такие письма чаще попадают в спам.
Куда смотреть, если письмо не дошло?
В журнал отправляющей программы в домашнем каталоге пользователя сайта. Он приводит ответ почтового сервера дословно, и по нему видно, приняли письмо или отклонили.
Почему письма приходят с задержкой в несколько минут?
Настройка окружения на это не влияет: задержку даёт очередь писем самого сайта. Её разбирает задание по расписанию, и до отправляющей программы письмо доходит не сразу.
Смежное
- BitrixVM и веб-окружение - оглавление подтемы
- Инфраструктура 1С-Битрикс - устройство площадки целиком
- Настройка отправки почты: локальная отправка и SMTP - та же задача со стороны сайта
- Письма не в спам: подписи домена, обратный адрес, репутация - записи домена и репутация отправителя
- Письма с сайта не доходят: разбор причин - разбор всей цепочки от события до ящика
- Очередь писем: фоновая отправка, порции, повторы, чистка - что происходит до передачи серверу
- Меню окружения и службы - остальные пункты меню и перезапуск служб
- Журналы сервера: где лежат, что смотреть, ротация - остальные журналы машины
- Обновление окружения и смена версии PHP - что именно сбрасывает обновление
- Агенты не выполняются: разбор причин - кто запускает отправку по расписанию