Меню

Программисту

Свой SMTP сервер для функции Email2SMS на ReactPHP

Дописал наконец-то сервер транслятор SMTP в HTTP API для smspilot.ru. ReactPHP очень крутой инструмент, с идеальным Promise API, но сцуко слишком бедный в плане качественных пакетов.

99% веб приложений нужно: слой работы с БД, http-клиент и отправка почты — SMTP-клиент. Так вот эти нужные пакеты для reactphp сделаны через жопу. Пришлось написать свои:

  1. smtp-сервер с авторизацией (LOGIN PLAIN CRAM-MD5)
  2. простой smtp-клиент, асинхронный аналог функции mail
  3. нормальный mysqli pool на MYSQL_ASYNC (есть такая штука в mysqlnd, там свой event-loop внутри)
  4. простой http-клиент c chunked и SSL (во всех проверенных либо не понравился интерфейс, либо что-то не работало)

Если будет интересно, то опубликую на github-е

SENDERR only (P)SUBSCRIBE / (P)UNSUBSCRIBE / PING / QUIT allowed in this context

Я ему

RPUSH mail_queue {email:info@example.com,text:test}
PUBLISH mail_channel send

он мне

ОК

а демон на reactphp такой
SUBSCRIBE mail_channel

получаю сообщение send по каналу mail_channel
и тут-же вызываю

LPOP mail

а redis мне

SENDERR only (P)SUBSCRIBE / (P)UNSUBSCRIBE / PING / QUIT allowed in this context

Оказывается Redis не разрешает использовать одно соединение для SUBSCRIBE и для работы с данными. Используйте отдельные соединения.