🦔
Mailableでのメール送信を書く(Laravel)
今回はLaravelでメール送信といえば頻繁に出てくるMailableでのメール送信のやり方と、そのテストの書き方について解説していきます!
mailableでメールを送信する
今回はお問い合わせのメール送信APIを作成していきます。
1. ルーティング
api.php
にお問い合わせメール送信APIのルーティングを記述します。
↓ルーティングもLaravel8でいろいろ変わったので、お使いのバージョンに合ったように記述してください。
Route::post('contact', 'App\Http\Controllers\Api\ContactController@sendContactMail');
2. Controllerを作成する
このコマンドを実行します。
php artisan make:Controller Api/ContactController
3. Mailableクラスを拡張してメールを作成する
このコマンドを実行します。
php artisan make:Mail ContactMail
app/Mail/ContactMail.php
というファイルができます。こちらのファイル内を書き換えていきます。
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class ContactMail extends Mailable
{
use Queueable, SerializesModels;
public $content;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct(string $content)
{
$this->content = $content;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->from('******@example.com') // 送信元
->subject('お問い合わせ完了のお知らせ') // メールタイトル
->view('emails.contact') // どのテンプレートを呼び出すか
->with(['content' => $this->content]); // withオプションでセットしたデータをテンプレートへ受け渡す
}
}
4. メールの本文を定義する
メールの本文を定義していきます。
先程の↓の部分で emails.contact
と書いていますが、これはviewsディレクトリ配下の emails
ディレクトリの中の contact.blade.php
を呼び出すという意味です。
->view('emails.contact') // どのテンプレートを呼び出すか
なので、 resources/views/emails/contact.blade.php
を作成していきます。
こちらは現在はとてもシンプルにしていますが、サービス開発とかになると、もうちょっとちゃんと作り込んであげてください。bladeなのでテンプレを作って@extendで拡張することもできますし、cssをあてて華やかに見せることもできます。
<p>
下記の内容でお問い合わがありました!!!!わーーーい!!<br>
</p>
<p>
<br>
【お問い合わせ内容】<br>
{{ $content }}<br>
</p>
5. Controllerにメール送信のロジックを書く
ここでようやくメール送信のロジックを書いていきます。
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Mail;
use App\Mail\ContactMail;
class ContactController extends Controller
{
public function sendContactMail(Request $request)
{
$content = $request->input('content');
$user = auth()->user();
Mail::to($user->email)->send(new ContactMail($content));
.
.
.
// メール送信後の処理
}
}
5. 最後にリクエストを送ってみる
/contact
に対してPOSTで、パラメータは「content」でリクエストを送るとメール送信することができます。
メール設定をした上で試してみてください。
終わりに
今回はお問い合わせ送信を例にメール送信してみました。
続きのメール送信の結合テストも執筆中なので、そちらもお楽しみに!
Discussion