avris / micrus-mailer
Micrus 框架的邮件发送模块
Requires
- avris/micrus: ^4.0
- avris/micrus-twig: ^4.0
- phpmailer/phpmailer: ^6.0
- symfony/lock: ^4.0
- tijsverkoyen/css-to-inline-styles: ^2.2
This package is auto-updated.
Last update: 2024-08-29 05:06:04 UTC
README
这是一个用于 Micrus 框架 的模块,允许您轻松发送电子邮件。
安装
运行
composer require avris/micrus-mailer
然后在您的 App\App:registerModules
中注册该模块
yield new \Avris\Micrus\Mailer\MailerModule;
最后,运行
bin/env
您将需要输入一个传输字符串,它将被保存到 .env
文件中,例如
null://
-- 不会发送任何实际电子邮件smtp://user:password@server.com
gmail://user:password@localhost
如果您使用 GMail,请记住 允许不安全应用 并 创建应用密码。
手动创建和发送电子邮件
$mail = new Mail();
$mail->addTo(new Address('email@example.com'));
$mail->addCc(new Address('max@mustermann.de'));
$mail->setSubject('Subject');
$mail->setBody('...');
$mail->setAltBody('...');
$mail->embedImage('logo', $this->getRootDir() . '/assets/images/logo.png');
$mail->embedImage('banner', $this->getRootDir() . '/assets/images/banner.png');
$mail->addAttachment($this->getRootDir() . '/assets/pdf/registration.pdf');
$mailer->send($mail);
邮件构建器
遵循一些简单的约定并使用 MailBuilder
服务,您可以大大简化创建电子邮件的过程。
假设您想创建一个名为 Welcome
的模板。
您首先应在翻译密钥 mail:Welcome.subject
中放置电子邮件主题。例如,在文件 translations/mail.en.yml
中创建如下结构
Welcome:
subject: Welcome to [[main.title]]
现在,电子邮件的内容应放在 Mail/Welcome.html.twig
模板中
<!DOCTYPE html>
<div class="mail-container">
<h1>
<a href="{{ app.request.absoluteBase }}" target="_blank">
<img src="cid:logo"/>
{{ 'main.title'|l }}
</a>
</h1>
<p>
Hello, {{ username }}!<br/>
Welcome to our site! Click <a href="{{ tokenUrl }}" target="_blank"> to confirm your account.
</p>
<p class="signature">
Best,<br>
Team of {{ 'main.title'|l }}
</p>
</div>
您也可以直接将模板放在 mail:Welcome.body
中。
类似地,对于备用正文:它将来自 Mail/Welcome.text.twig
模板或 mail:Welcome.altBody
翻译密钥。如果没有给出这些,它将来自 HTML 正文。
最后,您应该创建
final class WelcomeTemplate implements MailTemplateInterface
{
/** @var string */
private $projectDir;
public function __construct(string $envProjectDir)
{
$this->projectDir = $envProjectDir;
}
public function getName(): string
{
return 'Welcome'
}
public function extend(Mail $mail): Mail
{
$mail->embedImage('logo', $this->projectDir . '/assets/images/logo.png');
return $mail;
}
}
这个类允许您封装所有可能对电子邮件进行的附加操作,例如附加图像或预定义管理员 BCC。您可能希望将此类逻辑提取到某个 BaseTemplate
中。
现在在控制器中,您只需写下
public function sendMailAction(MailBuilder $mailBuilder, Mailer $mailer)
{
$mail = $mailBuilder->build(
$this->get(WelcomeTemplate::class),
$user->getLocale(),
[
'username' => $user->getUsername(),
'tokenUrl' => $token,
]
);
$mail->addTo($user); // $user needs to implement AddressInterface
$mailer->spool($mail);
return new Response($mail); // casting to string generates a preview of the email
}
请注意,您可以通过覆盖电子邮件的本地化,例如,向德语用户发送德语电子邮件,即使当前请求的本地化是英语。
如果您在公共目录中创建了一个 mail.css
文件,它将被用于自动将 CSS 内联到电子邮件的 HTML 中。您可以在 config/assets.yml
中的 mailCss
选项中更改此文件的名称。
发件人
邮件发送器使用低级发送服务(实现 Avris\Micrus\Mailer\Sender\SenderInterface
)来执行实际发送。到目前为止,仅支持 PHPMailer,但这个模块也可能与 SwiftMailer、纯 SMTP 连接、ExactTarget 适配器、Amazon SES 适配器等一起使用。
队列
由于发送电子邮件需要一段时间,因此通常最好在用户请求期间保存它,然后在后台执行发送,例如使用 cronjob。默认情况下,Mailer 将电子邮件排队在内存中,然后在请求终止时(在用户收到响应之后)发送。
您可以通过在 config/services.yml
中注册别名来将其更改为文件系统队列。
Avris\Micrus\Mailer\Spool\SpoolInterface: Avris\Micrus\Mailer\Spool\FilesystemSpool
然后,您可以通过设置每分钟运行一次的 cronjob 来发送队列
* * * * * /var/www/yourproject/current/bin/micrus mailer:spool:send
如果您想强制直接发送,只需执行 $mailer->send($mail)
而不是 $mailer->spool($mail)
。
日志邮件处理程序
此模块还提供 Monolog 处理程序,以便您的日志可以自动发送到管理员的电子邮件。
例如配置(仅在发生错误时发送日志),请查看 Micrus 示例项目(文件 config/_logger.yml
和 config/prod/_logger.yml
)。
配置
在 config/mailer.yml
文件中,您可以指定发送电子邮件的地址以及应该接收 MailerHandler
日志的管理员列表。
from: micrus@micrus.dev
fromName: Micrus App
logger:
subject: '[Micrus] An Error Occurred! %message%'
admins:
andre@avris.it: Andre
版权
- 作者: Andre Prusinowski (Avris.it)
- 许可证: MIT