- 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」伍長を参考にさせていただきました。
|