netglue / mail-template-module
ZF2模块,用于生成和发送HTML电子邮件模板
Requires
- php: >=5.5
- zendframework/zend-mvc: 2.6.3
- zendframework/zendframework: ~2.5
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);