5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Laravelでメール送信する

Last updated at Posted at 2020-05-31

目次

Laravelの記事一覧は下記
PHPフレームワークLaravelの使い方

Laravelバージョン

動作確認はLaravel Framework 7.19.1で行っています

前提条件

eclipseでLaravel開発環境を構築する。デバッグでブレークポイントをつけて止める。(WindowsもVagrantもdockerも)
本記事は上記が完了している前提で書かれています
プロジェクトの作成もapacheの設定も上記で行っています

Gmailのアプリパスワード取得

今回はLaravelからGmailを使ってメールを送信しようと思います
そのためにGmailのアプリパスワードを取得します

(1) googleアカウントにアクセス
(2) セキュリティをクリックし2段階認証プロセスをONにする
a.png

(3) セキュリティをクリックしアプリパスワードをクリックする
b.png

(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修正

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ファイル作成

mail.blade.php
<html>
    <head>
        <title>sample</title>
    </head>
    <body>
        メール送信しました
    </body>
</html>

(2) /sample/resources/views/sample/mailContentHtml.blade.phpファイル作成

mailContentHtml.blade.php
<html>
    <body>
        <div style="font-weight: bold; color: red;">{{ $sample }}</div>
    </body>
</html>

(3) /sample/resources/views/sample/mailContentText.blade.phpファイル作成

mailContentText.blade.php
{{ $sample }}

Mailableクラスのpublic変数sampleを出力しています。
Mailableクラスのpublic変数はメール本文のviewで使うことができます

動作確認

http://localhost/laravelSample/sample/mail

メール送信しました

メールが送信され受信できました

5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?