Laravelタスクスケジューラに基づいて定期的にメールを送信するためのミニプログラム

WBOY
リリース: 2016-06-20 12:29:47
オリジナル
1234 人が閲覧しました

注: この記事では主に Laravel の Artisan コマンド、タスク スケジューラ、およびメール関連の知識を学習します。メールを定期的に送信するための簡単な小さなデモを作成します。 。プロセス全体が完了するまでにかかる時間はわずか 1 時間です。同時に、作成者は開発プロセス中にいくつかのスクリーンショットとコードを貼り付けて、読み取り効率を向上させます。筆者の開発環境はネイティブMAMP統合ソフト、PHP7.0、Laravel5.2.*です。

Laravelのアーティザンコマンドの内容についてはサービス - アーティザンコンソールを、メールメールサービスの内容についてはサービス - メールを、タスクスケジューラのタスクタイマーについてはを参照してください。サービス - タスクのスケジュールを参照してください。

Artisan Command

新しい 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 職人と入力して、コマンドを表示して実行できます。

Mail

メール サービス 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についてお話したいと思います。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート