SendGrid
laravel5.5

laravel5 sendgrid メール送信

参考

https://qiita.com/ubonsa/items/5514fb9c5d5783bcc758

https://github.com/s-ichikawa/laravel-sendgrid-driver

条件

Sendgridの設定が終わっていること。


インストール


composer require s-ichikawa/laravel-sendgrid-driver


MAIL_DRIVER=sendgrid
SENDGRID_API_KEY='YOUR_SENDGRID_API_KEY'//要変更


設定


config/app.php


'providers' => [
Sichikawa\LaravelSendgridDriver\SendgridTransportServiceProvider::class
];



config/services.php


'sendgrid' => [
'api_key' => env('SENDGRID_API_KEY'),//何も変更せずこのままコピペ
],



キャッシュクリア&ファイル生成


php artisan config:cache
php artisan make:mail TestMail


ファイル変更


/app/Mail/TestMail.php

<?php

namespace App\Mail;

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

use Sichikawa\LaravelSendgridDriver\SendGrid;

class TestMail extends Mailable
{
use Queueable, SerializesModels;
use SendGrid;//これ大事
protected $data;//これ大事
/**
* Create a new message instance.
*
* @return void
*/

public function __construct($data)
{
// 引数で受け取ったデータを変数にセット
$this->data = $data;
}

/**
* Build the message.
*
* @return $this
*/

public function build()
{
return $this
->view('email.index',$this->data)
->subject('ここにタイトル')
->from('from@from.com')
->to(['to@to.com'])
->sendgrid([
'personalizations' => [
[
'substitutions' => [
':myname' => 'your',
],
],
],
]);

}
}



送信されるview生成


#/resources/views/emails/index.blade.php


テスト送信の本文
こんにちわ{{$name}}さん



適当なコントローラーで送信


<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Route;
use App\Mail\TestMail;
use Illuminate\Support\Facades\Mail;
use Log;

class OkwsController extends Controller
{
// とりあえず、メール送信のテスト
public function mail()
{
$data = ['name' => 'はなこ'];
Mail::to('to@to.com')
->send(new TestMail($data));
}

}


もっと便利に

Testmail.php を SendMail.php に変更してある。

さらに ->text に変更することにより改行が有効になる。

from の設定がなければ app.php の初期値を使う。

あれば、それを優先。


SendMail.php


public function build()
{
if(!isset($this->option['from'])){
$this->option['from'] = [
'email' => config('app.email'),
'name' => config('app.name')
];
}

return $this
->text($this->option['view'],$this->data)//text に変更した。これで改行が有効になる
->subject($this->option['subject'])
->from($this->option['from']['email'],$this->option['from']['name'])//ここは配列では無い!ので要注意。
->with(['data' => $this->data])

//なんの値かわからんけど、必須
->sendgrid([
'personalizations' => [
[
'substitutions' => [
':myname' => 'hideki',
],
],
],
]);

}



YourController.php


// Mail::to('info@hoge.jp','相性占いさん')
Mail::to('info@hoge.jp')
->send(new SendMail($data,[
'subject' => 'お問い合わせ',
// 'from' => [
// 'email' => 'info@yuour.com',
// 'name' => 'ひでちゃんおじさん'
// ],
'view' => 'email.contact'//views/email/contact.blade.php
]));