初心者のプログラミング日記

プログラミング初心者の日記

プログラミングに関することを書いていきます。

Laravelでメールの送信方法

Laravelでメールの送信方法を書いていきます。
今回はGmailでメールを送る方法でやっていきます。

まず、Googleアカウントの設定でセキュリティの2段階認証をオンにします

f:id:nasubiFX:20200428023756p:plain
画像の赤枠の所

そしたら、その下のアプリパスワードの所を開き、アプリをメール、デバイスをお使いのデバイスに合わせます。今回はwindowsパソコンでやるので画像のようにしています。

f:id:nasubiFX:20200428024215p:plain
画像の赤枠の所

そして、生成ボタンを押すと16桁のパスワードが発行されるのでコピーしておきます。

f:id:nasubiFX:20200428024539p:plain
画像の赤枠の所

次にファイルの設定をしていきます。
まず、.envファイルを以下のように変更します。

MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=メールアドレスを記載(下のFROMと同じで良い)
MAIL_PASSWORD=発行したアプリパスワードの設定
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=どのアドレスから送信するかを記載
MAIL_FROM_NAME=メールの件名

次に以下のコマンドでメール送信クラスであるmailableクラスを生成します。

php artisan make:mail クラス名

ファイルはデフォルトの状態であればapp/Mailにできます。
今回はmailableクラス名をSampleMailで作っています。

中身を書き足します。

<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;

class SampleMail extends Mailable
{
    use Queueable, SerializesModels;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this
           // 送信元
          ->subject('テスト送信') // メールタイトル
          ->view('sample_mail'); // メールの本文となるviewを設定
    }
}

public function build()の中に書き足していきます。他にもwithとか色々設定できるので調べてみてください。

次にコントローラーの設定をしていきます。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;  // 追加
use App\Mail\SampleMail;  //さっき作ったmailableクラス

class MailController extends Controller
{
    //
    public function SendMail(){
        Mail::to(送信先のメールアドレス)->send(new SampleMail);
    }
}

送信先を複数にできたり、SampleMailに変数を渡すこともできるのでお好きにカスタマイズしてください。

次にメールの本文を作っていきます。

<p>テストメールの送信です。</p>

mailableクラスで設定したviewに書いてください。
作成場所はviewsの中ならどこでも構いません。

最後にルーティングの設定をします。

Route::get('/mail','MailController@SendMail');

これで設定したURLにアクセスするとメールが届きます。
f:id:nasubiFX:20200428030709p:plain

仮に送信できなかった場合はconfig/mail.phpの中身を.envファイルと同じようにすると送信できるかもしれません。