Новое в Symfony 7.2: Улучшения в Mime
Компонент 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
с сообщением об ошибке, объясняющим проблему.