maba/mail-renderer-bundle

Symfony 扩展包,简化电子邮件发送

1.1.1 2015-12-30 21:06 UTC

This package is auto-updated.

Last update: 2024-09-10 19:59:17 UTC


README

Symfony 扩展包,将一些库集合起来,简化电子邮件发送过程

  1. 将 twig 模板渲染为获取电子邮件的主题和内容
  2. 如果模板中不可用,则将 HTML 内容转换为纯文本
  3. 设置默认的“发件人”电子邮件和名称
  4. 如果配置了 Assetic,则获取邮件消息的 CSS
  5. 在 HTML 的 style 属性内联 CSS,或添加 <styles> 标签
  6. 使用 swift mailer 发送消息

安装

通过 composer 添加

composer require maba/mail-renderer-bundle jimbojsb/emogrify:@dev

注册扩展包

new Maba\Bundle\MailRendererBundle\MabaMailRendererBundle(),

config.yml 中配置

maba_mail_renderer:
    css_assets:
        inline: mail
        imports: mail_imports
    from:
        email: info@example.com
        name: My Awesome Company
        
assetic:
    assets:
        mail:
            inputs:
                - @bootstrap_css
                - @ApplicationBundle/Resources/less/styles.less
        mail_imports:
            inputs:
                - %kernel.root_dir%/Resources/public/css/mail-imports.css

css_assets 节点为可选,同样 Assetic 的使用也是可选的。

使用方法

代码

/** @var FormattedMessageMailer $mailer */
$mailer = $this->get('maba_mail_renderer.formatted_message_mailer');

$mailer->sendMessage('customer@example.com', 'ApplicationBundle:Email:welcome.html.twig', array(
    'username' => 'customer123',
    'activationLink' => 'http://www.example.com/activate/ABC123',
));

Twig 模板

{# ApplicationBundle:Email:welcome.html.twig #}

{% block subject %}Hello {{ username }}, welcome to example.com!{% endblock %}

{% block body_html %}
    <div class="header">Hello {{ username }},</div>
    
    <div class="content">
        You've registered on example.com. Here you can make lots of stuff:
        <ul>
            <li>Stuff</li>
            <li>More stuff</li>
        </ul>
    </div>
    
    <div class="important">
        To activate your account <a class="btn btn-primary" href="{{ activationLink }}">click here</a>
    </div>
    
    <div class="footer">See ya!</div>
{% endblock %}

就是这样!

所有分配给类的 CSS 规则将内联到 HTML 中的 style 属性中。

扩展使用

模板

只解析模板中的这些块:subjectbody_htmlbody_text。其中 subject 和至少其中一个其他是必需的。模板中的任何其他块或内容都将被忽略。

如果提供了 body_text,则它将用作邮件消息的纯文本版本。

此外,toEmail 变量也传递给 twig 模板,它等于指定的收件人。

建议如果您的邮件中有定义的结构,使用单个布局 twig 文件。例如

{# :Email:layout.html.twig #}

{% block body_html %}
    <div class="header">Good afternoon,</div>
    
    {% block content %}{% endblock %}
    
    <div class="footer">See ya!</div>
    
    <a href="{{ get_unsubscribe_link(toEmail) }}">Unsubscribe</a>
{% endblock %}
{# ApplicationBundle:Email:welcome.html.twig #}
{% extends ':Email:layout.html.twig' %}

{% block subject %}...{% endblock %}
{% block content %}
    ...
{% endblock %}

样式

inlineimports 配置节点中的值采用 Assetic 资产名称,您应该使用 Assetic 配置来配置这些。

inline 用于将 CSS 规则应用于消息 HTML 结果 - 向 HTML 节点添加 style 属性,这将触发相应的 CSS 规则。这是必要的,因为一些电子邮件阅读器既不支持 <styles> 也不支持 <link>(例如 GMail)。

imports 用于在邮件消息本身中创建带有 CSS 内容的 <styles> 标签。这应该尽可能简短 - 通常仅用于无法内联的规则,如下所示

@import url("//fonts.googleapis.com/css?family=Ubuntu:400,400italic,700,700italic&subset=latin,latin-ext");

这就是为什么它在配置中被称为 imports 的原因。

为什么使用 <styles> 而不是 <link>?为了避免加载远程资源,这也是默认情况下最常禁用的。

更改创建的消息

在渲染器中使用与 sendMessage 相同参数的 createMessage,更改或添加任何所需的字段,然后手动使用 swift mailer 发送。