PHP - Laravel - メール送信 - Mailable クラス


クラウディア 


1. 概要
2. 作成
3. 送信
4. 参考サイト

1. 概要

 前ページで紹介しているのは、正に、「Mail::raw()」ですからな。  生のまま使っているわけです。  それを、派生させた、「Mailable」クラス中のを作成して使うのが、スマートらしい。

2. 作成

 「Laravel」のプロジェクトで、プロジェクト所有者権限で、下記の要領でクラスを作成します。  クラス名を仮に、「MyMail」としますと。

php artisan make:mail MyMail
 そうすると下記のファイルが作成されまして。

app/Mail/MyMail.php
 中身がこんななっています。

<?php

namespace App\Mail;

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

class MyMail extends Mailable
{
    use Queueable, SerializesModels;

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

    /**
     * Get the message envelope.
     */
    public function envelope(): Envelope
    {
        return new Envelope(
            subject: 'My Mail',
        );
    }

    /**
     * Get the message content definition.
     */
    public function content(): Content
    {
        return new Content(
            view: 'view.name',
        );
    }

    /**
     * Get the attachments for the message.
     *
     * @return array<int, \Illuminate\Mail\Mailables\Attachment>
     */
    public function attachments(): array
    {
        return [];
    }
}
 本来は、この「envelope()」や「content()」を編集するべきなのですが・・・。  どうもわたしの思い通りにいかないので、この2つは、いったん削除します。

3. 送信

 メール送信を行います。  「html」メールもかけるようですが、わたしは、「Plain text」のメールが好きなので、そちらを使用します。  送るメールの本文は、「blade.php」で書きます。  例えば。

resources/views/emails/mymail.blade.php
 を作成して。

{{ $text }}
 とでも書いておきます。  これが、メール本文になります。  前項のクラスを下記のように記述します。

<?php

namespace App\Mail;

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

// アンケート回答通知メール
class enquete extends Mailable
{
    use Queueable, SerializesModels;

	public $text;

    /**
     * Create a new message instance.
     */
    public function __construct($text)
    {
		$this->text = $text;
    }

	/**
     * 新しい envelope() や content() は使わず、build() を使います
     */
    public function build()
    {
        return $this->from('差出アドレス')
                    ->subject('件名')
                    ->text('emails.mymail');
    }

    /**
     * Get the attachments for the message.
     *
     * @return array<int, \Illuminate\Mail\Mailables\Attachment>
     */
    public function attachments(): array
    {
        return [];
    }
}
 17~25行のあたりで、引数として変数をもらいます。  これが、「emails/mymail.blade.php」の変数として展開されます。  変数は、数と順番をそろえていれば、複数あっても大丈夫です。  32、33行は、実際の電子メールのアドレスと件名を記述します。  32行は、「from('差出アドレス', '表示名')」と記述することもできます。  受信側で、アドレスをべたで表示せずに、表示名で表示させることになります。  呼び出しの際は。

use App\Mail\MyMail;
use Illuminate\Support\Facades\Mail;
 と2つの「use」(作成したものと、もともと使用するためのもの)をヘッダに記述しておいて。  メール送信するときには、下記のように記述します。

Mail::to('送信先アドレス')->send(new MyMail($text));
 送信先アドレスは、実際の電子メールのアドレスを記述します。  「MyMail」の箇所は、作成したクラス名ですね。  「$text」は、メール内に展開させたい引数で、「emails/mymail.blade.php」で使う変数を網羅するようにします。  これで、ばっちり、メールを送信することができます。

4. 参考サイト

 本件は、「Gemini」伍長を参考にさせていただきました。

EaseUS
AbemaTV 無料体験
JETBOY