Php Laravel可邮寄队列不工作
我正试着把我的laravel邮件排队。我正在使用redis对邮件进行排队 当我发送电子邮件时,邮件没有通过队列:侦听功能开始向laravel.log添加错误 这是我的邮件代码Php Laravel可邮寄队列不工作,php,email,laravel-5,Php,Email,Laravel 5,我正试着把我的laravel邮件排队。我正在使用redis对邮件进行排队 当我发送电子邮件时,邮件没有通过队列:侦听功能开始向laravel.log添加错误 这是我的邮件代码 use Queueable, SerializesModels; protected $bdy=array(); /** * Create a new message instance. * * @return void */ public function
use Queueable, SerializesModels;
protected $bdy=array();
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($bdy)
{
$this->content = $bdy;
$from_name=$this->content['from_name'];
$from_email=$this->content['from_email'];
$subject=$this->content['subject'];
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->from("$from_email")->subject("$subject")->view('emails.blank')->with(['content'=>$this->content]);
}
邮件控制器代码在这里
$content = str_replace("{name}", $lst->name, $content);
$bdy=[
'message'=>$content,
'from_email'=>$send_from_email,
'from_name'=>$send_from_name,
'subject'=>$subject
];
$today=date("Y-m-d H:i:s",strtotime(date("Y-m-d H:i:s")." +2 minutes"));
Mail::to($lst)->later($today,new MailRoom1($bdy));
我在laravel.log文件中遇到的错误是
Stack trace:
#0 /var/www/html/app/Mail/MailRoom1.php(34): Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(8, 'Undefined varia...', '/var/www/html/a...', 34, Array)
#1 [internal function]: App\Mail\MailRoom1->build()
#2 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(29): call_user_func_array(Array, Array)
#3 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(87): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#4 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(31): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure))
#5 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/Container.php(531): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL)
#6 /var/www/html/vendor/laravel/framework/src/Illuminate/Mail/Mailable.php(116): Illuminate\Container\Container->call(Array)
#7 /var/www/html/vendor/laravel/framework/src/Illuminate/Mail/SendQueuedMailable.php(52): Illuminate\Mail\Mailable->send(Object(Illuminate\Mail\Mailer))
#8 [internal function]: Illuminate\Mail\SendQueuedMailable->handle(Object(Illuminate\Mail\Mailer))
#9 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(29): call_user_func_array(Array, Array)
#10 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(87): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#11 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(31): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure))
#12 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/Container.php(531): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL)
#13 /var/www/html/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(94): Illuminate\Container\Container->call(Array)
#14 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(114): Illuminate\Bus\Dispatcher->Illuminate\Bus\{closure}(Object(Illuminate\Mail\SendQueuedMailable))
#15 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(102): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Mail\SendQueuedMailable))
#16 /var/www/html/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(98): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#17 /var/www/html/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(42): Illuminate\Bus\Dispatcher->dispatchNow(Object(Illuminate\Mail\SendQueuedMailable), false)
#18 /var/www/html/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(69): Illuminate\Queue\CallQueuedHandler->call(Object(Illuminate\Queue\Jobs\RedisJob), Array)
#19 /var/www/html/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(291): Illuminate\Queue\Jobs\Job->fire()
#20 /var/www/html/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(258): Illuminate\Queue\Worker->process('redis', Object(Illuminate\Queue\Jobs\RedisJob), Object(Illuminate\Queue\WorkerOptions))
#21 /var/www/html/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(110): Illuminate\Queue\Worker->runJob(Object(Illuminate\Queue\Jobs\RedisJob), 'redis', Object(Illuminate\Queue\WorkerOptions))
#22 /var/www/html/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(100): Illuminate\Queue\Worker->daemon('redis', 'default', Object(Illuminate\Queue\WorkerOptions))
#23 /var/www/html/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(83): Illuminate\Queue\Console\WorkCommand->runWorker('redis', 'default')
#24 [internal function]: Illuminate\Queue\Console\WorkCommand->fire()
#25 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(29): call_user_func_array(Array, Array)
#26 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(87): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#27 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(31): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure))
#28 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/Container.php(531): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL)
#29 /var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php(182): Illuminate\Container\Container->call(Array)
#30 /var/www/html/vendor/symfony/console/Command/Command.php(262): Illuminate\Console\Command->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle))
#31 /var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php(167): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle))
#32 /var/www/html/vendor/symfony/console/Application.php(826): Illuminate\Console\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#33 /var/www/html/vendor/symfony/console/Application.php(190): Symfony\Component\Console\Application->doRunCommand(Object(Illuminate\Queue\Console\WorkCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#34 /var/www/html/vendor/symfony/console/Application.php(121): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#35 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(123): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#36 /var/www/html/artisan(35): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#37 {main}
[2017-05-18 18:25:00] local.ERROR: ErrorException: Undefined variable: from_email in /var/www/html/app/Mail/MailRoom1.php:34
有人能告诉我我做错了什么吗?$from\u电子邮件将仅在您的构造函数中可用,您希望将其设置为类的属性,以便您可以在其他位置访问它
protected $from_name;
protected $from_email;
protected $subject;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($bdy)
{
$this->content = $bdy;
$this->from_name=$this->content['from_name'];
$this->from_email=$this->content['from_email'];
$this->subject=$this->content['subject'];
}
public function getFromEmail()
{
return $this->from_email;
}
public function getFromName()
{
return $this->from_name;
}
public function getSubject()
{
return $this->subject;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->from($this->getFromEmail())->subject($this->getSubject())->view('emails.blank')->with(['content'=>$this->content]);
}
你可以这样做。也可以在视图中访问任何声明为公共的属性
public $content = array();
public $from = array();
public $subject;
function __construct($body)
{
$this->content = $body['message'];
$this->from = [
'address' => $body['from_email'],
'name' => $body['from_name']
];
$this->subject = $body['subject'];
}
public function build()
{
return $this->from($this->from)
->subject($this->subject)
->view('emails.blank')
->with(['content' => $this->content]);
}
不需要把事情复杂化,让课堂变成这样:
public $content;
public function __construct( $bdy ) {
$this->content = $bdy;
}
public function build() {
return $this->from($this->content['from_email'])
->subject($this->content['subject'])
->view('emails.blank')
->with(['content'=>$this->content]);
}
就这样
注意:您不需要添加->with['content'=>$this->content],因为您的公共变量$this->content已经可以在带有变量$content的模板'emails.blank'中使用。看看现在我从\u name、\u email和$subject获得$subject必须是public将它们更改为public而不是protected或创建getter和setter函数我已经更新了答案以显示getter和setter方法