沙尘暴 / 模板邮件发送器
Neos 和 Flow 包,用于简单处理基于模板的电子邮件,包括CSS内联
Requires
- neos/flow: ^7.3 || ^8.0 || dev-main
- neos/swiftmailer: ^7.0
- pelago/emogrifier: ^6.0 || ^7.0
README
功能
此包在 Neos CMS 和 Flow 中工作,并提供以下功能
- 简单创建和发送基于 Fluid 模板的电子邮件
- 自动将 CSS 内联到电子邮件正文中,使其在像 Gmail 这样的客户端中看起来更好
兼容性和维护
Sandstorm.TemplateMailer 目前正在维护以下版本
配置和使用
配置 SwiftMailer
模板邮件发送器包需要 SwiftMailer 来发送电子邮件。请检查 swiftmailer 包的配置选项(https://github.com/neos/swiftmailer)以配置 SMTP 凭据。
配置包
此包提供了 2 个配置选项。
配置全局发送者地址
通过向 senderAddresses
配置数组添加条目,您可以在配置中定义发送者地址并将它们连接到字符串标识符。这允许轻松维护电子邮件发送者地址和名称的全局维护。覆盖“默认”条目以仅有一个全局发送者地址,它在任何地方自动使用而无需您做任何事情。
Sandstorm: TemplateMailer: senderAddresses: yourGlobalSender: name: 'Foo Bar' address: 'baz@example.com'
配置全局回复地址
通过向 replyToAddresses
配置数组添加条目,您可以在配置中定义回复地址并将它们连接到字符串标识符。这允许轻松维护电子邮件回复地址和名称的全局维护。默认情况下,不使用回复地址。要设置邮件上的回复地址,您需要指定回复地址键作为 sendTemplateEmail
方法的参数。
Sandstorm: TemplateMailer: replyToAddresses: yourGlobalReplyTo: name: 'Foo Bar' address: 'baz@example.com'
配置模板源包
您需要告诉模板邮件发送器在哪些包中查找电子邮件模板。通过向 templatePackages
数组添加条目来完成此操作
Sandstorm: TemplateMailer: templatePackages: 10: 'Your.Package'
如果您有多个包含电子邮件模板的包,请按您希望模板邮件发送器按顺序搜索它们的顺序将它们全部添加。键的数字较低表示该包将更早检查。如果在包中找到具有给定名称的模板,则将其使用。这样,您就可以创建一个覆盖层次结构。
默认模板变量
您可以将配置设置作为默认模板变量暴露给所有电子邮件模板。我们默认使用此方法暴露基本 Uri,但您可以将任意设置路径传递到这里,并将解析它们。
Sandstorm: TemplateMailer: defaultTemplateVariables: baseUri: 'Neos.Flow.http.baseUri'
记录错误和已发送的邮件
您可以通过 logging
中的两个参数控制模板邮件发送器如何处理错误以及成功发送的邮件。通过“sendingErrors”配置选项,您可以指定如果邮件无法正确发送时模板邮件发送器应做什么。有三个选项
- 'throw' -> 如果发送失败,则抛出 SwiftMailer 抛出的异常
- 'log' -> 如果发送失败,则将消息记录到系统日志
- 'none' -> 静默吞咽错误,不记录或抛出它们
对于 "sendingSuccess",您只能选择 'log' 或 'none'。'log' 将为所有发送的邮件插入日志条目。由于这可能会在您的日志文件中创建大量条目,因此仅将其用于调试/监控目的。
Sandstorm: TemplateMailer: logging: sendingErrors: 'log' sendingSuccess: 'log'
使用包
在您的包的 Resources/Private
文件夹中创建一个“EmailTemplates”文件夹。在它里面,创建您想要的任何数量的电子邮件模板。
重要:您 必须 为每个基于模板的邮件创建一个同名的 .txt 和 .html 文件。
您可以在Fluid中使用部分和布局,就像平时一样。如果这样做,请将它们分别放入Resources/Private/EmailTemplates/Partials
或Resources/Private/EmailTemplates/Layouts
。
基本用法
没有变量的非常基本用法如下。您的模板不能包含任何变量(因为您没有传入任何),TemplateMailer将使用“默认”发件人地址,您应该事先进行配置。
$this->emailService->sendTemplateEmail( 'YourTemplateFileName', 'An arbitrary email title', ['recipient@example.com'] );
全局配置的自定义发件人地址
您还可以使用不同的配置好的发件人地址以及向模板传递变量。您需要在之前配置发件人电子邮件'mysender'。
$this->emailService->sendTemplateEmail( 'YourTemplateFileName', 'An arbitrary email title', ['recipient@example.com'], [ 'var1' => 'Foo', 'var2' => 5 ], 'mysender' );
动态发件人地址
如果您将数组传递给sendTemplateEmail()
方法,我们将直接将其传递给SwiftMailer,这样您就可以使用之前未配置的发件人电子邮件地址。
$this->emailService->sendTemplateEmail( 'YourTemplateFileName', 'An arbitrary email title', ['recipient@example.com'], [ 'var1' => 'Foo', 'var2' => 5 ], ['sender@example.com' => 'Your Service Name'] );
抄送(Cc)、密送(Bcc)和附件
您还可以设置cc、bcc和附件。以下是一个完整示例
$this->emailService->sendTemplateEmail( 'YourTemplateFileName', 'An arbitrary email title', ['recipient@example.com'], [ 'var1' => 'Foo', 'var2' => 5 ], 'mysender', ['cc@example.com', 'cc2@example.com'], ['bcc@example.com'], [ [ 'data' => file_get_contents('some/example/file'), 'filename' => 'YourFileNAme.pdf', 'contentType' => 'application/pdf' ] ] );