phpsoftbox / mailer
SMTP mailer for the PhpSoftBox framework
Requires
- php: ^8.5
- ext-mbstring: *
Requires (Dev)
- phpsoftbox/cs-fixer: ^1.2.2
- phpunit/phpunit: ^13.3
Suggests
- ext-openssl: Required for SMTP encryption tls/ssl.
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-09-29 11:54:07 UTC
README
SMTP-отправка для PhpSoftBox, совместимая с компонентом Notifications.
Быстрый старт
use PhpSoftBox\Mailer\Smtp\SmtpClient; use PhpSoftBox\Mailer\Smtp\SmtpClientConfig; use PhpSoftBox\Mailer\Transport\SmtpEmailTransport; use PhpSoftBox\Mailer\Transport\FileEmailTransport; use PhpSoftBox\Notifications\Email\EmailChannel; $config = new SmtpClientConfig( host: 'mailhog', port: 1025, username: null, password: null, encryption: 'none', helo: 'domain.local', ); $transport = new SmtpEmailTransport( new SmtpClient($config), defaultFrom: 'no-reply@domain.local', defaultFromName: 'CHGS WMS', ); $channel = new EmailChannel($transport, /* markdown */ null, /* renderer */ null, 'CHGS WMS <no-reply@domain.local>');
defaultFrom и payload from могут быть как чистым mailbox-адресом, так и адресом вида
CHGS WMS <no-reply@domain.local>. SMTP envelope MAIL FROM всегда получает только mailbox-часть.
Если транспорт используется без EmailChannel, отображаемое имя можно задать отдельно через
defaultFromName.
Формат письма и безопасность
- Письмо собирает
PhpSoftBox\Mailer\Mime\MimeMessageBuilder(общий для SMTP и file-транспорта). - Адреса
From,To,Cc,Reply-Toпроходят черезEmailAddress: перевод строки в адресе, а также пробел или угловые скобки в mailbox —InvalidArgumentException(защита от внедрения заголовков и параметров SMTP-команд). Адреса проверяются до соединения с SMTP-сервером. - Отображаемое имя (
Иван <ivan@example.com>илиdefaultFromName) и тема с не-ASCII символами кодируются по RFC 2047. - Тело (text и html) передаётся в
Content-Transfer-Encoding: quoted-printable: строки не длиннее 76 символов, не нужен 8BITMIME у сервера. Для просмотра.emlиз file-транспорта используйте почтовый клиент или MailHog. - Если сервер отклонил транзакцию (MAIL FROM/RCPT TO/DATA), транспорт отправляет
QUITи пробрасывает ошибку. - Пароль SMTP помечен
#[SensitiveParameter](вSmtpClientConfigиauthLogin()), команды SMTP-клиента не попадают в аргументы трассировки исключений — base64 логина и пароля не утекает в лог ошибок.
Требования: ext-mbstring; для encryption: tls|ssl — ext-openssl.
File transport
Для локальной отладки можно сохранять письма в файлы:
$transport = new FileEmailTransport( __DIR__ . '/var/mails', defaultFrom: 'no-reply@domain.local', defaultFromName: 'CHGS WMS', );
MailHog
Для локальной отладки удобно использовать MailHog (SMTP + UI).
Сервис можно поднять через docker-compose:
mailhog: image: mailhog/mailhog ports: - "1025:1025" - "8025:8025"
UI доступен на http://localhost:8025.
EmailMessage layout
Для шаблонных email используйте template() и layout():
use PhpSoftBox\Mailer\Message\EmailMessage; $message = EmailMessage::create('Тема письма') ->template('email/content.phtml', ['name' => 'User']) ->layout('email/layout.phtml', ['title' => 'Тема письма']);
В template()/layout() можно передавать как массив, так и DTO-объект.