見出し画像

Laravel学習記録 #025 メール送信について学ぶ

Laravelのメール送信について学習したものをまとめてます。

Laravelでのメール送信

  • 標準でSMTPなどを介して電子メールを送信するためのドライバーが多数用意されている

  • config/mail.phpに設定がある

  • メールの内容や送信先などをカスタマイズするためにはMailableクラスを使う

  • メール送信はファサードを介して行う


試してみる

ローカルの確認のためmailtrapというサービスを使ってメールの確認をします。

.envファイル設定

メールの設定を定義します。
ここでの設定がconfig/mail.phpに読み込まれます。
mailtrapの場合はコピーして貼り付けます。

MAIL_MAILER=smtp
MAIL_HOST=sandbox.smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=ユーザー名
MAIL_PASSWORD=パスワード
MAIL_FROM_ADDRESS="hello@example.com"
MAIL_FROM_NAME="${APP_NAME}"


Mailableクラスを作成

続いてMail送信のためのMailableクラスを作成します。

php artisan make:mail SampleMail

作成された以下を編集します。
app/Mail/SampleMail.phpを編集

envelopeメソッド:メール送信者の設定
送信者と件名を指定できます。
fromにはAddressクラスをsubjectには件名の文字列を定義します。

public function envelope()
    {
        return new Envelope(
            from: new Address('sample@example.com', '送信者'),
            subject: 'Sample Mailableクラス設定の件名',
        );
    }

contentメソッド:メールのコンテンツ(本文)の設定
view(bladeテンプレート)を指定します。
※平文のテキストでも可能

public function content()
    {
        return new Content(
            view: 'mail.sample',
        );
    }

あわせてビューを作成しておきます。
resources/views/mail/sample.blade.php

<p>Laravelからの送信です。</p>
<p>ビューで設定したテキストです。</p>

attachmentsメソッド:添付ファイル
AttachmentクラスのfromPathメソッドで添付のファイルを定義します。
今回はそのままで

Mailファサードで送信

作成したMailableクラスを使ってメールを送信してみます。
メール送信をするにはMailファサードを使用します。

コントローラー作成

app/Http/Controllers/MailController.php
indexは送信のためのページ
sendでMailファサードを使った送信をします。
Mail::to(送信先)->send(Mailableクラスインスタンス)とします。

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;
use App\Mail\SampleMail;

class MailController extends Controller
{
    public function index()
    {
        return view('mail');
    }

    public function send()
    {
        Mail::to('test@example.com')->send(new SampleMail());

        return redirect('/mail');
    }
}

ビューはボタンだけ作っておきます。

<form action="/mail/send" method="post">
    @csrf
    <input type="submit" value="メール送信">
</form>

ボタンを押して送信してみます。

こんな感じで送信できました。

こんな感じで簡単に送信可能です。
添付を含め踏み込んだ内容はまたいつかまとめようと思います。

この記事が気に入ったらサポートをしてみませんか?