AWS Laravel

【AWS SES + Laravel】シンプルで簡単にメールを送信する方法

開発環境

  • Docker
  • Laravel9(PHP8.1)
  • AWS Simple Email Service

概要

この記事では、LaravelでAWSのSESを使って、

シンプルで簡単にメールを送信する方法を紹介します。

メール送信にはAWSのメール送信サービス、SES(Simple Email Service)を使います。

この記事は以下の順番でお伝えします

  1. Laraveでのメール送信処理
  2. AWS SESの設定

Laraveでのメール送信処理

方法1:Mail::raw()でシンプルメール

Mail::rawを使うことで、Mailableviewファイルを使わずに、シンプルにメールを送信することができます。

   public function sendEmail()
    {
        Mail::raw('メール本文です', function ($message) {
            $message->from('from_sample@example.co.jp');
            $message->to('to_sample@example.co.jp');
            $message->subject('メールの件名です');
        });
    }

Mail::raw()の第一引数に、メール本文

->from差出元のアドレス

->to宛先のアドレス

->subject件名

変数を使ったバージョン
public function sendEmail()
    {
        $text = 'メール本文です';
        $emailFrom = 'from_sample@example.co.jp';
        $emailTo = 'to_sample@example.co.jp';
        $subject = 'メールの件名です';

        Mail::raw($text, function ($message) use ($emailFrom, $emailTo, $subject) {
            $message->from($emailFrom);
            $message->to($emailTo);
            $message->subject($subject);
        });
    }

Mail::raw()を使う方法はシンプルで簡単にメールを実装することができます。

ただ、メール本文をPHPの文字列で作成しているため、

文章の見た目を整えたい時や、テストの際少し苦労します。

方法2:Mail::send()で美しい文章メール

メール本文を整えやすくするためには、Mail::send()でLaravelのviewを使うのがおすすめです。

viewを使うとHTMLのようにタグが使えるため、PHPの文字列で送信するより文章の見た目を整えやすくなります。

Mail::send()の第一引数で、viewファイルのPathを指定します

    public function sendEmail()
    {
        Mail::send(
             mails.sample, //第一引数
            [
            'text' => 'Laravel',
            'name' => 'jose blog',
            ], 
            function ($message) {
            $message->from('from_sample@example.co.jp');
            $message->to('to_sample@example.co.jp');
            $message->subject('メールの件名です');
        });
    }
Path指定の注意点

(resources/views/emails/sample.blade.php → emails/sample

・viewsより下のパスから指定

.blade.phpは省略

変数を使ってソースコードを綺麗にするとこんな感じです。

 public function sendEmail()
    {
        $text = 'Laravel';
        $name = 'jose blog';
        $emailFrom = 'from_sample@example.co.jp';
        $emailTo = 'to_sample@example.co.jp';
        $subject = 'メールの件名です';

        Mail::send(
             mails.sample, 
           [
            'text' => $text, //メール本文に渡す変数
            'name' => $name //メール本文に渡す変数
           ],
            function ($message) use ($emailFrom, $emailTo, $subject) {
            $message->from($emailFrom);
            $message->to($emailTo);
            $message->subject($subject);
        });
    }
viewファイルの作り方

resources/views内にblade.phpファイルを作成するだけです。

.blade.phpでないと変数が受け取れないので注意

例)resources/views/mail/sample.blade.php

<p>こんにちは</p>

<p>{{ $text }}のメール送信方法についてのおしらせです</p>

<p>viewを使うと変数でメール本文を変えることができます</p>

<p>From {{ $name }}</p>

送信メールの内容

===============================
こんにちは
Laravelのメール送信方法についてのおしらせです
viewを使うと変数でメール本文を変えることができます
From jose blog
===============================

まとめ

Laravelでメールを送信するMail::rawMail::sendの2パターン

メールの本文をPHPのテキストで作成するときはMail::raw

メールの本文をviewファイルで作成するときはMail::send


AWS SESで送信するための設定

  • AWS SESドライバーをインストール
composer require aws/aws-sdk-php
  • .envファイルに6つ変数を追加

※以下3つはAWSでほかサービスを使用している場合すでに設定されている可能性があります

AWS_ACCESS_KEY_ID =      #IAMユーザーのアクセスキー
AWS_SECRET_ACCESS_KEY =  #IAMユーザーのシークレットアクセスキー
AWS_DEFAULT_REGION=      #所属するリージョン(東京の場合はap-northeast-1)

※以下3つはAWS SESのサービスで新たに設定します

MAIL_MAILER=ses
MAIL_FROM_ADDRESS=sample@test-ses.co.jp   #@より前は自由、@の後はSESにて設定したドメインを設定
MAIL_FROM_NAME=jose                    #メールを受け取ったときの表示名(FROMに当たる部分)

-AWS, Laravel