P

Phalcon

Темы: phalcon PHP smtp
+ ещё 2
Пример отправки писем через SMTP Mailexam на Phalcon (PHP, пакет phalcon/incubator-mailer).

Phalcon + Mailexam

Минимальный пример Phalcon, который отправляет тестовое письмо через SMTP Mailexam с помощью phalcon/incubator-mailer.

Основан на руководстве Mailexam для Phalcon.

Что понадобится

Из приветственного письма или личного кабинета Mailexam:

Переменная Описание
MAILEXAM_LOGIN SMTP-логин (например, xxxxx)
MAILEXAM_PASSWORD SMTP-пароль (пара к логину)
Хост {MAILEXAM_LOGIN}.mailexam.ru (формируется в app/Services/MailConfig.php)

Проверьте, что расширение Phalcon загружено:

php -m | grep phalcon

Быстрый старт (на хосте)

  1. Установите зависимости:
composer install
  1. Скопируйте пример файла окружения и заполните учётные данные:
cp .env.example .env
  1. Отредактируйте .env:
MAILEXAM_LOGIN=ВАШ_ЛОГИН
MAILEXAM_PASSWORD=ВАШ_ПАРОЛЬ
MAILEXAM_PORT=587
MAIL_FROM=noreply@example.test
  1. Запустите встроенный PHP-сервер:
php -S 127.0.0.1:8080 -t public
  1. Отправьте тестовое письмо:
curl -X POST http://127.0.0.1:8080/mail/test \
  -H 'Content-Type: application/json' \
  -d '{"to":"user@example.test","subject":"Тест","body":"Привет"}'

Письмо появится в личном кабинете Mailexam → ваш проект → входящие.

Переменные окружения

Переменная Обязательна По умолчанию Описание
MAILEXAM_LOGIN да SMTP-логин; также используется для формирования имени хоста
MAILEXAM_PASSWORD да SMTP-пароль
MAILEXAM_PORT нет 587 SMTP-порт (587, 2525, 465 или 25)
MAIL_FROM нет noreply@example.test Адрес отправителя (подойдёт любой тестовый)
HTTP_HOST нет 127.0.0.1 Адрес привязки HTTP (Docker)
HTTP_PORT нет 8080 Порт HTTP

Для порта 587 и 2525 шифрование — tls. Для порта 465ssl.

Структура проекта

.
├── composer.json
├── app/Services/MailConfig.php
├── app/Controllers/MailController.php
├── config/routes.php
├── public/index.php              # загружает .env через phpdotenv
├── .env.example
├── Dockerfile                    # только для локальной отладки
└── docker-compose.yml

Docker (отладка)

Docker предназначен для локальной отладки. Образ включает расширение Phalcon. Для повседневной разработки на хосте установите расширение локально (см. выше).

cp .env.example .env
# отредактируйте .env с учётными данными

docker compose up --build

Затем вызовите тот же endpoint на проброшенном порту:

curl -X POST http://127.0.0.1:8080/mail/test \
  -H 'Content-Type: application/json' \
  -d '{"to":"user@example.test","subject":"Тест","body":"Привет"}'

Внутри контейнера сервер слушает 0.0.0.0:8080.

CI

Задайте эти секреты в окружении CI (используйте образ PHP с расширением phalcon):

variables:
  MAILEXAM_LOGIN: $MAILEXAM_LOGIN
  MAILEXAM_PASSWORD: $MAILEXAM_PASSWORD
  MAILEXAM_PORT: "587"
  MAIL_FROM: "noreply@example.test"

После отправки письма в тесте проверьте доставку через API Mailexam.

Типичные проблемы

Class Phalcon\... not found

  • Установите и включите расширение Phalcon для той же версии PHP, что используется в CLI и FPM.

TLS или ошибка аутентификации

  • Хост должен быть {логин}.mailexam.ru, где {логин} совпадает с MAILEXAM_LOGIN.
  • Логин и пароль должны быть из одного проекта Mailexam.

Порт 587

  • Требуется 'encryption' => 'tls', а не ssl.

Письмо не в кабинете

  • Откройте входящие того же проекта Mailexam.
  • При необходимости включите отладку PHPMailer в конфигурации incubator-mailer.

См. также

Лицензия

Apache 2.0