LaravelのMailableを使ったSMTPメール送信
Laravelは、メール送信機能を簡単かつ迅速に実装できるMailableクラスを提供しています。この記事では、SMTPを使用してメールを送信するメールフォームの作成方法を紹介します。
まず、メール送信に必要な設定を.env
ファイルに記載します。以下の設定項目を変更し、自分のSMTPサーバー情報を入力してください。
makefileMAIL_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クラスを作成します。
gophp 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
メールフォームの送信処理を行うコントローラを作成しましょう。まず、アーティザンコマンドを使って新しいコントローラを生成します。
gophp 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メールフォームの作成が完了しました。メールフォームを表示するビューを適切に作成し、送信ボタンを押すことでメール送信が行われるようになります。