こんにちは、エリカです。
前回のブログでお問い合わせフォームを作りましたが、今回はメール送信部分について詳しくみていきます。
『Laravel』を使ってカンタンなお問い合わせフォームを作ってみた
Laravel では、メールまわりについても洗練された API が提供されていて、SMTP や Amazon SES といったさまざまなドライバーにも柔軟に対応できるようになっています。これは SwiftMailer ライブラリを利用する形で実現されています。
Mailableクラスの用意
アプリケーションでメールを扱うためには、MailableContract インターフェースを持つ Mailable クラスを、app / Mail ディレクトリに用意するだけです。
お問い合わせのメールということで、ContactSent という名前のクラスを作成します。
$ php artisan make:mail ContactSent
app / Mail / ContactSent.php というファイルが作成されます。
<?php
namespace AppMail;
use IlluminateBusQueueable;
use IlluminateMailMailable;
use IlluminateQueueSerializesModels;
use IlluminateContractsQueueShouldQueue;
class ContactSent extends Mailable
{
use Queueable, SerializesModels;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->view('view.name');
}
}
build メソッドが view を返していますね。これで view を使ってカンタンにメールの内容を扱えます。
メールの内容を組み立て
お問い合わせフォームなので、入力された内容をメールにも記載します。
パブリックなプロパティを定義するだけで、ビューで使えるようになります。
お問い合わせの内容保持された Contact モデルをコンストラクタに渡します。
public $contact;
/**
* Create a new message instance.
*
* @param AppContact $contact
*/
public function __construct(Contact $contact)
{
$this->contact = $contact;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->view('contact.html');
}
これだけでプロパティの内容がビューに渡されて、いつものように利用できるようになります。
お名前 : {{$contanct->name}}
メールの送信
あとは、お問い合わせフォームのコントローラーの送信部分に組み込みます。
// 略
use AppMailContactSent;
class ContactController extends Controller
{
// 略
public function process(Request $request)
{
// 略
// お問い合わせフォームへの入力内容を保持したモデルオブジェクトを用意
$contact = Contact::make($request->all());
Mail::to(メールの送信先)->send(new ContactSent($contact));
// 略
return view('complete');
}
}
メールを送信するには、Mail ファサードを使います。
Mail ファサードからは、config / mail.php の設定にしたがって生成された Mailer インスタンスを利用できます。メールドライバーの選択や、送信元などの設定などが反映されています。なので、送信先のみを指定して送信処理を行なっています。
一方、Mailable なインスタンス(ここではContactSent)においては、送信元の上書き、複数の送信先などを設定することができます。
build メソッドで例えば以下のように指定します。
$cc = [
[
'name' => 'cc1 name',
'email' => 'MAILADDRESS',
],
[
'name' => 'cc2 name',
'email' => 'MAILADDRESS',
],
[
'name' => 'cc3 name',
'email' => 'MAILADDRESS',
],
];
$bcc = [
[
'name' => 'bcc1 name',
'email' => 'MAILADDRESS',
],
[
'name' => 'bcc2 name',
'email' => 'MAILADDRESS',
],
[
'name' => 'bcc3 name',
'email' => 'MAILADDRESS',
],
];
return $this
->from('MAILADDRESS', 'from name')
->to('MAILADDRESS', 'to name')
->cc($cc)
->bcc($bcc)
->subject('SUBJECT')
->view('contact.html');
cc や bcc の設定も簡単ですね。また件名も指定しています。ちなみに 件名を指定しない場合は、クラス名が割り当てられていました。
このような感じで、ファイルの添付や HTML メール、テキストメールなどを指定していくことができます。
まとめ
わずかな設定だけで、ほとんどコードを書かなくてもメール送信ができてしまう。
メールの処理も洗練されていますね。
ではまた。
LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。