注: この記事では主に Laravel の Artisan コマンド、タスク スケジューラ、およびメール関連の知識を学習します。メールを定期的に送信するための簡単な小さなデモを作成します。 。プロセス全体が完了するまでにかかる時間はわずか 1 時間です。同時に、作成者は開発プロセス中にいくつかのスクリーンショットとコードを貼り付けて、読み取り効率を向上させます。筆者の開発環境はネイティブMAMP統合ソフト、PHP7.0、Laravel5.2.*です。
Laravelのアーティザンコマンドの内容についてはサービス - アーティザンコンソールを、メールメールサービスの内容についてはサービス - メールを、タスクスケジューラのタスクタイマーについてはを参照してください。サービス - タスクのスケジュールを参照してください。
新しい Artisan コマンドを作成します:
php artisan make:console SendEmails --command=emails:send
AppConsoleCommandsSendEmails.php ファイルにコードを追加します:
class SendEmails extends Command{ /** * The name and signature of the console command. * * @var string */ protected $signature = 'emails:send'; /** * The console command description. * * @var string */ protected $description = 'This is a demo about sending emails to myself'; /** * Create a new command instance. * * @return void */ public function __construct() { parent::__construct(); } /** * Execute the console command. * * @return mixed */ public function handle() { $this->info('I am handsome'); $this->error('I am not ugly'); }}
Write $ description メソッドと handle() メソッドでは、$description 変数を使用してコマンドの説明を表示し、handle() を使用してコマンドを処理し、コマンドを AppConsoleCommandsKernel.php に登録します。
protected $commands = [ // Commands\Inspire::class, Commands\SendEmails::class, ];
それでは、ターミナルに php 職人と入力して、コマンドを表示して実行できます。
メール サービス API ドライバーは、guzzlehttp/guzzle パッケージをインストールする必要がありますこれはプロジェクトのルート ディレクトリにあります:
composer require guzzlehttp/guzzle
次に、.env ファイルで電子メール ドライバーとユーザー名とパスワードを構成します:
次に、ハンドルを変更します( ) メソッド:
/** * Execute the console command. * * @return mixed */ public function handle() {// $this->info('I am handsome');// $this->error('I am not ugly'); $user = [ 'email' => 'XXX@XXX.com',//一个有效的邮箱接收地址 'name' => 'liuxiang', ]; $status = Mail::send('emails.send', ['user'=>$user], function($msg) use ($user){ $msg->from('XXX@XXX.com', 'liuxiang email');//一个有效的邮箱发送地址 $msg->to($user['email'], $user['name'])->subject('This is a demo about sending emails to myself'); }); if(!$status){ $this->error('Fail to send email');exit; } $this->info('Success to send email');exit; }
Send コンテンツはビュー email.send にあります。 新しい resource/views/emails/send.blade.php ファイルを作成します:
<html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! --> <title>Bootstrap Template</title> <style> html,body{ width: 100%; height: 100%; } *{ margin: 0; border: 0; } .content{ text-align: center; margin: 50px; } </style> </head> <body> <div class="container"> <div class="row"> <div class="col-xs-12 col-md-12"> <p class="content">This is a email by Laravel Artisan Command</p> </div> </div> </div> <script> </script> </body></html>
すべての準備が整いました。プロジェクトのルート ディレクトリで電子メール送信コマンドを実行すると、正常に送信され印刷された電子メールが表示されます。
その後、受信メールボックスが電子メールを受信します。
動作しています!!!
結局のところ、毎回手動でメールを送信するのは面白くありません。システムのタイマー crontab を使用できます。 Laravel にはタスクタイマーがあり、それを使って遊ぶことができます。 app/Console/Kernel.php ファイルを変更します:
/** * 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('emails:send')->everyFiveMinutes(); $schedule->command('emails:send')->everyMinutes(); }
ターミナルに crontab -e と入力して cron エントリを追加します:
* * * * * php /Applications/MAMP/htdocs/laravelemail/artisan schedule:run 1>> /dev/null 2>&1
すると、プログラムが送信します。毎分 cron エントリ 電子メール:
概要: この記事では主に Laravel の Artisan Command、Mail、Task-Scheduler を使用して、嫌がらせメールを定期的に送信する楽しい小さなデモを作成します (笑)。とても楽しいので、ぜひ試してみてください。 。さて、数日後にデザインパターンをベースにLaravelについてお話したいと思います。