Laravelでメールの送信をする

Laravelでメールを送信する際は、ベタでSwiftmailを使って送信するような方法と、メールテンプレートを使ってLaravelっぽい送信をする方法といろいろあります。
Laravel 送信メールサーバーの設定を予め設定しておいてください。tinkerでメールが飛ばせるようになっていればOKです。
公式ドキュメントはこちらになります。Laravel 8.x メール

テキストメールを送信する

app/Http/Controllers/SampleController.phpみたいな単純なコントローラを想定してみると、以下のような書き方でシンプルなテキストメールを送信できます。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Sample;
use Mail;

class SampleController extends Controller
{
  public function index () 
  {
    $ret = Mail::raw('本文', function ($message) {
      $message->to('user@example.com')->from('from@example.com')->subject('件名');
    });

    return view('sample');
  }
}

若干解説しておくと、use Mail;でMailableを使えるようにしておきます。それからMail::raw()のクロージャでそのまま送信できるというやつです。公式ドキュメントではbladeのテンプレートを使う(つまりhtmlのメール送信の)方法を紹介しておりますが、これぐらいシンプルなメール送信もできます。Mail::raw()というスタティッククラスを使うのがコツです。

メールテンプレートを使ってメールを送信する

<?php

namespace App\Http\Controllers\Test;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Mail;

class MailtemplateController extends Controller
{
  public function index()
  {
    $data = [
      'no' => '9999',
      'name' => 'same name',
      'body' => 'これはメール送信テストです。',
    ];

    Mail::send('emails.test', $data, function($message){
      $message->to('user@example.com', 'Test')->subject('This is a test mail');
    });

    return "send mail with template (blade).";
  }
}

resources/views/emails/test.blade.phpを作っておきます。中身は簡単なものでよいです。

no: {{ $no }}
name: {{ $name }}
text: {{ $body }}

Mail::send()で送信します。マニュアルにはこちらの関数が載っているようです。今回は適当なテンプレートを作っていますが、CSSなどをあててスタイルは別途調整してください。

ccやbccで送信する

メソッドチェーンで繋がてあげればよいだけです。

$ret = Mail::raw('本文', function ($message) {
  $message->to('user@example.com')
  ->cc('cc@example.com')
  ->bcc('bcc@example.com')
  ->from('from@example.com')
  ->subject('件名');
});

バックグラウンドでメールを送信する。

comming soon


結果として、

php artisan make:mail OrderShipped
(./vendor/bin/sail artisan make:mail OrderShipped)

は、不要だった。


  • News

  • Categories

  • Tags

  • Archives

  • Page index