2017-02-03 8 views
1

Я создаю приложение, которое предположительно отправит пользователям напоминание о напоминании о день рождения. Все отлично работало с laravel 5.2, но теперь я хочу использовать Mailables, я не знаю, где цитировать пользователей. Вот мой класс .. разрешенный к пересылке по почтеLaravel Отправить письмо с напоминанием о возврате почты Использование почтовых сообщений

namespace App\Mail; 
use App\User; 
use Illuminate\Bus\Queueable; 
use Illuminate\Mail\Mailable; 
use Illuminate\Queue\SerializesModels; 
use Illuminate\Contracts\Queue\ShouldQueue; 
class BirthdayReminder extends Mailable 
{ 
    use Queueable, SerializesModels; 
    public $user; 
    public function __construct() 
    { 
     $this->User = $user; 
    } 
    public function build() 
    { 
     $users = User::whereMonth('dob', '=', date('m'))->whereDay('dob', '=', date('d'))->get(); 
     foreach($users as $user) {  
      return $this->from('[email protected]') 
     ->view('emails.birthday') 
     ->with(['user' => $user]); 
    } 

    } 
} 

Вот моя команда послать рождения

namespace App\Console\Commands; 

use Illuminate\Console\Command; 
use App\User; 
use App\Mail\BirthdayReminder; 
use Mail; 
use App; 
class SendBirthdayReminderEmail extends Command 
{ 
    /** 
    * The name and signature of the console command. 
    * 
    * @var string 
    */ 
    protected $signature = 'email:birthday'; 

    /** 
    * The console command description. 
    * 
    * @var string 
    */ 
    protected $description = 'Email users a birthday Reminder message'; 

    /** 
    * Create a new command instance. 
    * 
    * @return void 
    */ 
    public function __construct() 
    { 
     parent::__construct(); 
    } 

    /** 
    * Execute the console command. 
    * 
    * @return mixed 
    */ 
    public function handle() 
    { 

    /* $users = User::whereMonth('dob', '=', date('m'))->whereDay('dob', '=', date('d'))->get(); 
    foreach($users as $user) { 
     // send an email to "[email protected]" 
     Mail::to('[email protected]')->queue(new BirthdayReminder($user)); 


    } 
    */ 
    $email="[email protected]"; 
    Mail::to($email)->send(new BirthdayReminder()); 

    $this->info('Birthday messages sent successfully!'); 

    } 
} 

А вот мой взгляд

<p>Hello Admin,</p> 
<p>Today is {{$user['first_name']}} Birthday . Please take time and wish a happy birthday!</p> 

Мои Kernel.php

namespace App\Console; 

use Illuminate\Console\Scheduling\Schedule; 
use Illuminate\Foundation\Console\Kernel as ConsoleKernel; 

class Kernel extends ConsoleKernel 
{ 
    /** 
    * The Artisan commands provided by your application. 
    * 
    * @var array 
    */ 
    protected $commands = [ 
     // 

     Commands\SendBirthdayReminderEmail::class, 

    ]; 

    /** 
    * Define the application's command schedule. 
    * 
    * @param \Illuminate\Console\Scheduling\Schedule $schedule 
    * @return void 
    */ 
    protected function schedule(Schedule $schedule) 
    { 
     // $schedule->command('inspire') 
     //   ->hourly(); 
     $schedule->command('email:birthday')->everyMinute()->timezone('Africa/Dar_es_Salaam'); 
    } 

    /** 
    * Register the Closure based commands for the application. 
    * 
    * @return void 
    */ 
    protected function commands() 
    { 
     require base_path('routes/console.php'); 
    } 
} 

Я хочу проверить базу данных, если это любой пользователь с днем ​​рождения, затем отправьте электронное письмо одному или нескольким пользователям. Если нет, то ничего не делайте.

ответ

2

В вашем командного файле

public function handle() 
{ 
    $i = 0 
    $users = User::whereMonth('dob', '=', date('m'))->whereDay('dob', '=', date('d'))->get(); 

    foreach($users as $user) 
    { 
     $email="[email protected]"; 
     Mail::to($email)->send(new BirthdayReminder($user)); 
     $i++; 
    } 
} 

$this->info($i.' Birthday messages sent successfully!'); 

} 

В вашем классе

разрешенного к пересылке по почте
public $user; 
public function __construct($user) 
{ 
    $this->user = $user; 
} 

public function build() 
{ 
    $user = $this->user; 
    return $this->from('[email protected]') 
       ->view('emails.birthday',compact('user')); 
} 

В файле лопастного (birthday.blade.php)

<p>Hello Admin,</p> 
<p>Today is {{ $user->first_name }} Birthday . Please take time and 
wish a happy birthday!</p> 

Надеется, что это поможет :)

+0

Большое спасибо за помощь. Кажется, все работает нормально, пока я не перейду на мой gmail, и у меня нет электронной почты. Задача Cron возвращает эту текущую запланированную команду: '/ opt/php70/bin/php' 'artisan' email: birthday> '/ dev/null' 2> & 1 &. Итак, так или иначе, команда выполняется без отправки какого-либо письма. – bobin56

+0

Вы проверили, есть ли у вас пользователь. вы можете сделать «Log :: info ($ user);» внутри цикла в методе дескриптора и проверить файл laravel.log. Я думаю, что нет другого пользователя, которого он должен отправить. – Vikash

+0

Просто запустите 'php artisan email: birthday' из вашей корневой директории проекта и проверьте, что печатает в журнале и проверяет в командной строке, что входит в качестве информационного сообщения. ?. пожалуйста, скажите мне – Vikash