2017-02-03 1 views
1

Ich erstelle eine Anwendung, die eine Geburtstagserinnerungs-E-Mail an Benutzer senden soll. Mit laravel 5.2 funktionierte alles gut, aber jetzt möchte ich Mailables verwenden, ich weiß nicht, wo ich die Benutzer loopen kann. Hier ist meine verschickbare Klasse ..Laravel Sende Geburtstagserinnerung E-Mail Mit Mailables

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

    } 
} 

Hier ist mir Befehl Geburtstag senden

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!'); 

    } 
} 

Und hier ist meine Ansicht

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

Mein 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'); 
    } 
} 

Ich möchte in der Datenbank einchecken, wenn dort ist jeder Benutzer mit Geburtstag, dann senden Sie die E-Mail an einen oder mehrere Benutzer. Wenn keine, dann tu nichts.

Antwort

2

in Ihrem Befehl Datei

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

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

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

} 

In Ihrer verschickbare Klasse

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

In Blade-Datei (birthday.blade.php)

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

Hope this helfen :)

+0

Vielen Dank für Ihre Hilfe. Alles scheint gut zu funktionieren, bis ich zu meiner Google Mail gehe und ich keine E-Mail bekomme. Der Cron-Job gibt diesen laufenden Befehl aus: '/ opt/php70/bin/php' 'artisan' email: geburtstag> '/ dev/null' 2> & 1 &. Irgendwie wird der Befehl ausgeführt, ohne eine E-Mail zu senden. – bobin56

+0

Haben Sie einen Benutzer? Sie können 'Log :: info ($ user);' innerhalb der Methode loop in handle ausführen und die Datei laravel.log überprüfen. Ich denke, es gibt keinen Benutzer, sonst sollte es senden. – Vikash

+0

Führen Sie 'php artisan email: birthday' aus Ihrem Stammverzeichnis des Projekts aus und prüfen Sie, was im Protokoll gedruckt wird und checken Sie die Eingabeaufforderung ein, was als Info-Nachricht kommen soll. ?. Bitte sagen Sie mir – Vikash