目次
Laravelの記事一覧は下記
PHPフレームワークLaravelの使い方
Laravelバージョン
動作確認はLaravel Framework 7.19.1で行っています
前提条件
eclipseでLaravel開発環境を構築する。デバッグでブレークポイントをつけて止める。(WindowsもVagrantもdockerも)
本記事は上記が完了している前提で書かれています
プロジェクトの作成もapacheの設定も上記で行っています
Gmailのアプリパスワード取得
今回はLaravelからGmailを使ってメールを送信しようと思います
そのためにGmailのアプリパスワードを取得します
(1) googleアカウントにアクセス
(2) セキュリティをクリックし2段階認証プロセスをONにする
(3) セキュリティをクリックしアプリパスワードをクリックする
(4) パスワードの取得
アプリを選択→メール
デバイスを選択→その他(名前入力) 適当な名前を入力する
生成をクリック
表示されたパスワードをメモしておく
SMTPサーバの情報を設定
/sample/.envを編集
‥‥
MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=XXXXX@gmail.com
MAIL_PASSWORD=XXXXXXXXXX
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=XXXXX@gmail.com
MAIL_FROM_NAME="sample sender"
‥‥
MAIL_USERNAME、MAIL_FROM_ADDRESSは送信元のGmailアドレス
MAIL_FROM_NAMEは送信者名
MAIL_PASSWORDは先ほど取得したアプリパスワード(半角スペースはいらない)
ここで設定した値は/sample/config/mail.phpで使われます
Mailableクラス作成
(1)コマンドラインで
cd sample
php artisan make:mail SampleMail
xdebugの設定をしているとeclipseが実行していいですかというプロンプトを出すのでOKを押します
eclipseプロジェクトを右クリック→リフレッシュ
/sample/app/Mail/SampleMail.phpが現れます
(2) SampleMail.php修正
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class SampleMail extends Mailable
{
use Queueable, SerializesModels;
public $sample;
private $imgName;
private $imgMineType;
private $imgData;
public function __construct($sample, $imgName, $imgMineType, $imgData)
{
$this->sample = $sample;
$this->imgName = $imgName;
$this->imgMineType = $imgMineType;
$this->imgData = $imgData;
}
public function build()
{
return $this->view('sample.mailContentHtml')
->text('sample.mailContentText')
->subject('sample mail')
->attachData(
$this->imgData,
$this->imgName,
[
'mime' => $this->imgMineType,
]);
}
}
変数宣言$sample
、$imgName
、$imgMineType
、$imgData
を追記
public変数はメール本文のview内で使用できるようになります
コンストラクタを変数受け取れるように修正
buildメソッド実装
viewはメール本文HTML用。後でmailContentHtml.blade.phpを作成します
textはメール本文HTML用。後でmailContentText.blade.phpを作成します
subjectはメールタイトル
attachDataは添付ファイル
Controllerにメソッド追加
(1) /sample/app/Http/Controllers/SampleController.phpに下記を追記
use App\Mail\SampleMail;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Storage;
(2) /sample/app/Http/Controllers/SampleController.phpにmailメソッドを追記
public function mail()
{
$stream = Storage::readStream('sample.png');
$imgData = stream_get_contents($stream);
fclose($stream);
Mail::to("XXXXXXXXXXXXXXXX@gmail.com")
->cc("XXXXXXXXXXXXXXX@gmail.com")
->bcc("XXXXXXXXXXXXXXXXX@gmail.com")
->send(new SampleMail('sample text', 'sample.png', 'image/png', $imgData));
return view('sample.mail');
}
Storageクラスは/sample/storage/app配下のファイルを扱えるクラス。どのフォルダを扱えるようにするかは、/sample/config/filesystems.phpで設定されている
Storage::readStream('sample.png')で/sample/storage/app/sample.pngのリソースを取得している
toは送信先
ccはカーボンコピー
bccはブラインドカーボンコピー
sendで先ほど作成したMailableクラスを指定
(3) サンプル用の添付ファイル
適当な画像作成ソフトでsample.pngを作成し、/sample/storage/app/sample.pngに保存
(4) /sample/routes/web.phpに下記を追記
Route::get('sample/mail', 'SampleController@mail');
viewの作成
(1) /sample/resources/views/sample/mail.blade.phpファイル作成
<html>
<head>
<title>sample</title>
</head>
<body>
メール送信しました
</body>
</html>
(2) /sample/resources/views/sample/mailContentHtml.blade.phpファイル作成
<html>
<body>
<div style="font-weight: bold; color: red;">{{ $sample }}</div>
</body>
</html>
(3) /sample/resources/views/sample/mailContentText.blade.phpファイル作成
{{ $sample }}
Mailableクラスのpublic変数sampleを出力しています。
Mailableクラスのpublic変数はメール本文のviewで使うことができます
動作確認
http://localhost/laravelSample/sample/mail
メール送信しました
メールが送信され受信できました