tomazahlin/symfony-mailer-bundle

Mailer 扩展包为 Symfony2 框架提供了一种邮件发送器(邮件代理)的实现(Swiftmailer 包装器)。它允许您以一种非常优雅的方式发送邮件,并提供了一些扩展点,以便进行所需的修改。

安装次数: 17,403

依赖项: 0

建议者: 0

安全性: 0

星级: 4

关注者: 2

分支: 2

公开问题: 0

类型:symfony-bundle

2.3 2018-05-22 09:01 UTC

This package is not auto-updated.

Last update: 2024-09-28 17:43:44 UTC


README

Build Status

SensioLabsInsight

这是对扩展包结构说明,也是安装/示例教程。

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 实例。