LaravelではMailable(メイラブル)とNotificationsというふたつの方法でメールを送信できます。
今回は、ユーザーがお問い合わせを送信したときに、控えのメールをMailableで送る方法を解説します。
なおテスト環境は、Laravelのバージョン8を使っています。
Laravelでメールを送れるMailableの使い方【初心者のLaravel入門講座】
下記の流れでメールを送信することにします。
◆今回実行する流れ
- .envファイルでメール送信設定
- configに.envファイルの内容を反映
- Mailを作成
- メールテンプレートのビューファイル作成
- コントローラーを作成
- テスト
下記の状況が整っているとして、説明を進めていきます。
◆準備しておくもの
- 登録情報変更フォームが入ったビューファイル
- ビューファイルの処理を受け取るコントローラー
- ビューファイルとコントローラーをつなぐルート設定
①.envファイルでメール送信設定
まず最初に、.envファイルにメールを送信するための設定を入力します。
下記の5か所を入力してください。
1.MAIL_HOST | メールホスト |
2.MAIL_USERNAME | サーバーに設定したメール |
3.MAIL_PASSWORD | 上記に設定したパスワード |
4.MAIL_FROM_ADDRESS | From欄のアドレス |
5.MAIL_FROM_NAME | From欄のアドレス欄の名前 |
それぞれ説明していきます。
1. Mail_HOST
メールのホスト名になります。
わたしはエックスサーバーを使っています。
エックスサーバーの場合、サーバーパネルにログイン後、「サーバー情報」をクリックします。
表示される画面の2行目に「ホスト名」情報が出てきます。
2.MAIL_USERNAME 3.MAIL_PASSWORD
MAIIL_USERNAMEとMAIL_PASSWORDは、サーバーに登録したものを使います。
登録時のメールに記載されていることが多いです。
エックスサーバーの場合は、Xserverアカウントにログイン後、登録情報確認画面から見ることができます。
4.Mail_FROM_ADDRESS
自動送信されるメールのFrom欄に表示されます。
2.Mail_USERNAMEと同じでもOKです。
5.Mail_FROM_NAME
From欄に表示される名前となります。
デフォルトだと “${APP_NAME}” と入っており、.envファイル1行目に入力されたアプリの名前がFrom欄に入ります。
変更したい場合には、この部分を編集してください。
6. Mail_ADMIN
以上で5個の項目の設定は完了ですが、最後にもうひとつ、Mail_ADMINについて説明します。
これは、お問い合わせ時に管理者側に送信されるときのメールアドレスとなります。
デフォルトでは.envファイルに書かれていませんが、あると便利です。
設定する場合は、Mail_From_NAMEの後(36行目あたり)に、次のように入力しておきましょう。
1 |
MAIL_ADMIN=メールアドレス |
②configに.envファイルの内容を反映
.envに【Mail_ADMIN】を追加した場合、configにも、この設定を反映させておきます。
app/config の mail.phpファイルを開き、91行目あたりに下記を入れておきましょう。
1 |
'admin'=>env('MAIL_ADMIN', null), |
③Mailを作成
php artisan make:mail で新規メールを作成します。
1 |
php artisan make:mail InquiryForm |
app/Mailの中に InquiryForm.php ファイルができます。
次のように編集していきましょう。
順番に説明しますね。
最初に、コントローラーから引数 $inputs を受け取る処理を入れておきます。
(コントローラーは後で作成します。)
1 2 3 4 5 6 |
private $inputs; public function __construct($inputs) { $this->inputs=$inputs; } |
これで、メールの中でも変数が使えるようになります。
次にビューファイルに処理を受け渡しています。
1 2 3 4 5 |
public function build() { return $this->view('inquiry.mail')->with(['inputs'=>$this->inputs]) ->subject('お問い合わせを受け付けました'); } |
ビューファイル inquiry.mail の内容が送信されるようになります。
④メールテンプレートのビューファイル作成
メールの中身になるビューファイルを作っていきます。
resources/viewsの中にinquiryフォルダを作ります。
そのなかに mail.blade.phpファイルを新規作成し、次のようなコードをいれておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>お問い合わせを受け付けました</title> </head> <body> <p>お問い合わせ内容は次のとおりです。</p> ーーーー <p>件名:{{$inputs['title']}}</p> <p>お問い合わせ内容:{{$inputs['body']}}</p> <p>メールアドレス:{{$inputs['email']}}</p> ーーーー <p>担当者よりご連絡いたしますので、今しばらくお待ちください。</p> </body> </html> |
InquiryForm から受け取ったinputs変数を使って、受け取り手の名前など、個別の要素を入れていきましょう。
⑤コントローラーを作成
次に、コントローラーでフォームを処理するコードを書いていきます。
今回のフォームは、次のようなものです。
このフォームの処理を受け取るコントローラーは、最初に、下記のふたつのuseを宣言します。
1 2 |
use Illuminate\Support\Facades\Mail; use App\Mail\InquiryForm; |
次に、メールを送信するコードを書いていきます。
実際の処理を行うコード例は、こちら。
コードの意味
- 赤枠部分:フォームで入力された内容にバリデーションをかける。
- 青色部分:データベースに入力内容を登録。
- 黄色部分:ユーザーと管理者にメール送信。
- 元のページに戻る。
ポイントは黄色のメール送信部分です。
先ほど作成したInquiryFormを通じて、メールを送信するように指示しています。
1 2 3 4 5 |
$admin=config('mail.admin') Mail::to(config('mail.admin'))->send(new InquiryForm($inputs)); $email=$inputs['email']; Mail::to($email)->send(new InquiryForm($inputs)); |
最初に管理者向けメールを送り、次に、送信者にメールを送っています。
管理者のメールアドレスは configファイルの情報を呼び出しています。
⑥メール送信テスト
実際にメールを送信してみます。
次のようなメールが管理者とユーザーに送信されたら、成功!
追伸:うまくいかない場合
use宣言の入れ忘れなどがないか、チェックしてみてくださいね。
また、configの内容が反映されていない、ということも考えられます。
1 |
php artisan config:clear |
1 |
php artisan config:cache |
などをお試しください。
ただ、config:cache実施前にはご注意を。
詳しくは、こちらの記事をご参照ください。
さいごに
今回はMailable機能を使って、メールを送信する方法を解説しました。
コントローラーのコードの書き方は、次のとおり。
Mailableはお問い合わせフォーム自動返信など、いろいろな時に使えます。
似たような機能にNotificationsがありますが、こちらについては、下記で説明しています。
併せて参考にしてください。
コメント