我目前正在尝试使用Laravel 5.4中的队列发送邮件,以加快一些请求。但出于某种原因,我只是不会解决。
我的工作如下:
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Support\Facades\Mail;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
class NotificationEmail implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $doer, $does, $user;
/**
* Create a new job instance.
*
* @param Podcast $podcast
* @return void
*/
public function __construct($doer, $does, $user)
{
$this->doer = $doer;
$this->does = $does;
$this->user = $user;
}
/**
* Execute the job.
*
* @param AudioProcessor $processor
* @return void
*/
public function handle()
{
$actions = [
'accepted.invite' => 'accepted your invited.',
'accepted.requesting' => 'accepted your request.',
'denied.invite' => 'denied your invite.',
'denied.requesting' => 'denied your request'
];
Mail::send('emails.notification', [
'doer' => $this->does,
'action' => $actions[$this->action]
], function ($m) {
$m->from('noreply@bigriss.com', 'Bigriss');
$m->to("myemail@gmail.com", 'Shawn')->subject('New Notification');
echo "SENT";
});
}
}
通过以下方式在另一个班级发送:
NotificationEmail::dispatch($doer, $does, $user);
收听队列php artisan queue:listen
后,一旦我分派作业,听众就会无休止地试图解决句柄功能。我收到了消息&#34; SENT&#34;但是电子邮件永远不会被发送(正如我在电子邮件提供商处看到的那样)并且队列实际上从未被删除,尝试计数只会无限期地上升。我在这里错过了什么吗?这不是队列的好处吗?
答案 0 :(得分:0)
您正在将字符串传递到minus
函数中,并且您在关闭时缺少变量。
如果您有匿名函数,则需要使用and not
传入任何额外的变量。我在handle方法的任何地方都没有看到to
变量。它需要作为单独的变量传递,因为你不能使用use
将它传递给闭包。
现在你有
$user
字面意思是将其解释为一个字符串,表示 $ user-&gt;电子邮件,因为你没有传递任何内容。(旁注:这里真的没有理由使用它,除此之外对于带有文件路径等的内联变量。您不需要带有此字符串的内联变量。)
您需要将其更改为
$this->user
您可能需要考虑使用Laravel Dusk之类的内容来调试您的队列,logging以便更好地控制这一点,而不是只是在浏览器中查看“SENT”。
此外,考虑清理您的网站地址,因为您要从中发布源代码。