Mime组件

编辑本页

警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 5.3,现已不再维护。

本页的更新版本用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。

Mime组件

Mime组件允许操纵用于发送电子邮件的Mime消息,并提供与Mime类型相关的实用程序。

安装

1
作曲家需要交响乐/默剧欧宝娱乐app下载地址

请注意

如果在Symfony应用程序外部安装此组件,则必须要求欧宝娱乐app下载地址供应商/ autoload.php文件,以启用Composer提供的类自动加载机制。读这篇文章欲知详情。

简介

MIME(多用途互联网邮件扩展)是一个互联网标准,它扩展了电子邮件的原始基本格式,以支持以下功能:

  • 使用非ascii字符的标题和文本内容;
  • 包含多个部分的消息体(例如HTML和纯文本内容);
  • 非文本附件:音频、视频、图像、PDF等。

整个MIME标准是复杂而庞大的,但Symfony抽象了所有的复杂性,提供了两种创建MIME消息的方法欧宝娱乐app下载地址:

  • 的高级API电子邮件类快速创建具有所有公共功能的电子邮件消息;
  • 的低级API消息类以对电子邮件消息的每个部分拥有绝对控制。

使用

使用电子邮件阶级和他们的证明编写整个电子邮件的方法:

12 3 4 5 6 7 8 9 10 11 12 13
使用欧宝娱乐app下载地址组件Mime电子邮件电子邮件= (电子邮件())->从(“fabien@欧宝娱乐app下载地址www.oldmanjams.com”->(“foo@example.com”->cc (“bar@example.com”->bcc (“baz@example.com”->replyTo (“fabien@欧宝娱乐app下载地址www.oldmanjams.com”->优先级(电子邮件::PRIORITY_HIGH)->主题(“重要通知”->文本(“Lorem ipsum…”->html ('

Lorem ipsum

'
) ;

该组件的唯一用途是创建电子邮件消息。使用梅勒组件真正发送它们。

树枝集成

Mime组件与Twig进行了出色的集成,允许您从Twig模板,嵌入图像,内联CSS等创建消息。关于如何使用这些功能的详细信息可以在Mailer文档中找到:欧宝体育电话树枝:HTML和CSS

但是,如果使用的是Mime组件而不是Symfony框架,则需要处理一些设置细节。欧宝娱乐app下载地址

树枝的设置

要与Twig集成,请使用BodyRenderer类来呈现模板并使用结果更新电子邮件消息内容:

12 3 4 5 6 7 8 9 10 11 12 13 14
/ /……使用欧宝娱乐app下载地址嫩枝MimeBodyRenderer使用嫩枝环境使用嫩枝加载程序FilesystemLoader//当在一个全堆栈的Symfony应用程序中使用Mime组件时,您可以使用欧宝娱乐app下载地址//不需要做这个Twig设置。你只需要注入'twig'服务加载程序FilesystemLoader (__DIR__“/模板”);嫩枝环境(加载程序);渲染器BodyRenderer (嫩枝);//用渲染结果更新$email对象内容//前面用给定上下文定义的模板渲染器->呈现(电子邮件);

内联CSS样式(和其他扩展)

使用inline_css过滤器,首先安装树枝扩展:

1
编译器需要twig/cssinliner-extra

现在,启用扩展:

1 2 3 4 5 6
/ /……使用嫩枝额外的CssInlinerCssInlinerExtension加载程序FilesystemLoader (__DIR__“/模板”);嫩枝环境(加载程序);嫩枝->addExtension (CssInlinerExtension ());

应该使用相同的过程来启用其他扩展,如MarkdownExtension而且InkyExtension

创建原始电子邮件

这对于需要绝对控制每个电子邮件部分的高级应用程序非常有用。不推荐使用常规电子邮件需求的应用程序,因为它增加了复杂性,却没有真正的好处。

在继续之前,看一看电子邮件的底层结构是很重要的。考虑一条消息,其中包括一些文本和HTML内容,在这些内容中嵌入一个PNG图像,并附加一个PDF文件。MIME标准允许以不同的方式构造此消息,但下面的树是在大多数电子邮件客户端上工作的树:

1 2 3 4 5 6 7
多功能/混合├──多功能/相关│├──多功能/另类││├──text/plain││├─text/html│├──image/png├──application/pdf

这是每个MIME消息部分的目的:

  • 多部分/替代:当两个或两个以上的部分是相同(或非常相似)内容的替代品时使用。首选格式必须最后添加。
  • 多部分/混合:用于在同一消息中发送不同的内容类型,例如附加文件时。
  • 多部分/相关:用于表示每个消息部分是一个聚合整体的组成部分。最常见的用法是显示嵌入在消息内容中的图像。

当使用低层消息类来创建电子邮件消息,您必须记住以上所有内容,手动定义电子邮件的不同部分:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16
使用欧宝娱乐app下载地址组件Mime使用欧宝娱乐app下载地址组件Mime消息使用欧宝娱乐app下载地址组件Mime部分多部分AlternativePart使用欧宝娱乐app下载地址组件Mime部分TextPart= (头())->addMailboxListHeader (“从”, (“fabien@欧宝娱乐app下载地址www.oldmanjams.com”])->addMailboxListHeader (”到“, (“foo@example.com”])->addTextHeader (“主题”“重要通知”) ;textContentTextPart (“Lorem ipsum…”);htmlContentTextPart ('

Lorem ipsum

'
“html”);身体AlternativePart (textContenthtmlContent);电子邮件消息(身体);

嵌入图像和附加文件可以通过创建适当的电子邮件多部分:

12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21
/ /……使用欧宝娱乐app下载地址组件Mime部分DataPart使用欧宝娱乐app下载地址组件Mime部分多部分MixedPart使用欧宝娱乐app下载地址组件Mime部分多部分RelatedPart/ /……embeddedImageDataPart (fopen (“/道路/ /图片/ logo.png”“r”),“图像/ png”);imageCidembeddedImage->getContentId ();attachedFileDataPart (fopen (“/道路/ /文件/ terms-of-use.pdf”“r”),“应用程序/ pdf”);textContentTextPart (“Lorem ipsum…”);htmlContentTextPart (sprintf (' < img src = " cid: % s " / > < h1 > Lorem ipsum < / h1 > < p >…< / p > 'imageCid),“html”);bodyContentAlternativePart (textContenthtmlContent);身体RelatedPart (bodyContentembeddedImage);messagePartsMixedPart (身体attachedFile);电子邮件消息(messageParts);

序列化邮件消息

创建的电子邮件消息电子邮件消息类可以序列化,因为它们是简单的数据对象:

1 2 3 4 5 6
电子邮件= (电子邮件())->从(“fabien@欧宝娱乐app下载地址www.oldmanjams.com”/ /……serializedEmail=序列化(电子邮件);

一个常见的用例是存储序列化的电子邮件消息,将它们包含在与通讯组件并在稍后发送时重新创建。使用RawMessage类从序列化的内容重新创建电子邮件消息:

1 2 3 4 5 6 7
使用欧宝娱乐app下载地址组件MimeRawMessage/ /……serializedEmail=序列化(电子邮件);//之后,重新创建原始消息以实际发送它消息RawMessage (unserialize (serializedEmail));

MIME类型实用程序

虽然MIME主要是为创建电子邮件而设计的,但内容类型(也称为MIME类型由MIME标准定义的“媒体类型”)在电子邮件之外的通信协议(如HTTP)中也很重要。这就是为什么这个组件还提供了使用MIME类型的实用程序。

mimetypeMIME类型和文件扩展名之间的类转换:

12 3 4 5 6 7 8 9 10 11 12
使用欧宝娱乐app下载地址组件Mimemimetypemimetypemimetype ();extmimetype->getExtensions (“应用程序/ javascript”);// $exts = ['js', 'jsm', 'mjs']extmimetype->getExtensions (“图像/ jpeg”);// $exts = ['jpeg', 'jpg', 'jpeg']类型mimetype->getMimeTypes (js的);// $types = ['application/javascript', 'application/x-javascript', 'text/javascript']类型mimetype->getMimeTypes (“apk”);// $types = ['application/vnd.android.package-archive']

这些方法返回包含一个或多个元素的数组。元素位置表示其优先级,因此第一个返回的扩展名是首选扩展名。

猜测MIME类型

另一个有用的实用程序允许猜测任何给定文件的MIME类型:

1 2 3 4 5 6
使用欧宝娱乐app下载地址组件Mimemimetypemimetypemimetype ();mimeTypemimetype->guessMimeType (“/一些/道路/ / image.gif”);//猜测不是基于文件名,所以$mimeType将是'image/gif'//如果给定的文件确实是一个GIF图像

猜测MIME类型是一个耗时的过程,需要检查部分文件内容。欧宝娱乐app下载地址Symfony应用了多种猜测机制,其中一种基于PHPfileinfo扩展.建议安装该扩展,以提高猜测性能。

添加一个MIME类型猜测器

您可以通过创建实现的类来添加自己的MIME类型猜测器MimeTypeGuesserInterface

12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20
名称空间应用程序使用欧宝娱乐app下载地址组件MimeMimeTypeGuesserInterfaceSomeMimeTypeGuesser实现了MimeTypeGuesserInterface公共函数isGuesserSupported()保龄球//当支持猜测器时返回true(可能取决于操作系统)返回真正的;}公共函数guessMimeType(字符串路径:哦?字符串//检查存储在$path中的文件的内容来猜测它返回一个有效的MIME类型…如果未知则为null返回“……”;}}

MIME类型猜测者必须是注册为服务而且标记mime.mime_type_guesser标签。如果你在用默认的服务。yaml的配置,这已经为你做了,感谢自动配置

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。
欧宝娱乐app下载地址Symfony 5.3支持通过JoliCode