メールの環境設定

Laravel でメール送信の設定を行います。

関連ファイル

  • .env
  • config/mail.php
  • strage/logs/laravel.log


.env

.env は開発環境やステージング環境、本番環境などで変更したい情報をまとめておくファイルです。そこに、メールに関するKEY=VALUEを追加します。

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=465
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=your_address@gmail.com
MAIL_FROM_NAME=your_name
MAIL_USERNAME=your_address@gmail.com
MAIL_PASSWORD=your_password
MAIL_PRETEND=false

上記の設定は Gmailからメール送信することを想定した設定です。

  • MAIL_DRIVER=smtp でSMTPでメールを送信することを指定します。
  • MAIL_HOST 〜 MAIL_PASSWORD まではGmailでSMTP認証する際に必要な値です。必要に応じて変更してください。
  • MAIL_PRETEND は true にすると、実際にはメールを送信せずに、メール送信したことをログに書き出します。今回は false にして実際に Gmailにメールを送ってみます。

なお、gitを使っている場合は、.envを .gitignoreファイルに追加して、管理対象から外して下さい。


config/mail.php

config/mail.php がメールの設定を行うファイルです。
config/mail.php のデフォルトでは .envを参照するようにはなっていない項目もありますが、以下のように修正します。

<?php

return [
    // Mail Driver
    'driver' => env('MAIL_DRIVER', 'smtp'),

    // SMTP Host Address
    'host' => env('MAIL_HOST', 'smtp.mailgun.org'),

    // SMTP Host Port
    'port' => env('MAIL_PORT', 587),

    // Global "From" Address
    'from' => [
        'address' => env('MAIL_FROM_ADDRESS', null),
        'name' => env('MAIL_FROM_NAME', null)
    ],

    // E-Mail Encryption Protocol
    'encryption' => env('MAIL_ENCRYPTION', null),

    // SMTP Server Username
    'username' => env('MAIL_USERNAME', null),

    // SMTP Server Password
    'password' => env('MAIL_PASSWORD', null),

    // Sendmail System Path
    'sendmail' => '/usr/sbin/sendmail -bs',

    // Mail "Pretend"
    'pretend' => env('MAIL_PRETEND', false),
];

env関数を使って、値を.envファイルから取得しています。


メール送信確認

artisan tinker を使って、メール送信できるか確認をしてみます。

tinker を起動します。

$ php artisan tinker
Psy Shell v0.3.4 (PHP 5.6.2 — cli) by Justin Hilema
>>>

Mail::raw() でテキストメールを送信してみます。

>>> Mail::raw('Test Mail', function($message) { $message->to('somebody@example.com')->subject('test'); });
=> 1
>>>

1 が返ってくれば送信成功です。
何かエラーになるようでしたら、エラー内容をよく確認して設定を修正してください。


Mail Pretend

.env で設定した MAIL_PRETENDを trueにしてみます。
実際にはメール送信は実行されず、ログだけ出力されます。
ローカル環境で開発中にメールを送信したくない時に使います。

.env

MAIL_PRETEND=true

tinker で再度メールを送信

>>> Mail::raw('Test Mail', function($message) { $message->to('somebody@example.com')->subject('test'); });
=> null
>>>

今度は Mail::raw() の戻り値に null が返ってきました。
Laravel のログファイルを確認してみます。

strage/logs/laravel.log

[2015-02-18 00:46:06] local.INFO: Pretending to mail message to: somebody@example.com

「送信先メールアドレスへ、メール送信する振りをしました」というログが出力されました。
メールの本文はログに出力されないので、テスト目的にはあまり使えないですね。


log ドライバー

実際にメールを送信すること無く、メールの本文を確認したい場合は、メール設定の driver に log を設定します。ローカルで開発中にデバッグしたい時はこちらがおすすめです。

// .env
...
MAIL_DRIVER=log
...
// config/mail.php
...
    'driver' => env('MAIL_DRIVER', 'log'),
...

tinker で再度メールを送信

>>> Mail::raw('Test Mail', function($message) { $message->to('somebody@example.com')->subject('test'); });
=> null
>>>

ログファイルを確認。
strage/logs/laravel.log

[2015-04-11 03:54:54] local.DEBUG: Message-ID: 
Date: Sat, 11 Apr 2015 03:54:54 +0000
Subject: test
From: hoge@example.com 
To: somebody@example.com
MIME-Version: 1.0
Content-Type: multipart/alternative;
 boundary="_=_swift_v4_1428724494_6a29332f732dad6d8adfdee0df562271_=_"



Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Test Mail  

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中