『自由力』を身に付けるサイト「リバトレ」も見てね!!

LaravelでMail送信のサンプルを作成してみた件

悩んでいる男の子

Laravelでメール送信のサンプルを作りたいんだけど、良く分からないから教えてほしいな~。
具体的なソースコードもあると嬉しいかも。

こんな悩みを解決します。

  • 本記事の内容
  • Laravelでのメール送信プログラム作成方法
  • メール送信の具体的なソースコード
  • 本記事の執筆者
プロフィール
どこの写真だよ
  • 長身ガリガリ自称イケメン(1993/4/1生)
  • 元エンジニア(歴7年)、資格保有数約20個(IT系以外も含む)
  • 副業(物販)5か月目で月利30万円⇒脱サラ
  • 物販、システム開発、アフィリエイト、投資を細々とやっています。
  • 物販は彼女と楽しみながらやってます!

今回は、LaravelでMail送信のサンプルを作成してみます

いずみん

本記事を読めばLaravelでのメール送信が理解できるので、最後まで読んでみてください!

目次

Mail送信サンプル作成の前に

今回は、実際のメール送信までは行いません。

メールサーバがないのと、メールドライバを「log」に設定するとメールの内容をログに出力してくれるので、ログを確認するだけで十分担保できます。

Mail送信サンプル作成手順

早速作成していきます。

まず、メールの設定ですが、基本的には「.env」と「config/mail.php」で設定されています。

.envの設定

APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:O6KzNSTcrd9b/I1a0LTkOETCSXAW0oPGMsVJ8QlWJT4=
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://localhost

DB_CONNECTION=pgsql
DB_HOST=postgres
DB_PORT=5432
DB_DATABASE=test_db
DB_USERNAME=test_user
DB_PASSWORD=secret

BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file
SESSION_LIFETIME=120
QUEUE_DRIVER=sync

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=kohei.izumi@sample.com
MAIL_FROM_NAME=K.Izumi

PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1

MAIL_FROM_ADDRESS」「MAIL_FROM_NAME」の設定を追記しました。

平文メールの作成

Laravelでは平文メールとHTMLメールの2種類を作成できますが、今回は平文メールを作成します。

メールが来たよーーー。

{{ $text }}

上記が平文メールの内容になります。

メールはbladeで作成するので、当然変数の展開も可能です。

クラスの作成

Laravelには「Mailable」クラスという、メールを扱うクラスがあります。

これもphp artisanコマンドで作成できるのでサクッと作っていきます。

php artisan make:mail SampleMail

上記で「SampleMail」というクラスを作成しました。

<?php

namespace App\Mail;

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

class SampleMail extends Mailable
{
    use Queueable, SerializesModels;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->view('sample_mail')
                    ->from(config('mail.from.address'))
                    ->subject('メール')
                    ->with([
                        'text' => 'ぽえぽえー',
                      ]);
    }
}

適当ですが、build関数内を少し修正しました。

コントローラの作成

本来ならロジックはサービスに記載したいのですが、説明の便宜上、コントローラにロジックを記載します。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;
use App\Mail\SampleMail;

class MailController extends Controller
{
    public function __construct() { }

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function store()
    {
        Mail::to('<あなたのTOアドレス>')->send( new SampleMail() );
    }
}

ルーティングの設定

Route::resource('mail', 'MailController', ['only' => ['store']]);

POST時にコントーローラを呼ぶよう追記しました。

laradock@166d6d4773e7:/var/www$ php artisan route:list
+--------+----------+----------+------------+-------------------------------------------+------------+
| Domain | Method   | URI      | Name       | Action                                    | Middleware |
+--------+----------+----------+------------+-------------------------------------------+------------+
|        | GET|HEAD | /        |            | Closure                                   | web        |
|        | POST     | api/mail | mail.store | App\Http\Controllers\MailController@store | api        |
|        | GET|HEAD | api/user | user.index | App\Http\Controllers\UserController@index | api        |
+--------+----------+----------+------------+-------------------------------------------+------------+

ルーティングが追加されています。

メール送信の前に

ログに出力するよう設定を変更します。

APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:O6KzNSTcrd9b/I1a0LTkOETCSXAW0oPGMsVJ8QlWJT4=
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://localhost

DB_CONNECTION=pgsql
DB_HOST=postgres
DB_PORT=5432
DB_DATABASE=test_db
DB_USERNAME=test_user
DB_PASSWORD=secret

BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file
SESSION_LIFETIME=120
QUEUE_DRIVER=sync

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_DRIVER=log
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=kohei.izumi@sample.com
MAIL_FROM_NAME=K.Izumi

PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1

MAIL_DRIVER」を「log」にすることで、ログにメールの内容が出力されます。

メール送信

laravel-mail

上記のようにPOSTで送信すると200が返ってきました。

[2020-03-08 04:39:15] local.DEBUG: Message-ID: <d122227a234ec3002a03f65170e6eb85@localhost>
Date: Sun, 08 Mar 2020 04:39:13 +0000
Subject: =?utf-8?Q?=E3=83=A1=E3=83=BC=E3=83=AB?=
From: kohei.izumi@sample.com
To: <あなたのTOアドレス>
MIME-Version: 1.0
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable

メールが来たよーーー。

ぽえぽえー

ログにも正しく出力されていますね。

まとめ

今回は、LaravelでMail送信のサンプルを作成してみました

ドライバを「log」にすると、ログにメールの内容が出力されるのが素敵ですね。

ではまた!

  • おススメ本はこちら!
いずみん

僕は↓の本でLaravelの勉強をしました!
非常に分かりやすいので是非!

  • 関連記事
LaravelでMail送信のサンプルを作成してみた件

この記事が気に入ったら
フォローしてね!

シェアするんやで!

~ リバトレ ~

お金や副業に関する情報を発信しているよ!

この記事を書いた人

いずみんのアバター いずみん 自由力発信おじ

【自由力発信】うさんくさ笑 | 副業物販で5ヶ月目に月利30万円達成⇨脱サラ予定 | 物販(アパレルせどり)・アフィリエイト・投資で自由になるための情報を発信中?笑 | 元エンジニア | 保有資格約20個

関連記事

コメント

コメントする

目次
閉じる