メール送信機能の実装について

2018/10/12

mainvisual

Laravelでメールフォームを作ろうと思ったら、まずはメールが送信できるように設定を行います。

googleのGメールを使ってメール送信テストを行います。

 

進め方

【1】Gメール側の設定

【2】.envファイルの編集

【3】config/mail.phpの編集

【4】tinkerでテスト送信

 

【1】Gメール側の設定

Laravelの設定ファイルをこれから編集する前にGメールのセキュリティーレベルを落します。

安全性の低いアプリの設定を オン にします。

img01

【注意】
なお、本番サーバにUPしたときもGmail側で再びブロックされるので解除します。

 

【2】.envファイルの編集

.envファイルを編集します。

Gメールのメールアドレスとパスワードを設定します。

  • MAIL_FROM_ADDREDSS
  • MAIL_FROM_NAME

も何かしら入力します。特に MAIL_FROM_ADDREDSS はnullのままだと送信できません。

また MAIL_FROM_NAME はスペースを入れるとエラーになります。 (tinkerが起動しない)

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=xxxxxx@gmail.com
MAIL_PASSWORD=xxxxxx
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=xxx@xxxxxx.com
MAIL_FROM_NAME=xxxxxx
【注意】
なお、gitを使っている場合は、FTPソフトで.envファイルを個別にアップします。
.envファイルはデフォルトで.gitignoreに追加されているからです。

 

【3】config/mail.phpの編集

"from" の項目だけ編集します。

残りはデフォルトのままで問題ありません。

<?php

return [

  'driver' => env('MAIL_DRIVER', 'smtp'),
  'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
  'port' => env('MAIL_PORT', 587),

  'from' => [
  //ここの設定を追加
  'address' => env('MAIL_FROM_ADDRESS', null),
  'name' => env('MAIL_FROM_NAME', null)
  ],

  'encryption' => env('MAIL_ENCRYPTION', 'tls'),
  'username' => env('MAIL_USERNAME'),
  'password' => env('MAIL_PASSWORD'),
  'sendmail' => '/usr/sbin/sendmail -bs',

];

env関数の第一引数で .env で設定した値を読みます。

なければ、第二引数の設定を読みます。

 

【4】tinkerでテスト送信

送信ができているかのテストはtinkerで確認できます。

artisanコマンドでtinkerを起動します。

php artisan tinker

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

【文法】Mail::raw('メール本文',クロージャー)

クロージャーではメッセージビルダーのインスタンスを渡していきます。

メッセージビルダーの使用できるメソッドは以下になります。

$message->from($address, $name = null);
$message->sender($address, $name = null);
$message->to($address, $name = null);
$message->cc($address, $name = null);
$message->bcc($address, $name = null);
$message->replyTo($address, $name = null);
$message->subject($subject);
$message->priority($level);
$message->attach($pathToFile, array $options = []);

// $data文字列をそのまま付属ファイルへ…
$message->attachData($data, $name, array $options = []);

// 裏で動作するSwiftMailerメッセージインスタンスの取得…
$message->getSwiftMessage();

 

>>> Mail::raw('this is the demonstration.',function($message) {$message->to('{メールアドレス}')->subject('test');});
=> 1

=>1が返ってくればOKです。

※件名やメール本文に半角英数字以外を入力すると文字化けのメールが届きます。

メール送信機能の実装については以上です。

本庄マサノリ

仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら

>> Twitter をフォローする

 

-実践知識