こんにちは、エリカです。
前回のブログでお問い合わせフォームを作りましたが、今回はメール送信部分について詳しくみていきます。
 
        『Laravel』を使ってカンタンなお問い合わせフォームを作ってみた
Laravel では、メールまわりについても洗練された API が提供されていて、SMTP や Amazon SES といったさまざまなドライバーにも柔軟に対応できるようになっています。これは SwiftMailer ライブラリを利用する形で実現されています。
Mailableクラスの用意
アプリケーションでメールを扱うためには、MailableContract インターフェースを持つ Mailable クラスを、app / Mail ディレクトリに用意するだけです。
お問い合わせのメールということで、ContactSent という名前のクラスを作成します。
$ php artisan make:mail ContactSentapp / 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サイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。
 
     
        

 
                     
                         
                                 
                         
                                 
                         
                                 
                         
                                 
                             
                            