Dockerを使用してPHP、Laradockシリーズ3:Mailhogを開発する

アプリケーションがユーザーを登録またはサブスクライブした場合、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、給与が確実に上がるように読んでいる限り(継続的な更新)

 

おすすめ

転載: www.cnblogs.com/a609251438/p/12691320.html