2017-05-19 1 views
-1

내 laravel 메일을 대기열에 넣으려고합니다. 나는 메일 대기열에 redis를 사용하고 있습니다. 내가 이메일을 보내고 적, 메일이 queue:listen 기능에 의해 통과하지 않은 경우Laravel Mailable Queuing not working

여기 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]); 
    } 

입니다 그리고 mailcontroller 코드는 여기

$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 

누구든지 내가 뭘 잘못하고 있다고 말할 수 있습니까?

답변

2

이 같은 클래스 만들기, 복잡한 일을 할 필요가 없습니다 : 그것 뿐이다

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]); 
} 

합니다.

참고 : 공용 변수 $this->content 이미 변수 $content와 템플릿 'emails.blank'에 사용할 수 있기 때문에 당신은 ->with(['content'=>$this->content])를 추가 할 필요가 없습니다. 지금은 $의 FROM_NAME을 얻고있다

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]); 
} 
+0

mailable을 보라, $의 FROM_EMAIL 및 $ 주제들을 오히려 보호보다 대중에게 공개 – mohit

+0

변화를 일 또는 게터와 세터 기능 – user618509

+0

를 작성해야합니다 나는 getter 및 setter 메소드를 표시하는 대답을 업데이 트했습니다 – user618509

0

당신은이 작업을 수행 할 수있는 당신이 다른 액세스 할 수 있도록 클래스의 속성으로 설정합니다. 또한 public으로 선언 된 모든 속성에 액세스 할 수 있습니다.

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]); 
}