tomazahlin / symfony-mailer-bundle
Mailer 扩展包为 Symfony2 框架提供了一种邮件发送器(邮件代理)的实现(Swiftmailer 包装器)。它允许您以一种非常优雅的方式发送邮件,并提供了一些扩展点,以便进行所需的修改。
Requires
- php: >=5.4
- sensio/distribution-bundle: >=4.0
- sensio/framework-extra-bundle: ~3.0,>=3.0.2
- symfony/framework-bundle: ~2.6
- symfony/swiftmailer-bundle: ~2.3
Requires (Dev)
README
这是对扩展包结构说明,也是安装/示例教程。
Mailer 扩展包允许您在发送电子邮件时编写非常干净的代码。默认情况下,它使用 Swiftmailer,但如果您愿意,您可以覆盖完整的邮件发送器实现并使用其他邮件库。电子邮件可以直接在代码中发送到 Swiftmailer,如果您实现了可排队的邮件发送器,邮件发送可以推迟到 Symfony 的 kernel.terminate 事件,该事件在输出已发送给用户后处理,因此用户不会注意到邮件发送的延迟。
代码与 Symfony2 框架相关联,正如扩展包中所示。如果需要或请求,它可能在以后解耦。
安装
使用 composer 在 composer.json 中要求扩展包,通过运行以下命令
php composer.phar require tomazahlin/symfony-mailer-bundle
在 AppKernel.php 中启用扩展包
public function registerBundles() { $bundles = array( // ... new Ahlin\Bundle\MailerBundle\AhlinMailerBundle(), ); }
运行测试
bin/phpunit bin/phpspec run
使用
该扩展包为您提供邮件服务,这使得您可以访问其他服务,因为它使用组合。它公开一个服务,因此您只需注入一个依赖项,最好是 MailingInterface,以保持解耦。
namespace Company\App; use Ahlin\Mailer\MailingInterface; class MyService { private $mailing; public function __construct(MailingInterface $mailing) { $this->mailing = $mailing; } public function doSomething() { // How to access factory to create mail instances $factory = $this->mailing->getFactory(); // How to access mailer to send or queue the mail $mailer = $this->mailing->getMailer(); } }
为了定义您的服务,您应该注入 ahlin_mailer.mailing 服务
<service id="my_bundle.my_service" class="Company\App\MyService"> <argument type="service" id="ahlin_mailer.mailing" /> </service>
模板
要覆盖扩展包中的任何内容,您当然可以使用扩展包继承,但为了简单起见,您也可以通过覆盖扩展包的一些默认参数来覆盖一些类。要覆盖模板,您可以在 app/Resources 中定义您自己的模板。
扩展包附带了一个默认的响应式 HTML 模板。
- Resources/views/Mail/default.html.twig
您可以通过在 app/Resources 文件夹中定义自己的模板或使用扩展包继承来轻松替换模板。
要定义您自己的模板,该扩展包使用“开放于扩展/关闭于修改”的坚实原则。要定义您自己的模板,您需要创建一个类并将其标记为 "ahlin_mailer.mapping"。比如说,您想要为您的 UserBundle 创建一个映射。
创建一个实现 TemplateMappingInterface 的类。
namespace Company\Bundle\UserBundle\Mapping; use Ahlin\Mailer\Mapping\TemplateMappingInterface; class UserMapping implements TemplateMappingInterface { public function getMappings() { return array( 'registration' => array('view' => 'CompanyUserBundle:Mail:registration.html.twig', 'contentType' => 'text/html'), 'activation' => array('view' => 'CompanyUserBundle:Mail:activation.html.twig', 'contentType' => 'text/html'), 'forgot_password' => array('view' => 'CompanyUserBundle:Mail:forgot_password.html.twig', 'contentType' => 'text/html'), ); } }
如您所见,它只是别名和它们路径之间的映射,因此当您需要指定要使用哪个模板时,您的代码将更加简短和干净。容器中的服务定义将如下所示
<service id="my_user_bundle.user_mapping" class="Company\Bundle\UserBundle\Mapping\UserMapping" public="false"> <tag name="ahlin_mailer.mapping" /> </service>
您可以通过覆盖参数来定义(覆盖)始终传递给电子邮件模板的参数
<parameter type="collection" key="ahlin_mailer.default.parameters"> <parameter key="myHomepageUrl" type="string">https://</parameter> </parameter>
在 twig 模板中,您可以通过 {{ myHomepageUrl }} 访问它。
有关此扩展包的任何问题或问题,请随时提问。您可以自由创建自己的分支版本或提交任何 pull 请求。
版本 2.2 允许您添加过滤器,这些过滤器可以修改电子邮件的主体。一些过滤器(如果它们可能将图像从 URL 转换为内联图像)还可以修改 Swift_Message 模型。您需要做的是实现 FilterInterface 并将过滤器标记为 "ahlin_mailer.filter"。
版本 2.2 允许您使用 Mailer 类发送 Swift_Message 实例。