Laravelでメールを送信する際は、ベタでSwiftmailを使って送信するような方法と、メールテンプレートを使ってLaravelっぽい送信をする方法といろいろあります。
Laravel 送信メールサーバーの設定を予め設定しておいてください。tinkerでメールが飛ばせるようになっていればOKです。
公式ドキュメントはこちらになります。Laravel 8.x メール
app/Http/Controllers/SampleController.php
みたいな単純なコントローラを想定してみると、以下のような書き方でシンプルなテキストメールを送信できます。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Sample;
use Mail;
class SampleController extends Controller
{
public function index ()
{
$ret = Mail::raw('本文', function ($message) {
$message->to('user@example.com')->from('from@example.com')->subject('件名');
});
return view('sample');
}
}
若干解説しておくと、use Mail;
でMailableを使えるようにしておきます。それからMail::raw()
のクロージャでそのまま送信できるというやつです。公式ドキュメントではbladeのテンプレートを使う(つまりhtmlのメール送信の)方法を紹介しておりますが、これぐらいシンプルなメール送信もできます。Mail::raw()
というスタティッククラスを使うのがコツです。
<?php
namespace App\Http\Controllers\Test;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Mail;
class MailtemplateController extends Controller
{
public function index()
{
$data = [
'no' => '9999',
'name' => 'same name',
'body' => 'これはメール送信テストです。',
];
Mail::send('emails.test', $data, function($message){
$message->to('user@example.com', 'Test')->subject('This is a test mail');
});
return "send mail with template (blade).";
}
}
resources/views/emails/test.blade.php
を作っておきます。中身は簡単なものでよいです。
no: {{ $no }}
name: {{ $name }}
text: {{ $body }}
Mail::send()
で送信します。マニュアルにはこちらの関数が載っているようです。今回は適当なテンプレートを作っていますが、CSSなどをあててスタイルは別途調整してください。
メソッドチェーンで繋がてあげればよいだけです。
$ret = Mail::raw('本文', function ($message) {
$message->to('user@example.com')
->cc('cc@example.com')
->bcc('bcc@example.com')
->from('from@example.com')
->subject('件名');
});
comming soon
結果として、
php artisan make:mail OrderShipped
(./vendor/bin/sail artisan make:mail OrderShipped)
は、不要だった。