yozaz/laravel-swiftmailer

Laravel 和 SwiftMailer 集成修复,用于队列守护进程工作

v4.0.3 2017-03-01 15:51 UTC

This package is not auto-updated.

Last update: 2024-09-25 14:46:42 UTC


README

Latest Stable Version Total Downloads License

已弃用...

此包已弃用,因为从 Laravel 5.0 及以上版本开始,原始 Mail 类在每次消息发送时会自动理论性地重新连接。请参阅此提交:[强制重新连接以修复守护进程队列的邮件发送] (https://github.com/laravel/framework/commit/af8eb1face000f82e5c85e6eb822075fc313cbb9)。

但是,看起来只是调用 transport 上的 stop 并不能进行完全重置,因此可能会引发错误 - 请参阅此处讨论:laravel/framework#4573 (评论)

尝试解决长期守护进程工作问题的包。仅供参考

兼容 Laravel 4 和 5 版本。

安装

首先通过 Composer 安装此包。编辑你的项目 composer.json 文件以要求 yozaz/laravel-swiftmailer

"require": {
	"yozaz/laravel-swiftmailer": "~4.0"
}

接下来,在终端中更新 Composer

composer update

此操作完成后,下一步是添加服务提供者。打开 app/config/app.php (或 config/app.php),并在 providers 数组中添加一个新项目。

'YOzaz\LaravelSwiftmailer\ServiceProvider',

最后一步是将 Laravel 的原生 Mailer Facade 替换为包中提供的。打开 app/config/app.php (或 config/app.php),并将 "Mail" 别名替换为

'Mail' => 'YOzaz\LaravelSwiftmailer\Facade',

这样就完成了!你可以开始使用了。

关于

此包以两种可能的错误安全模式工作:每次发送每封电子邮件后发送 STOP 命令,以及/或每次发送电子邮件前发送 RESET/STOP+START 命令。默认情况下,两种模式都激活了(所谓的“侵略”模式)。这种方法确保 SMTP 连接被关闭以避免超时和损坏的管道,或者在应用程序整个生命周期内保持活跃。这对于长期运行的应用程序非常重要。例如,当通过 Beanstalkd + Supervisor + Laravel Queue Daemon Worker 架构发送电子邮件时,Laravel 应用程序永远不会退出 - 因此 SMTP 连接保持活跃,并在一段时间后超时。自动停止、重置和/或重新启动 SMTP 连接通常可以解决这个问题。

注意。尽管自动重置功能很棒,但有时这并不是首选的行为。在使用此包之前,务必检查您的 SMTP 服务器配置。

用法

此包以这种方式构建,无需进行特殊操作。它基本上是一个包装器,因此所有 Mailer::send() 和类似函数都将正常工作。

自动重置

每当发送电子邮件时,包都会启动、停止或重置 SMTP 适配器。您可以通过特殊的辅助函数来操作此行为

// disable auto reset
Mailer::disableAutoReset();
// enable it back
Mailer::enableAutoReset();
// Set my status
Mailer::setAutoReset(true);
// check if auto-reset is enabled
if ( Mailer::autoResetEnabled() ) { ...

您可以使用原生常量作为标志在 STOP 或 RESET 行为之间切换

// send only STOP after every email
Mailer::setModeStop();
// send only RESET before every email
Mailer::setModeReset();
// aggressive mode - STOP and RESET (default)
Mailer::setModeBoth();

您可以显式停止或重置 SMTP 适配器。

Mailer::reset()->send(...);
Mailer::stop();

静默模式

默认情况下,失败的电子邮件将抛出 Exception。如果这不是预期行为 - 例如,因为您不需要重试发送它 - 您可以启用此模式。

Mailer::setSilent(true);

注意。即使电子邮件失败,在抛出 Exception 之前,包仍然会尝试发送 STOP 命令(如果启用了此模式)。

初始化

该包具有独立的IoC绑定。注意。出于兼容性目的,此包不会覆盖Laravel中用于'mailer'的IoC绑定。

var $mailer = App::make('laravel-swiftmailer.mailer');

如果您更倾向于使用Facades进行对象初始化,可以根据需要自行实例化Mailer类。默认情况下,包将尝试自动实例化所需对象。

var $mailer = new \YOzaz\LaravelSwiftmailer\Mailer();

可选地,如果您有针对Laravel Mailer的自定义包装器,或者想要操作自动重置功能,您可以在IoC绑定或类实例化时传递额外的参数。请查看类构造函数以获取详细信息。

var $my_custom_mailer = App::make('mailer');
// pass custom mailer and disable auto-reset
var $mailer = new \YOzaz\LaravelSwiftmailer\Mailer( $my_custom_mailer, false );

设置自定义邮件器实例

要设置自定义邮件器实例,请调用此方法

Mailer::setMailer( $my_custom_mailer );

致谢

所有致谢归功于xdecock,Swift Mailer(Swift Mailer)的作者,他为此包提供了现成的解决方案。

许可证

Laravel-SwiftMailer包是开源软件,根据MIT许可证授权。