[0010]mailableクラス作成しメール送信

■mailable

この例のLalavelフレームワークのバージョンは5.5です。

make:mailコマンドでmailableクラス初期作成時にapp/Mailディレクトリも作成されます。app/Mail配下にmailableクラスを配置していきます。

この例ではプロジェクト名が[sample]でプロジェクトがあるディレクトリは/home/failibere/www/sampleです。mailableクラス名は[NewOrder]にします。

コマンドプロンプト

              
#Lalavelのプロジェクト配下に移動
% cd /home/failibere/www/sample
#make:mailコマンド実行
% php artisan make:mail NewOrder
              
            

ご自身の環境に合わせて変更してください。

次にapp/Mailに作成されたNewOrder.phpを修正します。

NewOrder.php

              
              <?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;

class NewOrder extends Mailable
{
    use Queueable, SerializesModels;

    protected $title;
    protected $text;

    /**
     * Create a new message instance.
     *
     * @return  void
     */
    public function __construct($paraArr=null)
    {
        $this->title = sprintf('%s様、お問い合わせいただき、誠にありがとうございます(自動返信メール)', @$paraArr['name']);
        $this->name = @$paraArr['name'];
        $this->name_kana = @$paraArr['name_kana'];
        $this->name_nick = @$paraArr['name_nick'];
        $this->email = @$paraArr['email'];
        $this->plan_flg = @$paraArr['plan_flg'];
        $this->start_mon_flg = @$paraArr['start_mon_flg'];
    }

    /**
     * Build the message.
     *
     * @return  $this
     */
    public function build()
    {
        return $this->view('emails.new_order')
        ->text('emails.new_order_plain')
        ->subject($this->title)
        ->with([
            'name' => $this->name,
            'name_kana' => $this->name_kana,
            'name_nick' => $this->name_nick,
            'email' => $this->email,
            'plan_flg' => $this->plan_flg,
            'start_mon_flg' => $this->start_mon_flg,
        ]);
    }
}
              
            

次に上記で指定したHTML形式用とテキストメール用のviewを作成します。

emails.new_orderとemails.new_order_plainにしたので、resources/viewsにemailsフォルダを作成し、

new_order.blade.phpとnew_order_plain.blade.phpを作成します。

new_order.blade.php

              
<!DOCTYPE html>
<html lang="ja">
<head>
  <style type="text/css">
    .fontB {
    font-weight: bold;
  }
  .contact {
	width: 100%;
  }
  .contact th {
	background-color: #b6eff3;
  }
  .caution_txt{
  	font-size: 1px;
  	width: 100%;
  }
  </style>
</head>
<body>
<p>
  {{@$name}} 様
</p>
<p>
この度は会員登録誠にありがとうございます。
このメールは会員登録完了をお知らせする為の自動配信メールです。
</p> <p>[ご登録内容]

<table border="1" class="contact"> <tr> <td>名前 <td>{{@$name}} </tr> <tr> <td>名前(カナ) <td>{{@$name_kana}} </tr> <tr> <td>ニックネーム <td>{{@$name_nick}} </tr> <tr> <td>メールアドレス <td>{{@$email}} </tr> <tr> <td>プラン <td>{{@$plan_flg}} </tr> <tr> <td>プラン開始月 <td>{{@$start_mon_flg}} </tr> </table> <p class="caution_txt"> ※注意事項文言 </p> <p>-----------------------------------------------------------------------
※本メールは、自動的に配信しています。こちらのメールは送信専用のため、
直接ご返信いただいてもお問い合わせにはお答えできませんので、
あらかじめご了承ください。
----------------------------------------------------------------------- </p> <p> ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
署名
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ </p> </body> </html>

new_order_plain.blade.php

              
{{@$name}} 様

この度は会員登録誠にありがとうございます。
このメールは会員登録完了をお知らせする為の自動配信メールです。

[ご登録内容]
名前          :{{@$name}}
名前(カナ)    :{{@$name_kana}}
ニックネーム        :{{@$name_nick}}
メールアドレス      :{{@$email}}
プラン  :{{@$plan_flg}}
プラン開始月      :{{@$start_mon_flg}}

※注意事項文言

-----------------------------------------------------------------------
※本メールは、自動的に配信しています。こちらのメールは送信専用のため、
直接ご返信いただいてもお問い合わせにはお答えできませんので、
あらかじめご了承ください。
-----------------------------------------------------------------------

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
署名
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
              
            

最後にメール送信画面に呼出元を作成します。

今回は登録画面のControllerから呼び出します

RegisterController.php

              
//useの追加
use Illuminate\Support\Facades\Mail;
use App\Mail\NewOrder;

//呼出元追加
$to = 'XXX@failibere.com';
$bcc = 'XXXX@failibere.com';
Mail::to($to)->bcc($bcc)->send(new NewOrder($data));
              
            

完了です!!実際にメールが送れるか確認し、届かない場合は[0009]意外と無駄にはまったメール設定 ページへ