LaravelのMailableを使ったSMTPメール送信

2023-03-24
タグ Laravel PHP

Laravelは、メール送信機能を簡単かつ迅速に実装できるMailableクラスを提供しています。この記事では、SMTPを使用してメールを送信するメールフォームの作成方法を紹介します。

まず、メール送信に必要な設定を.envファイルに記載します。以下の設定項目を変更し、自分のSMTPサーバー情報を入力してください。

makefile
MAIL_MAILER=smtp MAIL_HOST=your_smtp_server MAIL_PORT=587 MAIL_USERNAME=your_smtp_username MAIL_PASSWORD=your_smtp_password MAIL_ENCRYPTION=tls MAIL_FROM_ADDRESS=your_from_email MAIL_FROM_NAME="${APP_NAME}"

次に、アーティザンコマンドを使用して、新しいMailableクラスを作成します。

go
php artisan make:mail ContactFormMail --markdown=emails.contact-form

このコマンドで生成されるMailableクラスは、app/Mail/ContactFormMail.phpに保存され、メールのテンプレートはresources/views/emails/contact-form.blade.phpに保存されます。

ContactFormMail.phpを開き、メールに必要な情報を渡すために、コンストラクタに変数を追加し、build()メソッドを編集します。

php
// app/Mail/ContactFormMail.php public function __construct($data) { $this->data = $data; } public function build() { return $this->from($this->data['email']) ->subject('お問い合わせ') ->markdown('emails.contact-form') ->with('data', $this->data); }

次に、メールフォームのテンプレートをresources/views/emails/contact-form.blade.phpに作成します。

html
@component('mail::message') # お問い合わせ内容 以下の内容でお問い合わせがありました。 - お名前: {{ $data['name'] }} - メールアドレス: {{ $data['email'] }} - 件名: {{ $data['subject'] }} - お問い合わせ内容: {{ $data['message'] }} @endcomponent

メールフォームの送信処理を行うコントローラを作成しましょう。まず、アーティザンコマンドを使って新しいコントローラを生成します。

go
php artisan make:controller ContactFormController

次に、生成されたContactFormControllerクラスに必要なネームスペースを追加し、store()メソッドを実装してメール送信処理を行います。

php
// app/Http/Controllers/ContactFormController.php namespace App\Http\Controllers; use App\Mail\ContactFormMail; use Illuminate\Http\Request; use Illuminate\Support\Facades\Mail; class ContactFormController extends Controller { public function store(Request $request) { $data = $request->validate([ 'name' => 'required|string|max:255', 'email' => 'required|email|max:255', 'subject' => 'required|string|max:255', 'message' => 'required|string', ]); Mail::to(config('mail.from.address'))->send(new ContactFormMail($data)); return redirect()->back()->with('success', 'お問い合わせが送信されました。'); } }

最後に、routes/web.phpにルートを追加して、メールフォームの表示と送信処理を行うように設定します。

php
// routes/web.php use App\Http\Controllers\ContactFormController; Route::get('/contact', function () { return view('contact'); }); Route::post('/contact', [ContactFormController::class, 'store']);

これで、Laravelを使ってMailableを使用したSMTPメールフォームの作成が完了しました。メールフォームを表示するビューを適切に作成し、送信ボタンを押すことでメール送信が行われるようになります。

前のページに戻る