netglue/mail-template-module

此包已被废弃,不再维护。未建议替换包。

ZF2模块,用于生成和发送HTML电子邮件模板

安装: 157

依赖项: 0

建议者: 0

安全: 0

类型:模块

0.1.0 2016-03-17 23:16 UTC

This package is not auto-updated.

Last update: 2020-03-30 12:46:59 UTC


README

此模块旨在通过使用ZF2视图层来简化基于模板的事务性电子邮件的发送。

安装

使用composer安装netglue/mail-template-module,并使用名称'NetglueMail'将模块添加到项目中。

配置

模块可以提供一些合理的默认设置,这样您就不必为每条邮件消息设置全局发送者,它还需要访问一个标准的Zend\Mail\Transport\TransportInterface实例。这应该配置为服务名称,因此您可能需要创建一个工厂来返回您的传输,或者如果您想使用SES、SendGrid、MailGun等发送,可以使用SlmMail

设置视图管理器

确保您知道并设置了您想要发送邮件的模板。您可以使用布局,全局或按消息设置,并为文本和HTML使用不同的布局。

'view_manager' => [
    'template_map' => [
        'email/layout/html'   => __DIR__ . '/path/to/html-layout.phtml',
        'email/layout/plain'  => __DIR__ . '/path/to/plain-layout.phtml',
        'email/contact/plain' => __DIR__ . '/path/to/plain.txt',
        'email/contact/html'  => __DIR__ . '/path/to/html.html',
    ],
]

配置默认值

可用的默认值包括

'netglue_mail' => [
    
    'defaultSender'     => 'email@somewhere.com',
    'defaultSenderName' => 'Fred Bloggs',
    
    /**
     * Names of default layouts to apply to all messages
     */
    'defaultLayout' => 'some-html-layout',
    'textLayout'    => 'some-plaintext-layout',
    
    /**
     * Service Name of the transport to use to send generated messages
     * If unpecified, messages are sent using \Zend\Mail\Transport\InMemory
     */
    'transport' => null,
    
    /**
     * Associative array of message headers to apply to all messages
     */
    'defaultHeaders' => [
        'X-Mailer' => 'Netglue Mail Template Module',
    ],
];

配置命名消息类型

消息是一个关联数组,键为“消息类型”的名称。大多数消息选项可以直接关联到\Zend\Mail\Message中可用的方法,因此选项'to'对应于setTo()

'netglue_mail' => [
    'messages' => [
        'registrationConfirmation' => [
            'subject'       => 'Please confirm your email address',
            'template'      => 'some-view-script',
            'textTemplate'  => 'some-other-view-script',
            'layout'        => 'override-default-html-layout',
            'textLayout'    => 'override-default-text-layout',
            'from'          => ['sender@example.com' => 'My Real Name'],
            'replyTo'       => ['replieshere@example.com' => 'Alice'],
            'headers'       => ['X-MyHeaderName' => 'Some Value'],
        ],
    ],
];

发送消息

当是时候发送配置的消息时,您需要使用Zend的服务定位器将NetglueMail\Dispatcher注入到控制器或服务中,然后在分发器上简单地调用send()方法。

$view = [
    'someVariable'  => 'Foo',
    'otherVariable' => 'Bar',
];
$messageOptions = [
    'to'      => ['recipient@example.com' => 'Fred'],
    'subject' => 'Override Default Configured Subject',
];
$dispatcher->send('registrationConfirmation', $messageOptions, $view);

发送前操纵消息

您可以通过使用分发器的createMessage()方法进一步操纵在发送之前的消息,并最终使用sendMessage()发送它。

$message = $dispatcher->createMessage('registrationConfirmation', $messageOptions, $view);
$message->getHeaders()->addHeader(new \Zend\Mail\Header\GenericHeader('X-Foo', 'Bar'));

$dispatcher->sendMessage($message);

触发事件

事件在通过传输发送消息前后触发。您可以通过共享事件管理器订阅它们。

$sharedManager->attach('NetglueMail\Dispatcher', 'sendMessage', function($event) {
    $params = $event->getParams();
    var_dump('A message is about to be sent with the name: '.$params['messageName']);
});

$sharedManager->attach('NetglueMail\Dispatcher', 'sendMessage.post', function($event) {
    $params = $event->getParams();
    var_dump('A message was just sent with the name: '.$params['messageName']);
});

消息对象(Zend\Mail\Message)在事件参数数组中可用,键为'message',消息名称为'messageName'。

控制器插件

有一个名为dispatchEmail的控制器插件可用,它具有与NetglueMail\Dispatcher::send()相同的签名,即$this->dispatchEmail('myMessage', $options, $viewVars);