Новое в Symfony 7.2: Улучшения в Mime

Источник: «New in Symfony 7.2: Mime Improvements»
В Symfony 7.2 в компоненте Mime добавлена поддержка кастомных энкодеров и адресов электронной почты в кодировке Unicode.

Компонент Mime предоставляет инструменты для создания и работы с сообщениями MIME. В Symfony 7.2 мы добавили новые функции для его улучшения.

Кастомные энкодеры MIME

Стандарт MIME был создан, чтобы расширить оригинальный формат почтовых сообщений для поддержки текста в наборах символов, отличных от ASCII, а также вложений любого типа. В компоненте Mime в Symfony это стало возможным отчасти благодаря энкодерам, используемым элементами TextPart. Ранее энкодеры представляли собой жёстко заданный список (quoted-printable, base64, 8bit).

В Symfony 7.2 элементы TextPart позволяют определять кастомные энкодеры для конкретных нужд. Например, если приложение использует SOAP-вложения, необходимо создать кастомный энкодер следующим образом:

use Symfony\Component\Mime\Encoder\ContentEncoderInterface;

class MyEncoder implements ContentEncoderInterface
{
public function encodeByteStream($stream, int $maxLineLength = 0): iterable
{
// ...
}

public function encodeString(string $string, ?string $charset = 'utf-8', int $firstLineOffset = 0, int $maxLineLength = 0): string
{
// ...
}

public function getName(): string
{
return 'my_encoder';
}
}

Теперь вы можете использовать этот энкодер в элементах TextPart при создании MIME-сообщения:

// ...
TextPart::addEncoder('my_encoder', new MyEncoder());
$content = new TextPart('...', 'utf-8', 'plain', 'my_encoder');

Поддержка адресов электронной почты в Unicode

Традиционно адреса электронной почты допускали только символы ASCII как в локальной, так и в доменной части. Это было неудобно для значительной части населения мира, поэтому RFC 6531 ввёл расширение протокола SMTP для поддержки интернационализированных адресов электронной почты.

В Symfony 7.2 мы добавляем поддержку символов Unicode в локальной и доменной частях адресов электронной почты:

use Symfony\Component\Mime\Email;

$email = (new Email())
->from('jânë.dœ@ëxãmplę.com')
// ...

Не нужно ничего менять в своём приложении, чтобы использовать эту функцию. Если удалённый SMTP-сервер не поддерживает адреса электронной почты в кодировке Unicode, вы увидите InvalidArgumentException с сообщением об ошибке, объясняющим проблему.

Комментарии


Дополнительные материалы

Предыдущая Статья

CSS min() — всё, что нужно

Следующая Статья

Глубокое погружение в сессии Laravel