洗練された『Laravel』のメール送信機能を使ってみる

エリカ


洗練された『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 メール、テキストメールなどを指定していくことができます。

 

まとめ

わずかな設定だけで、ほとんどコードを書かなくてもメール送信ができてしまう。

メールの処理も洗練されていますね。

ではまた。

 

エリカ
この記事を書いた人
エリカ

ディレクター

おすすめ記事

Recommended by