前回までの状況はこちら
最新ソースはこちら(gitHub)
https://github.com/takishita2nd/hotel-mng
さて、前回作成したQRコードをメールに添付して送信する実装を行います。
メーラーはGMAILを使用します。
自前のsmtpサーバを使おうとしたけど、うまくいかなかった。
smtpサーバの設定を.envに記入します。
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=xxxxx@gmail.com
MAIL_PASSWORD=xxxxx
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=xxxxx@gmail.com
MAIL_FROM_NAME=xxxxxx
内容を使用しているアカウント情報に合わせてください。
tinkerを使って、設定が正しいかを確認することができます。
$ php artisan tinker
>>> Mail::raw('test mail',function($message) {$message->to('xxxxx@gmail.com')->subject('test');});
=> null
正しく設定されていれば、メールが届くはずです。
※エラーが表示される場合は、GMAIL側の設定の問題だったりします。セキュリティ設定を変えてみてください。
では、メールを扱う処理を書いていきましょう。
以下のコマンドでメールクラスを作成します。
$ php artisan make:mail SendQRcodeMail
以下のように書き換えます。
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
class SendQRcodeMail extends Mailable
{
use Queueable, SerializesModels;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($img)
{
$this->img = $img;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->view('emails.mail')
->from('manager@gmail.com','manager')
->subject('予約しました')
->attach($this->img);
}
}
コンストラクタでQRコードの画像パスを受け取り、buildメソッドの中でattachで添付する、という処理になっています。
では、これを使用する処理を記入します。
use App\Mail\SendQRcodeMail;
use Mail;
public function add($param, $room, $user)
{
Log::debug(print_r($param ,true));
$model = new ReserveManagement;
foreach($this->paramNames as $name)
{
$model->$name = $param[$name];
}
$model->lock_number = $this->generateLockNumber();
QrCode::format('png')->size(100)->generate($model->lock_number, public_path('/img/qr.png'));
$model->save();
$this->attachToRoom($model, $room);
$this->attachToSchedule($model);
$this->attachToUser($model, $user);
$to = [
[
'email' => $user->email,
'name' => $user->fullname,
]
];
Mail::to($to)->send(new SendQRcodeMail('/var/www/html/hotel-mng/public/img/qr.png'));
}
base64を添付しようと思いましたが、うまく行かなかったので、generateで画像をファイルに出力します。
Mailクラスを使用して、$toに宛先(ユーザー登録時に入力したものを使用します。)を設定し、sendで先程のクラスを使用します。
コンストラクタの引数には、画像のフルパスを設定します。
最後に、メールの本文。
[添付ファイル]
画像を表示できればいいので、シンプルなテンプレートにしました。
これをresources/views/emails/mail.blade.phpとして、保存します。
これで、正しく動いていれば、予約登録時にメールでQRコードが届きます。
「【LARAVEL】【ホテル予約管理】QRコードをメールに添付して送信する」への1件のフィードバック