我正在尝试排队我的laravel邮件。我正在使用redis将邮件排队。
当我发送电子邮件时,queue:listen
函数开始向laravel.log
这是我的可邮寄代码
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
谁能告诉我我做错了什么?
答案 0 :(得分:3)
不需要让事情变得复杂,让这样的课程如下:
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
已在您的模板'emails.blank'
上可用,变量为{{ 1}}。看看mailable
答案 1 :(得分:1)
$ from_email只能在您的构造函数中使用,您希望将其设置为类的属性,以便您可以访问其他地方
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]);
}
答案 2 :(得分:0)
你可以这样做。此外,您可以在视图中访问任何声明为公开的属性。
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]);
}