アプリケーションがユーザーを登録またはサブスクライブした場合、Eメールの送信は必須機能の1つになる場合があります。開発時には、たとえばSMTPテストサーバーを使用する傾向があります mailtrap.io
。
Mailtrapは、単一の受信トレイをテストするための無料のプランを提供します。受信トレイにメールを送信できますが、受信トレイに保存されるメッセージの数は制限されています。この無料プランを使用する場合、1秒間に送信できるメールの数も制限するため、同時に複数のメールを送信することはできないため、各メールプロセスを遅延またはスリープさせる必要があります。
上記の問題の最適な解決策は mailhog
です。Mailhogはサーバー/コンピューターでローカルに実行されているSMTPテストサーバーであり、Laradockはこのサービスを提供しています。やってみましょう。
MailhogサーバーとWeb UIを実行する
私はあなたがすでに知っており、Laradockを使ってみたと思いますが、そうでない場合は、ここで Laradockを使ってみて ください。
MailhogサーバーとWeb UIを実行するには、次のコマンドを実行します docker compose
。
docker-compose up -d mailhog
これでコンテナーは作業状態になり、docker-compose ps
コマンドで確認すると 状態は up
次のようになります。
Name Command State Ports
---------------------------------------------------------------------------------------------------------------------
laradock_mailhog_1 MailHog Mailhog Up 0.0.0.0:1025->1025/tcp,
0.0.0.0:8025->8025/tcp
Laravelアプリ用にMailhogを設定する
laravelアプリで.env
、次のパラメーターを追加/変更します。
MAIL_DRIVER = smtp MAIL_HOST = mailhog MAIL_PORT = 1025 MAIL_USERNAME = null MAIL_PASSWORD = null MAIL_ENCRYPTION = null [email protected] MAIL_FROM_NAME =例
Laravelでメールを送信する例
メールを送信する簡単な職人コマンドを作成できます。これが、laravelプロジェクトに追加する必要があるものです。
app\Console\Commands\ExampleSendMailCommand.php
:
<?php 名前空間App \ Console \ Commands; Illuminate \ Console \ Commandを使用します。 App \ Mail \ ExampleMailを使用します。 Illuminate \ Support \ Facades \ Mailを使用してください。 クラスExampleSendMailCommand extends Command { / ** *コンソールコマンドの名前と署名。 * * @var string * / protected $ signature = 'example:send-mail'; / ** *コンソールコマンドの説明。 * * @var string * / protected $ description = 'laravelでのメール送信の例を示すコマンド'; / ** *新しいコマンドインスタンスを作成します。 * * @return void * / public function __construct() { parent :: __ construct(); } / ** *コンソールコマンドを実行します。 * * @return mixed * / public function handle() { Mail :: to('[email protected] ')-> send(new ExampleMail()); } }
app\Mail\ExampleMail.php
:
<?php 名前空間App \ Mail; Illuminate \ Bus \ Queueableを使用します。 Illuminate \ Contracts \ Queue \ ShouldQueueを使用します。 Illuminate \ Mail \ Mailableを使用します。 Illuminate \ Queue \ SerializesModelsを使用します。 クラスExampleMailはMailableを拡張し、ShouldQueueを実装します { Queueableを使用して、SerializesModels; / ** *新しいメッセージインスタンスを作成します。 * * @return void * / public function __construct() { // } / ** *メッセージを作成します。 * * @return $ this * / public function build() { $ this-> view( 'mails.example'); } }
resources\views\mails\example.blade.php
:
<!DOCTYPE html> <html lang = "en"> <head> <meta charset = "UTF-8"> <meta name = "viewport" content = "width = device-width、initial-scale = 1.0"> < meta http-equiv = "X-UA-Compatible" content = "ie = edge"> <title>メールテストの例</ title> </ head> <body> <h1>向こうからこんにちは!</ h1> </ body> </ html>
コマンドの追加/登録 app\Console\Kernel.php
:
<?php 名前空間App \ Console; Illuminate \ Console \ Scheduling \ Scheduleを使用します。 Illuminate \ Foundation \ Console \ KernelをConsoleKernelとして使用します。 App \ Console \ Commands \ ExampleSendMailCommandを使用します。 クラスKernelはConsoleKernelを拡張します { / ** *アプリケーションによって提供されるArtisanコマンド。 * * @var array * / protected $ commands = [ ExampleSendMailCommand :: class、 ]; / ** *アプリケーションのコマンドスケジュールを定義します。 * * @param \ Illuminate \ Console \ Scheduling \ Schedule $ schedule * @return void * / 保護された関数schedule(Schedule $ schedule) { // $ schedule-> command( 'inspire') //-> hourly(); } / ** *アプリケーションのコマンドを登録します。 * * @return void * / protected function commands() { $ this-> load(__ DIR __。 '/ Commands'); base_path( 'routes / console.php');が必要です } }
最後に、laradokワークスペースbashを入力します(まだ持っていない場合)、お気に入りのCLIを使用してこのコマンドを実行します。
docker-compose exec --user = laradockワークスペースbash
laravelアプリのルートディレクトリに移動し、artisanコマンドを実行します。
PHPの職人の例:送信メール
コマンドの実行時にエラーがない場合は、受信トレイを見てみましょう!
Mailhog Web UIにアクセスする
mailhog Web UIには、http:// localhost:8025からアクセスできる必要があります 。あなたのサンプルメールはそこにあるはずです
電子メールメッセージを永続化する
Mailhogはcaught
メッセージをメモリに保存し ます。つまり、コンテナーを停止して再度実行すると、すべてのメッセージが(永久に)消えます。したがって、それらを保持したい場合は、laradok / docker-composition.ymlを構成して永続化する必要があります。ファイルでmailhog構成を見つけ、次のように変更します。
... ## Mailhog ############################################ #### mailhog: ビルド:./mailhog ボリューム: -$ {DATA_PATH_HOST} / mailhog / maildir:/ maildir コマンド:["-storage = maildir"、 "-maildir-path = / maildir"] ポート: -"1025 :1025 " -" 8025:8025 " ネットワーク: -フロントエンド -バックエンド ...
次に、コンテナを再起動または停止します。この時点から、すべてのメッセージが保存されます。
LaradockでMailhogの楽しさを探りましょう。
使用されるlaravelバージョン:6.0 LTS
その他の学習コンテンツについては、次のサイトをご覧ください。
Tencent T3-T4標準ブティックPHPアーキテクトチュートリアルディレクトリDaquan、給与が確実に上がるように読んでいる限り(継続的な更新)