Php Laravel-在运行时停止发送电子邮件
在我的Laravel 7.5应用程序中,每当创建记录时(通过模型事件触发),我都会发送一封电子邮件。在生产过程中使用Php Laravel-在运行时停止发送电子邮件,php,laravel,email,Php,Laravel,Email,在我的Laravel 7.5应用程序中,每当创建记录时(通过模型事件触发),我都会发送一封电子邮件。在生产过程中使用邮枪驱动程序发送电子邮件 但是,有一个导入功能,当使用导入时,我不想发送数千封电子邮件。为了执行当前请求/脚本,在运行时暂停或禁用Laravel电子邮件的最佳方式是什么 我试过一些东西 将邮件驱动程序设置为log或array 在本地/dev(使用smtp驱动程序)上运行良好,但在生产环境中它并没有停止电子邮件 监听MessageSending事件并返回false以阻止电子邮件
邮枪驱动程序发送电子邮件
但是,有一个导入功能,当使用导入时,我不想发送数千封电子邮件。为了执行当前请求/脚本,在运行时暂停或禁用Laravel电子邮件的最佳方式是什么
我试过一些东西
- 将邮件驱动程序设置为
log
或array
在本地/dev(使用smtp驱动程序)上运行良好,但在生产环境中它并没有停止电子邮件
- 监听
MessageSending
事件并返回false
以阻止电子邮件。同样,使用smtp
驱动程序在本地运行良好,但使用mailgun
驱动程序在生产中没有停止电子邮件
目前,我调用Mail::fake()
以将邮件外观与fake进行交换。似乎工作正常,但感觉非常粗糙,可能无法处理不同的驱动程序和/或排队消息
是否有更好、更干净的方法暂时和全局暂停电子邮件发送?我不想停止发送事件,因为它们除了处理电子邮件外还进行其他处理
谢谢 我还没有测试过这个想法,但是您可以尝试在导入逻辑之前将变量闪存到会话中,例如:
session()->flash('import_disable_email',true);
// import logic here
在模型事件处理中,检查会话密钥是否存在,如下所示:
if(!session('import_disable_email')){ // or !== null
// send email logic here
}
当然,如果要在保存逻辑后保持会话变量干净,可以使用以下命令删除该条目:
// import logic here
session()->forget('import_disable_email');
我还没有测试过这个想法,但您可以尝试在导入逻辑之前将变量闪存到会话中,例如:
session()->flash('import_disable_email',true);
// import logic here
在模型事件处理中,检查会话密钥是否存在,如下所示:
if(!session('import_disable_email')){ // or !== null
// send email logic here
}
当然,如果要在保存逻辑后保持会话变量干净,可以使用以下命令删除该条目:
// import logic here
session()->forget('import_disable_email');
通过Eloquent发布批量更新或删除时,受影响的模型将不会触发保存的
、更新的
、删除的
、和删除的
模型事件
来源:通过Eloquent发布大规模更新或删除时,受影响的模型将不会触发保存的
、更新的
、删除的
和删除的
模型事件
来源:可能配置缓存在服务器上?可能配置缓存在服务器上?是的,我考虑过(一个会话或只是单个脚本的一个标志),但我正在寻找(如果可能的话)一个更干净的解决方案,我不必手动编辑每个侦听器:/hm。。我唯一能想到的另一件事是通过调用config(['mail.to'=>$arrWithAddressAndName])
设置一个新的解决方案,虽然我也不会说这是一个干净的解决方案,因为电子邮件仍然会触发。我考虑过这一点(一个会话或只是单个脚本的一个标志),但我正在寻找(如果可能的话)对于一个更干净的解决方案,我不必手动编辑每个人,甚至是侦听器:/Hmm。。我唯一能想到的另一件事是通过调用config(['mail.to'=>$arrWithAddressAndName])
来设置a,尽管如此,我也不会说这是一个干净的解决方案,因为电子邮件仍然触发正确,我一个接一个地创建模型,我确实需要保存的
和其他触发的事件,因为它们执行导入所需的其他操作。但是,正确的是,我一个接一个地创建模型,我确实需要保存的
和其他触发的事件,因为它们执行导入所需的其他操作。