yozaz / laravel-swiftmailer
Laravel 和 SwiftMailer 集成修复,用于队列守护进程工作
Requires
- php: >=5.4.0
- illuminate/support: >=4.2
README
已弃用...
此包已弃用,因为从 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许可证授权。