人気のPHPoWEBアプリケーションフレームワークLaravelのTipsを記録していきます

Laravelでメールを送信する

Laravelにはメールを送信するクラス(mailable)が最初から用意されています。
これを使って管理者宛にメールを送信してみます。

● Laravel mailableを artisan から生成する

今回管理者宛にメール送信するプログラムなので名前を「Admin」とします。(命名は自由です好きに書き換えてください)

app/Mail/Admin.php というファイルを次のコマンドで生成します。

php artisan make:mail Admin

app/Mail/Admin.php が生成されました。 以下のように修正します。

public function build() の中を書き換えます
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
class Admin extends Mailable
{
    use Queueable, SerializesModels;
    private $message;
    /**
     * Create a new message instance.
     * @return void
     */
    public function __construct( $m )
    {
        $this->message = $m;
    }
    /**
     * Build the message.
     * @return $this
     */
    public function build()
    {
        // ここを書き換えます ↓
        return $this->from('FROM-ADDRESS@YOUR-DOMAIN.COM')
                    ->subject( "エラーのお知らせ" )
                    ->view('mails.admin')
                    ->with([
                        'user_name' => 'テスト 太郎' ,
                        'my_text'   => $this->message ,
                    ]);
        // ここを書き換えます ↑
    }
}

● メール本文のテンプレートファイル resources/views/mails/admin.blade.php を作成する

まず、 resources/views へ移動し、ディレクトリ mails/ を作成します。 そしてその中にファイル admin.blade.php を以下の内容で作成します

こんにちは{{ $user_name }} !!!<br>
テストメールです<br>
{!! $my_text !!}

● コントローラーからメールを送信する

コントローラーの好きな所に記述します。

use Illuminate\Support\Facades\Mail;
use App\Mail\Admin;
// メール送信
$t = '任意のテキストをここに記述します';
Mail::to('TO-ADDRESS@YOUR-DOMAIN.COM')->send( new Admin($t) );

● .env ファイルのメールの設定を確認する

正しくメール送信が行える設定になっているか .env ファイルを確認します。
ローカルサーバではなくインターネット上にあるサーバの場合はとりあえずは以下の設定でメール送信が可能です。

MAIL_DRIVER=sendmail
MAIL_HOST=localhost
MAIL_PORT=
MAIL_USERNAME=
MAIL_PASSWORD=
MAIL_ENCRYPTION=

● メール送信を記述したコントローラにアクセスしてメールを送信する

メール送信を記述したコントローラにアクセスしてメールを送信してみます。
このようなメールが到着します

● Laravelのメールドライバの種類

.env の MAIL_DRIVER には次の指定ができるようです。

MAIL_DRIVERの値 説明 補足
sendmail PHPのmail関数で送信する(一番簡単)
smtp SMTPサーバーへログインして送信する(id,passが必要)
mailgun MailgunというAPIベースのメール配信サービスから送信する
mandrill MailgunというAPIベースのメール配信サービスから送信する
ses Amazon AWSが提供するAmazon SESから送信する
sparkpost SparkPostというAPIベースのメール配信サービスから送信する
log 送信は行わず、ログファイルに内容を書き込む storage/logs/laravel.log に内容が記述されます
array ロジックは通りますが、送信はされません

引用: https://goo.gl/fjREcG

添付ファイル1
No.1312
11/09 15:23

edit

添付ファイル